Land HyperTwist roadmap, validation ladder, and domain expansions

This commit is contained in:
axiomlogicnexus 2026-06-02 20:34:03 +00:00
parent ab0d4714db
commit f3cb1350a6
657 changed files with 114962 additions and 226 deletions

View file

@ -31,6 +31,7 @@
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/apache/echarts" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/apache/echarts" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/brianpeiris/RiftSketch" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/brianpeiris/RiftSketch" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/cahidenes/rubiks-cube-solver" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/cahidenes/rubiks-cube-solver" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/cjpais/Handy" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/coqui-ai/TTS" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/coqui-ai/TTS" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/cubing/cubing.js" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/cubing/cubing.js" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/cutelyaware/magiccube4d" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/cutelyaware/magiccube4d" vcs="Git" />
@ -56,7 +57,6 @@
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/pmndrs/use-gesture" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/pmndrs/use-gesture" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/pmndrs/xr" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/pmndrs/xr" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/pmndrs/zustand" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/pmndrs/zustand" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/poliva/cubedex" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/rhasspy/piper" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/rhasspy/piper" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/roice3/Magic120Cell" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/roice3/Magic120Cell" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/roice3/MagicCube5D" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/permissive/roice3/MagicCube5D" vcs="Git" />
@ -102,18 +102,442 @@
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/brownan/Rubiks-Cube-Solver" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/brownan/Rubiks-Cube-Solver" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/cs0x7f/cstimer" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/cs0x7f/cstimer" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/cubing/alg.js" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/cubing/alg.js" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/cubing/mark3" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/cubing/qqTimer" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/cubing/scramble-display" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/cubing/scramble.cubing.net" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/cubing/twisty.js" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/cubing/twisty.js" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/efrantar/rob-twophase" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/efrantar/rob-twophase" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/kash/cubedesk" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/kash/cubedesk" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/onionhoney/roux-trainers" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/onionhoney/roux-trainers" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/poliva/cubedex" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/remotion-dev/remotion" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/remotion-dev/remotion" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/screenpipe/screenpipe" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/screenpipe/screenpipe" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/vwcwong/CubeSim" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/HyperTwist/mirrors/restrictive/vwcwong/CubeSim" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/ScriptoriumAI" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/ScriptoriumAI" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell-worktrees/0r-c-2026-05-24-mattpocock-rkn-sqv-btry-mizchi/MayersScott-rkn-block-checker" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell-worktrees/0r-c-2026-05-24-mattpocock-rkn-sqv-btry-mizchi/mattpocock-skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell-worktrees/0r-c-2026-05-24-mattpocock-rkn-sqv-btry-mizchi/mendrik-private-sqv" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell-worktrees/0r-c-2026-05-24-mattpocock-rkn-sqv-btry-mizchi/meribold-btry" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell-worktrees/0r-c-2026-05-24-mattpocock-rkn-sqv-btry-mizchi/mizchi-skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/0xmassi/stik_app" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/1jehuang/jcode" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/1weiho/next-lens" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/1weiho/open-slide" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/21st-dev/1code" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/99xagency/godmodeskill" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/Ademking/MD-This-Page" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/AgentOps-AI/tokencost" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/AgentWorkforce/relay" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/AgriciDaniel/claude-ads" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/AlpinDale/ssh-dashboard" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/Anbeeld/WRITING.md" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/Beever-AI/beever-atlas" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/BelfrySCAD/BOSL2" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/CadQuery/OCP" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/CadQuery/cadquery" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/ChanningLua/prax-agent" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/ChuprinaDaria/Vibecode-Cleaner-Fartrun" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/CloakHQ/CloakBrowser" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/ConardLi/garden-skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/DenisSergeevitch/agents-best-practices" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/Denvi/FlatCAM" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/Dhravya/webpull" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/DodoApps/dodotidy" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/Doorman11991/smallcode" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/DucPhamNgoc08/CodeVisualizer" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/ENTERPILOT/GOModel" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/Einsia/OpenChronicle" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/Eronred/expo-agent-spinners" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/EvanBacon/serve-sim" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/Evokoa/pgGraph" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/FreePeak/LeanKG" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/GIN-SYSTEMS/vigil-tui" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/GRVYDEV/marky" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/GammaLabTechnologies/harmonist" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/Genymobile/scrcpy" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/GridSpace/grid-apps" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/Helvesec/rmux" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/Infisical/agent-vault" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/KittyCAD/modeling-app" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/LearningCircuit/local-deep-research" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/Lyx3314844-03/superspider" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/Mark393295827/third-brain-v5-skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/MayersScott/rkn-block-checker" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/NV404/gova" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/NYCU-Chung/cc-statusline" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/NikolayS/pgque" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/OpenCoworkAI/open-codesign" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/OpenOSINT/OpenOSINT" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/OpenSquilla/opensquilla" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/PentHertz/LUKSbox" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/PrathamLearnsToCode/paper2code" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/QuinnAho/claudemap" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/ReviewStage/stage-cli" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/RivoLink/leaf" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/RyanCodrai/turbovec" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/SquareWaveSystems/squarebox" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/TencentCloud/CubeSandbox" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/TheBigRoomXXL/tinyfeed" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/TheOrcDev/8bitcn-ui" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/Tommy-yw/RunbookHermes" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/VRSEN/OpenSwarm" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/VectifyAI/OpenKB" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/VoltAgent/awesome-design-md" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/XTraceAI/xtrace-sdk" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/ZenNotes/zennotes" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/ZeroZ-lab/cc-design" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/a2aproject/a2a" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/aaif-goose/goose" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/aarondfrancis/counselors" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/abdosorour7/git-commands-cheatsheet" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/actuallyepic/background-computer-use" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/addyosmani/agent-skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/agavra/tuicr" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/agentscope-ai/agentscope" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/agnetlabs/laddr" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/agno-agi/agno" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/agno-agi/dash" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/aguiarsc/wireframe-ui" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/ahmedkhaleel2004/gitdiagram" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/aidenybai/react-grab" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/aiming-lab/SimpleMem" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/aipotheosis-labs/aci" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/aira-security/mcp-armor" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/akazwz/hostc" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/akitaonrails/ai-memory" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/akshayaggarwal99/jarvis-ai-assistant" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/alash3al/stash" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/alez007/modelship" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/alibaba/page-agent" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/alvinunreal/claude-pets" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/alvinunreal/openpets" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/areofyl/fetch" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/as0ni/pestats" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/awizemann/harness" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/awslabs/aidlc-workflows" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/b-nnett/codex-plusplus" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/backnotprop/rig" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/bensenescu/downy" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/bergside/design-md-chrome" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/besimple-oss/broccoli" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/bklit/bklit-ui" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/borgbackup/borg" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/bradautomates/claude-video" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/browser-use/browser-harness" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/browser-use/browser-harness-js" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/browser-use/bux" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/butthtio/solidity-cot-auditor" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/callstackincubator/agent-device" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/cameroncooke/AXe" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/cathrynlavery/diagram-design" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/chaosprint/hindsight" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/charlie947/social-media-skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/chekusu/wanman" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/chorus-codes/chorus" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/chrisvel/tududi" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/cigoria/simpleShare" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/cjpais/Handy" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/cloudflare/skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/codejunkie99/agentic-stack" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/coderamp-labs/gitingest" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/colbymchenry/codegraph" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/cosmicstack-labs/mercury-agent" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/crafter-station/petdex" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/crynta/terax-ai" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/danish296/codevibes" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/darrylmorley/whatcable" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/dashersw/gea" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/dchu917/ctx" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/debba/gh-dashboard" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/decolua/9router" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/dirac-run/dirac" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/dodo-reach/hermes-desktop" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/doors-dev/doors" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/drasimwagan/mdv" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/drio/unixmagic" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/dropseed/plain" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/duane1024/l123" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/duriantaco/fyn" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/earthtojake/text-to-cad" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/ehmo/code-overhaul-skill" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/elalish/manifold" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/endevco/aube" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/ericjypark/codex-island" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/evanklem/evanflow" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/facebook/idb" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/facebook/pyrefly" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/fancyai-official/skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/ffuf/ffuf" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/fluffypony/dothething" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/flutter/skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/fogleman/sdf" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/fougue/mayo" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/fswatcher/fswatcher" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/fuego-wtf/graphyn-code" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/garritfra/cell" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/garrytan/gbrain" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/getagentseal/codeburn" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/gofsnotify/fsnotify" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/google/agents-cli" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/google/android-emulator-container-scripts" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/google/android-emulator-webrtc" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/google/osv-scanner" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/greptileai/skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/gridex/gridex" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/gumyr/build123d" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/hacktivist123/agent-session-resume" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/haidang1810/md2html" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/hannobraun/fornjot" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/harshkedia177/axon" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/haydenbleasel/files-sdk" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/heyadam/claudedesign-to-swiftui" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/jal-co/shieldcn" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/jscad/OpenJSCAD.org" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/kontext-security/kontext-cli" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/kunchenguid/autopreso" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/kwakseongjae/oh-my-design" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/lahfir/agent-desktop" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/langchain-ai/open-swe" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/laramint/laravel-brain" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/leopiney/linus-torvalds-skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/leox255/loopsy" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/lightseekorg/tokenspeed" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/lukeed/comptime" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/magicuidesign/magicui" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/mandiant/capa-rules" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/mandiant/flare-floss" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/manojmallick/sigmap" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/maria-rcks/miri" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/maria-rcks/t1code" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/martian-engineering/lossless-claw" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/matthart1983/syswatch" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/mattpocock/sandcastle" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/mattpocock/skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/mendrik-private/sqv" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/microsoft/maker.js" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/microsoft/vscode" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/mkeeter/antimony" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/mobile-next/mobile-mcp" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/modem-dev/hunk" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/mozman/ezdxf" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/nateherkai/AIS-OS" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/nateherkai/token-dashboard" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/nativewind/nativewind" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/ncdai/chanhdai.com" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/neo4j-labs/create-context-graph" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/nex-crm/wuphf" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/nexu-io/open-design" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/nkzw-tech/codiff" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/nooga/let-go" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/nxrighthere/UnrealCLR" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/olivier-ls/php-fts" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/open-bias/open-bias" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/open-gsd/gsd-pi" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/open-multi-agent/open-multi-agent" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/openai/symphony" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/openclaw/clawsweeper" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/orhun/ratty" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/outcomeops/context-engineering" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/outsourc-e/hermes-workspace" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/owasp-amass/amass" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/oxc-project/oxc" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pacifio/ui" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/perplexityai/bumblebee" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/phodal/routa" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pithings/ripgrep-node" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pithings/ripgrep-node/vendor/ripgrep" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/plandex-ai/plandex" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pluk-inc/markdown-preview" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/potpie-ai/potpie" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/productdevbook/ceviz" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/projectdiscovery/httpx" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/projectdiscovery/nuclei" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/_example_integration" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/ImAnim/ImAnim" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/ImCoolBar/ImCoolBar" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/ImFileDialog/ImFileDialog" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/ImGuiColorTextEdit/ImGuiColorTextEdit" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/ImGuizmo/ImGuizmo" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/glfw/glfw" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/hello_imgui/hello_imgui" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/hello_imgui/hello_imgui/_example_integration" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/hello_imgui/hello_imgui/external/imgui" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/hello_imgui/hello_imgui/hello_imgui_cmake/ios-cmake" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/imgui-command-palette/imgui-command-palette" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/imgui-knobs/imgui-knobs" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/imgui-node-editor/imgui-node-editor" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/imgui/imgui" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/imgui_md/imgui_md" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/imgui_md/md4c" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/imgui_microtex/MicroTeX" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/imgui_test_engine/imgui_test_engine" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/imgui_test_engine/imgui_test_engine/imgui_test_suite/thirdparty/implot" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/imgui_tex_inspect/imgui_tex_inspect" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/imgui_toggle/imgui_toggle" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/immvision/immvision" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/implot/implot" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/implot3d/implot3d" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/nanovg/MetalNanoVG" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/pthom/imgui_bundle/external/nanovg/nanovg" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/rampstackco/claude-skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/regent-vcs/re_gent" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/rexa-developer/tiks" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/ricosjp/truck" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/rmyndharis/OpenWA" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/rocky-data/rocky" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/rohitg00/agentmemory" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/ronaldo-avalos/Maya" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/russellromney/honker" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/sandeco/reversa" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/scheidydude/codeindex" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/seochecks-ai/slopless" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/sgenoud/replicad" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/sigcli/sigcli" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/sinanata/unity-ui-document-design-system" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/sjsyrek/design-council" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/skydoves/compose-performance-skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/smithersai/claude-p" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/smol-machines/smolvm" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/sqliteai/adam" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/sslboard/throwaway" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/stainlu/hermes-labyrinth" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/stripe/link-cli" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/strukto-ai/mirage" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/supermemoryai/codex-supermemory" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/supermemoryai/smfs" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/tashfeenahmed/freellmapi" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/taucad/tau" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/temporalio/samples-java" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/temporalio/sdk-java" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/temporalio/sdk-typescript" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/temporalio/sdk-typescript/packages/core-bridge/sdk-core" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/thClaws/thClaws" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/tintinweb/pi-subagents" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/tolibear/goalbuddy" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/tractorjuice/arc-kit" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/tw93/Kami" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/uesleibros/wasabi" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/ui-layouts/uilayouts" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/vercel-labs/deepsec" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/vincentkoc/tokenjuice" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/vinhnx/VTCode" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/vyfor/animate" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/wedow/ticket" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/wxtsky/byob" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/xigua-wang/skill-doctor" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/yapstudios/sfsym" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/zalo/CascadeStudio" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/zarazhangrui/beautiful-html-templates" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/zilliztech/claude-context" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/permissive/zolotukhin/zinc" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/1panel-dev/1panel" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/49Agents/49Agents" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/666ghj/mirofish" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/7ritn/VaulTLS" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/AIXerum/AI-Telegram-Assistant" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/Adam-CAD/CADAM" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/AdamJonsson/CodeVR" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/AgriciDaniel/claude-seo" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/BRL-CAD/brlcad" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/BloodHoundAD/BloodHound" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/DavidHDev/react-bits" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/DavidHDev/svelte-bits" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/Devvvmn/ActivSpot" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/Dubibubii/usage-limit-reducer" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/FeSens/auto-arch-tournament" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/Fmstrat/winapps" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/FreeCAD/FreeCAD" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/FreeCAD/FreeCAD-library" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/HugeCatLab/ChatTutor" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/IfcOpenShell/IfcOpenShell" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/Imbad0202/academic-research-skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/JacobStoren/SolveSpaceLib" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/LibreCAD/LibreCAD" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/LibreCAD/LibreCAD_3" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/Open-Cascade-SAS/OCCT" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/OpenVSP/OpenVSP" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/RyjoxTechnologies/Octopoda-OS" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/SakanaAI/AI-Scientist" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/Salusoft89/planegcs" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/SteveTheKiller/KillerPDF" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/abhigyanpatwari/GitNexus" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/abhigyanpatwari/GitNexus" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/abhigyanpatwari/GitNexus_upstream_pristine" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/abhigyanpatwari/GitNexus_upstream_pristine" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/abhigyanpatwari/GitNexus_working_reference" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/abhigyanpatwari/GitNexus_working_reference" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/ad-si/Coding-Flashcards" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/ad-si/LuaCAD" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/adrianhajdin/acquisitions" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/agentic-in/elephant-agent" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/aliasrobotics/cai" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/alireza0/s-ui" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/anvie/evonic" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/arcadeai/blueprint-mcp" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/as0ni/youtube-files" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/asciimoo/hister" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/asekachov/Markie" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/bartvantuijn/noton" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/baxy5/scificn-ui" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/browserbase/skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/bruin-data/dac" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/brunoclz/br-acc" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/budtmo/docker-android" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/bundui/shadcn-admin-dashboard-free" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/calebwin/gitgres" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/chojs23/concord" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/dani-garcia/vaultwarden" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/donalffons/opencascade.js" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/dubstar-04/Design-Core" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/dune3d/dune3d" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/enchant97/note-mark" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/faiscadev/fakecloud" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/fendouai/CodexSaver" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/fosrl/newt" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/ghuntley/how-to-ralph-wiggum" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/golbin/agent-skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/gonemedia/aipointer" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/iampedii/WhiteDNS" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/imtomt/ymawky" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/jasonkneen/agent-simulator" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/kapishdima/soundcn" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/libfive/libfive" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/lsferreira42/nfsdiag" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/manaflow-ai/cmux" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/meribold/btry" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/mizchi/skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/mobile-next/mobilecli" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/multica-ai/multica" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/nakagami/grdpwasm" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/netalertx/NetAlertX" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/ogulcancelik/herdr" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/openscad/MCAD" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/openscad/openscad" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/orailnoor/DroidDesk" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/oven-sh/bun" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/qcad/qcad" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/refactoringhq/tolaria" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/rocketchat/rocket.chat" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/semgrep/semgrep" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/shadcnblocks/shadcn-ui-blocks" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/shadcnstudio/shadcn-studio" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/slavingia/skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/solvespace/solvespace" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/supabitapp/supacode" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/superhq-ai/superhq" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/t8y2/dbx" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/thananon/9arm-skills" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/tsurdilo/my-temporal-dockercompose" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/urbanadventurer/WhatWeb" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/vansh-nagar/Pixel-Perfect" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/warpdotdev/warp" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/waydabber/BetterDisplay" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/xiangechen/chili3d" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/xibyte/jsketcher" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/yantrikos/yantrikdb-server" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/yzhao062/agent-style" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/zarazhangrui/codebase-to-course" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../Workspaces/VectorShell/mirrors/restrictive/zerx-lab/warp" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../visual_studio_solutions/multi_project" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../visual_studio_solutions/multi_project" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../visual_studio_solutions/multi_project/GPT 5.4 HyperTwist parse" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../visual_studio_solutions/multi_project/GPT 5.4 HyperTwist parse" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../visual_studio_solutions/multi_project/GPT 5.4 VectorShell parse" vcs="Git" /> <mapping directory="$PROJECT_DIR$/../visual_studio_solutions/multi_project/GPT 5.4 VectorShell parse" vcs="Git" />

View file

@ -6,9 +6,34 @@
## Build, Test, and Development Commands ## Build, Test, and Development Commands
Open `UnrealHyperTwist/UnrealHyperTwist.uproject` or `UnrealHyperTwist/UnrealHyperTwist.sln` in Visual Studio 2022 / Unreal Engine 5.7 for normal work. Use `git -C C:\HyperTwist status --short` before and after changes. The bootstrap CI check is defined in `.woodpecker/hypertwist-bootstrap.yml` and validates the presence of the Unreal project, source module root, and docs tree. Open `UnrealHyperTwist/UnrealHyperTwist.uproject` or `UnrealHyperTwist/UnrealHyperTwist.sln` in Visual Studio 2022 / Unreal Engine 5.7 for normal work. Use `git -C C:\HyperTwist status --short` before and after changes. The bootstrap CI check is defined in `.woodpecker/hypertwist-bootstrap.yml` and validates the presence of the Unreal project, source module root, and docs tree.
For Unreal C++ validation, the canonical Windows build command is:
```powershell
"C:\Program Files\Epic Games\UE_5.7\Engine\Build\BatchFiles\Build.bat" UnrealHyperTwistEditor Win64 Development C:\HyperTwist\UnrealHyperTwist\UnrealHyperTwist.uproject -WaitMutex -NoHotReloadFromIDE
```
The governing doctrine for when this build is mandatory is:
- `C:\HyperTwist\docs\ops\HYPERTWIST_UNREAL_BUILD_VALIDATION_REQUIREMENT_2026-06-01.md`
The current verified reverse-SSH Windows build lane is documented here:
- `C:\HyperTwist\docs\ops\HYPERTWIST_REVERSE_SSH_WINDOWS_BUILD_LANE_VERIFICATION_2026-06-01.md`
## Agent Instructions ## Agent Instructions
When Visual Studio MCP tools are available, prefer semantic solution/project/document tools over raw filesystem grep for C# or Unreal symbol work. Default the working scope to `UnrealHyperTwist/` and tracked repo docs before exploring mirrors or archived source material. Do not modify `mirrors/`, `zippedreposource/`, or `docs/refs/` unless the task is explicitly about provenance, intake, or operations. If you encounter Rust content under mirrored dependencies, anchor analysis on the nearest `Cargo.toml`; do not fabricate Rust workspace files for this repo. When Visual Studio MCP tools are available, prefer semantic solution/project/document tools over raw filesystem grep for C# or Unreal symbol work. Default the working scope to `UnrealHyperTwist/` and tracked repo docs before exploring mirrors or archived source material. Do not modify `mirrors/`, `zippedreposource/`, or `docs/refs/` unless the task is explicitly about provenance, intake, or operations. If you encounter Rust content under mirrored dependencies, anchor analysis on the nearest `Cargo.toml`; do not fabricate Rust workspace files for this repo.
For Unreal C++ work, do not describe a slice as landed or fully validated from
symbol checks, doc checks, or whitespace checks alone. Unless the user
explicitly changes the rule, run the canonical Windows Unreal build once per
logical C++ slice and say plainly whether it passed, failed, or was not run.
If the build is being done through the Windows reverse tunnel, use the current
verified `localhost:22022` path documented in the verification note rather
than falling back to guesswork or placeholder ports.
The current Linux-side pickup sequence for that lane is now explicitly
recorded in the sensitive runbook section `21A`, including the shared VPS key
staging step and the Windows password-backed connect-back command.
For HyperTwist repo evaluation, repo-custody, or license-audit work, a deep-source closeout is not complete when only the packet and root legal tracker were updated. Before calling the pass closed, explicitly check and update when applicable: For HyperTwist repo evaluation, repo-custody, or license-audit work, a deep-source closeout is not complete when only the packet and root legal tracker were updated. Before calling the pass closed, explicitly check and update when applicable:
- `docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md` - `docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md`
- `docs/ops/HYPERTWIST_RETROACTIVE_AUTHORITY_AND_CLEANUP_BACKFILL_2026-05-20.md` when later evidence changes a relied-on slice or backfill interpretation - `docs/ops/HYPERTWIST_RETROACTIVE_AUTHORITY_AND_CLEANUP_BACKFILL_2026-05-20.md` when later evidence changes a relied-on slice or backfill interpretation
@ -20,6 +45,8 @@ For HyperTwist repo evaluation, repo-custody, or license-audit work, a deep-sour
- `docs/generated/license_audit/HYPERTWIST_REPO_LICENSE_EVIDENCE_AUDIT_2026-05-27.csv` - `docs/generated/license_audit/HYPERTWIST_REPO_LICENSE_EVIDENCE_AUDIT_2026-05-27.csv`
- `docs/generated/license_audit/MIT_LICENSE_TEXTS_2026-05-27/` and `docs/generated/license_audit/THIRD_PARTY_NOTICES_MIT_DRAFT_2026-05-27.txt` when the repo resolves to `MIT` - `docs/generated/license_audit/MIT_LICENSE_TEXTS_2026-05-27/` and `docs/generated/license_audit/THIRD_PARTY_NOTICES_MIT_DRAFT_2026-05-27.txt` when the repo resolves to `MIT`
- `scripts/Write-HyperTwistRepoLicenseEvidenceAudit.ps1` - `scripts/Write-HyperTwistRepoLicenseEvidenceAudit.ps1`
- `docs/ops/HYPERTWIST_UNREAL_BUILD_VALIDATION_REQUIREMENT_2026-06-01.md` when Unreal build-validation posture or command changes
- `docs/ops/HYPERTWIST_REVERSE_SSH_WINDOWS_BUILD_LANE_VERIFICATION_2026-06-01.md` when the verified reverse-tunnel path or proof details change
The current HyperTwist restart endpoint for this sequence is `C:\HyperTwist\docs\ops\HYPERTWIST_DEEP_SOURCE_CLOSEOUT_AND_LEGAL_EVIDENCE_SEQUENCE_2026-05-26.md`. The current HyperTwist restart endpoint for this sequence is `C:\HyperTwist\docs\ops\HYPERTWIST_DEEP_SOURCE_CLOSEOUT_AND_LEGAL_EVIDENCE_SEQUENCE_2026-05-26.md`.

View file

@ -97,6 +97,32 @@ namespace HyperTwistHttpSpeechClientInternal
return Client.ProviderLabel; return Client.ProviderLabel;
} }
TArray<FString> BuildRetrievedHints(const FHyperTwistSpeechSessionConfig* SessionConfig)
{
TArray<FString> RetrievedHints;
if (SessionConfig == nullptr
|| !SessionConfig->OrchestrationProfile.bEnableRetrievedHintAugmentation)
{
return RetrievedHints;
}
const int32 MaxHintCount =
FMath::Max(SessionConfig->OrchestrationProfile.MaxRetrievedHintCount, 0);
for (const FString& CommandHint : SessionConfig->CommandHints)
{
if (!CommandHint.IsEmpty())
{
RetrievedHints.Add(CommandHint);
}
if (RetrievedHints.Num() >= MaxHintCount)
{
break;
}
}
return RetrievedHints;
}
struct FHttpJsonResponse struct FHttpJsonResponse
{ {
bool bCompleted = false; bool bCompleted = false;
@ -308,16 +334,22 @@ FHyperTwistSpeechTranscriptResult UHyperTwistHttpSpeechClient::TranscribeSpeechU
{ {
Result.ProcessedClipCount = 1; Result.ProcessedClipCount = 1;
} }
if (Result.AppliedBatchCollectionWindowMs <= 0)
{
Result.AppliedBatchCollectionWindowMs =
SessionConfig->OrchestrationProfile.BatchCollectionWindowMs;
}
Result.bWordTimestampsRequested = Result.bWordTimestampsRequested =
Result.bWordTimestampsRequested || SessionConfig->OrchestrationProfile.bEnableWordTimestamps; Result.bWordTimestampsRequested || SessionConfig->OrchestrationProfile.bEnableWordTimestamps;
Result.bConditionedOnPreviousText = Result.bConditionedOnPreviousText =
Result.bConditionedOnPreviousText || SessionConfig->OrchestrationProfile.bConditionOnPreviousText; Result.bConditionedOnPreviousText || SessionConfig->OrchestrationProfile.bConditionOnPreviousText;
Result.bUsedBatchedInference = Result.bUsedBatchedInference =
Result.bUsedBatchedInference || SessionConfig->OrchestrationProfile.bEnableBatchedInference; Result.bUsedBatchedInference || SessionConfig->OrchestrationProfile.bEnableBatchedInference;
Result.bUsedPromptHints = if (Result.AppliedPromptRoutingModeId.IsEmpty())
Result.bUsedPromptHints {
|| !SessionConfig->OrchestrationProfile.PrefixHint.IsEmpty() Result.AppliedPromptRoutingModeId =
|| SessionConfig->OrchestrationProfile.HotwordHints.Num() > 0; SessionConfig->OrchestrationProfile.PromptRoutingModeId;
}
if (Result.AppliedPrefixHint.IsEmpty()) if (Result.AppliedPrefixHint.IsEmpty())
{ {
Result.AppliedPrefixHint = SessionConfig->OrchestrationProfile.PrefixHint; Result.AppliedPrefixHint = SessionConfig->OrchestrationProfile.PrefixHint;
@ -326,6 +358,24 @@ FHyperTwistSpeechTranscriptResult UHyperTwistHttpSpeechClient::TranscribeSpeechU
{ {
Result.AppliedHotwordHints = SessionConfig->OrchestrationProfile.HotwordHints; Result.AppliedHotwordHints = SessionConfig->OrchestrationProfile.HotwordHints;
} }
if (Result.AppliedRetrievalContextLaneId.IsEmpty())
{
Result.AppliedRetrievalContextLaneId =
SessionConfig->OrchestrationProfile.RetrievalContextLaneId;
}
if (Result.AppliedRetrievedHints.Num() <= 0)
{
Result.AppliedRetrievedHints =
HyperTwistHttpSpeechClientInternal::BuildRetrievedHints(SessionConfig);
}
Result.RetrievedHintCount = Result.AppliedRetrievedHints.Num();
Result.bUsedRetrievedHintAugmentation =
Result.bUsedRetrievedHintAugmentation || Result.RetrievedHintCount > 0;
Result.bUsedPromptHints =
Result.bUsedPromptHints
|| !Result.AppliedPrefixHint.IsEmpty()
|| Result.AppliedHotwordHints.Num() > 0
|| Result.bUsedRetrievedHintAugmentation;
if (Result.LanguageProbability <= 0.0f if (Result.LanguageProbability <= 0.0f
&& !SessionConfig->LanguageMode.IsEmpty() && !SessionConfig->LanguageMode.IsEmpty()
&& !SessionConfig->LanguageMode.Equals(TEXT("auto"), ESearchCase::IgnoreCase)) && !SessionConfig->LanguageMode.Equals(TEXT("auto"), ESearchCase::IgnoreCase))
@ -413,9 +463,12 @@ FHyperTwistSpeechServiceHealth UHyperTwistHttpSpeechClient::GetSpeechServiceHeal
TEXT("streamingPreview"), TEXT("streamingPreview"),
TEXT("manualTranscriptCommit"), TEXT("manualTranscriptCommit"),
TEXT("batchedTranscribe"), TEXT("batchedTranscribe"),
TEXT("batchWindowTuning"),
TEXT("wordTimestamps"), TEXT("wordTimestamps"),
TEXT("languageDetection"), TEXT("languageDetection"),
TEXT("promptHints"), TEXT("promptHints"),
TEXT("promptRoutingProfiles"),
TEXT("retrievalHintAugmentation"),
TEXT("providerProfileCustody"), TEXT("providerProfileCustody"),
TEXT("byokCustody"), TEXT("byokCustody"),
TEXT("providerRoutingPolicy"), TEXT("providerRoutingPolicy"),
@ -597,9 +650,12 @@ FHyperTwistSpeechServiceHealth UHyperTwistHttpSpeechClient::GetSpeechServiceHeal
Health.Capabilities.AddUnique(TEXT("transport:http")); Health.Capabilities.AddUnique(TEXT("transport:http"));
Health.Capabilities.AddUnique(TEXT("provider-backed-speech")); Health.Capabilities.AddUnique(TEXT("provider-backed-speech"));
Health.Capabilities.AddUnique(TEXT("batchedTranscribe")); Health.Capabilities.AddUnique(TEXT("batchedTranscribe"));
Health.Capabilities.AddUnique(TEXT("batchWindowTuning"));
Health.Capabilities.AddUnique(TEXT("wordTimestamps")); Health.Capabilities.AddUnique(TEXT("wordTimestamps"));
Health.Capabilities.AddUnique(TEXT("languageDetection")); Health.Capabilities.AddUnique(TEXT("languageDetection"));
Health.Capabilities.AddUnique(TEXT("promptHints")); Health.Capabilities.AddUnique(TEXT("promptHints"));
Health.Capabilities.AddUnique(TEXT("promptRoutingProfiles"));
Health.Capabilities.AddUnique(TEXT("retrievalHintAugmentation"));
Health.Capabilities.AddUnique(TEXT("providerProfileCustody")); Health.Capabilities.AddUnique(TEXT("providerProfileCustody"));
Health.Capabilities.AddUnique(TEXT("byokCustody")); Health.Capabilities.AddUnique(TEXT("byokCustody"));
Health.Capabilities.AddUnique(TEXT("providerRoutingPolicy")); Health.Capabilities.AddUnique(TEXT("providerRoutingPolicy"));

View file

@ -1,5 +1,7 @@
#include "HyperTwistRecognition/HyperTwistVoiceClient.h" #include "HyperTwistRecognition/HyperTwistVoiceClient.h"
#include "HyperTwistBootstrap/HyperTwistContractLibrary.h"
#include "Dom/JsonObject.h" #include "Dom/JsonObject.h"
#include "Http.h" #include "Http.h"
#include "HttpManager.h" #include "HttpManager.h"
@ -380,25 +382,18 @@ FHyperTwistNarrationSynthesisResult UHyperTwistHttpVoiceClient::SynthesizeNarrat
FHyperTwistVoiceServiceHealth UHyperTwistHttpVoiceClient::GetVoiceServiceHealth() const FHyperTwistVoiceServiceHealth UHyperTwistHttpVoiceClient::GetVoiceServiceHealth() const
{ {
FHyperTwistVoiceServiceHealth Health; const auto BuildUnavailableHealth = [this]() -> FHyperTwistVoiceServiceHealth
Health.ProviderLabel = ProviderLabel; {
Health.ServiceVersion = TEXT("provider-unavailable/v1"); FHyperTwistVoiceServiceHealth Health = UHyperTwistContractLibrary::MakeMockVoiceServiceHealth();
Health.ServiceEndpoint = ServiceBaseUrl; Health.ProviderLabel = ProviderLabel;
Health.Capabilities = { Health.ServiceVersion = TEXT("provider-unavailable/v1");
TEXT("transport:http"), Health.ServiceEndpoint = ServiceBaseUrl;
TEXT("provider-backed-voice"), Health.Capabilities.AddUnique(TEXT("transport:http"));
TEXT("voiceCatalog"), Health.Capabilities.AddUnique(TEXT("provider-backed-voice"));
TEXT("offlineNarration"), Health.bReady = false;
TEXT("wavOutput"), Health.LastError = LastTransportError;
TEXT("subtitleSeed"), return Health;
TEXT("multiSpeakerNarration"),
TEXT("multiLingualNarration"),
TEXT("speakerReferenceConditioning"),
TEXT("sentenceSplitNarration"),
TEXT("modelBindingSelection"),
TEXT("vocoderBindingSelection")
}; };
Health.bReady = false;
HyperTwistHttpVoiceClientInternal::FHttpResponseState Response; HyperTwistHttpVoiceClientInternal::FHttpResponseState Response;
if (!HyperTwistHttpVoiceClientInternal::ExecuteRequest( if (!HyperTwistHttpVoiceClientInternal::ExecuteRequest(
@ -411,49 +406,20 @@ FHyperTwistVoiceServiceHealth UHyperTwistHttpVoiceClient::GetVoiceServiceHealth(
Response)) Response))
{ {
LastTransportError = Response.Error; LastTransportError = Response.Error;
Health.LastError = LastTransportError; return BuildUnavailableHealth();
return Health;
} }
FHyperTwistVoiceServiceHealth Health;
if (!HyperTwistHttpVoiceClientInternal::DeserializeStruct(Response.ResponseBody, Health) if (!HyperTwistHttpVoiceClientInternal::DeserializeStruct(Response.ResponseBody, Health)
|| !Health.IsStructurallyValid()) || !Health.IsStructurallyValid())
{ {
LastTransportError = TEXT("invalid-provider-response"); LastTransportError = TEXT("invalid-provider-response");
Health = FHyperTwistVoiceServiceHealth(); return BuildUnavailableHealth();
Health.ProviderLabel = ProviderLabel;
Health.ServiceVersion = TEXT("provider-unavailable/v1");
Health.ServiceEndpoint = ServiceBaseUrl;
Health.Capabilities = {
TEXT("transport:http"),
TEXT("provider-backed-voice"),
TEXT("voiceCatalog"),
TEXT("offlineNarration"),
TEXT("wavOutput"),
TEXT("subtitleSeed"),
TEXT("multiSpeakerNarration"),
TEXT("multiLingualNarration"),
TEXT("speakerReferenceConditioning"),
TEXT("sentenceSplitNarration"),
TEXT("modelBindingSelection"),
TEXT("vocoderBindingSelection")
};
Health.SupportedOrchestrationProfiles = {
TEXT("local-basic-narration-v1"),
TEXT("python-multispeaker-narration-v1")
};
Health.SupportedModelBindingIds = {
TEXT("voice-model/local-offline-medium-v1"),
TEXT("voice-model/multilingual-premium-v1")
};
Health.SupportedVocoderBindingIds = {
TEXT("vocoder/default-mono-v1"),
TEXT("vocoder/high-fidelity-v1")
};
Health.bReady = false;
Health.LastError = LastTransportError;
return Health;
} }
const FHyperTwistVoiceServiceHealth DefaultHealth =
UHyperTwistContractLibrary::MakeMockVoiceServiceHealth();
if (Health.ProviderLabel.IsEmpty()) if (Health.ProviderLabel.IsEmpty())
{ {
Health.ProviderLabel = ProviderLabel; Health.ProviderLabel = ProviderLabel;
@ -475,12 +441,39 @@ FHyperTwistVoiceServiceHealth UHyperTwistHttpVoiceClient::GetVoiceServiceHealth(
Health.Capabilities.AddUnique(TEXT("sentenceSplitNarration")); Health.Capabilities.AddUnique(TEXT("sentenceSplitNarration"));
Health.Capabilities.AddUnique(TEXT("modelBindingSelection")); Health.Capabilities.AddUnique(TEXT("modelBindingSelection"));
Health.Capabilities.AddUnique(TEXT("vocoderBindingSelection")); Health.Capabilities.AddUnique(TEXT("vocoderBindingSelection"));
Health.Capabilities.AddUnique(TEXT("downloadableVoiceAssetReview"));
Health.Capabilities.AddUnique(TEXT("voiceModelCardReview"));
Health.Capabilities.AddUnique(TEXT("downloadableVoiceModelReview"));
Health.Capabilities.AddUnique(TEXT("modelLicenseSelectionReview"));
Health.Capabilities.AddUnique(TEXT("termsAcceptanceReview"));
Health.SupportedOrchestrationProfiles.AddUnique(TEXT("local-basic-narration-v1")); Health.SupportedOrchestrationProfiles.AddUnique(TEXT("local-basic-narration-v1"));
Health.SupportedOrchestrationProfiles.AddUnique(TEXT("python-multispeaker-narration-v1")); Health.SupportedOrchestrationProfiles.AddUnique(TEXT("python-multispeaker-narration-v1"));
Health.SupportedModelBindingIds.AddUnique(TEXT("voice-model/local-offline-medium-v1")); Health.SupportedModelBindingIds.AddUnique(TEXT("voice-model/local-offline-medium-v1"));
Health.SupportedModelBindingIds.AddUnique(TEXT("voice-model/multilingual-premium-v1")); Health.SupportedModelBindingIds.AddUnique(TEXT("voice-model/multilingual-premium-v1"));
Health.SupportedVocoderBindingIds.AddUnique(TEXT("vocoder/default-mono-v1")); Health.SupportedVocoderBindingIds.AddUnique(TEXT("vocoder/default-mono-v1"));
Health.SupportedVocoderBindingIds.AddUnique(TEXT("vocoder/high-fidelity-v1")); Health.SupportedVocoderBindingIds.AddUnique(TEXT("vocoder/high-fidelity-v1"));
if (Health.VoiceAssetReviewProfileId.IsEmpty()
|| !Health.VoiceAssetReviewProfileDefinition.IsStructurallyValid())
{
Health.VoiceAssetReviewProfileId = DefaultHealth.VoiceAssetReviewProfileId;
Health.VoiceAssetReviewProfileDefinition = DefaultHealth.VoiceAssetReviewProfileDefinition;
}
if (Health.SupportedVoiceAssetIds.Num() <= 0 || Health.SupportedVoiceAssets.Num() <= 0)
{
Health.SupportedVoiceAssetIds = DefaultHealth.SupportedVoiceAssetIds;
Health.SupportedVoiceAssets = DefaultHealth.SupportedVoiceAssets;
}
if (Health.VoiceModelReviewProfileId.IsEmpty()
|| !Health.VoiceModelReviewProfileDefinition.IsStructurallyValid())
{
Health.VoiceModelReviewProfileId = DefaultHealth.VoiceModelReviewProfileId;
Health.VoiceModelReviewProfileDefinition = DefaultHealth.VoiceModelReviewProfileDefinition;
}
if (Health.SupportedVoiceModelReviewIds.Num() <= 0 || Health.SupportedVoiceModelReviews.Num() <= 0)
{
Health.SupportedVoiceModelReviewIds = DefaultHealth.SupportedVoiceModelReviewIds;
Health.SupportedVoiceModelReviews = DefaultHealth.SupportedVoiceModelReviews;
}
LastTransportError.Reset(); LastTransportError.Reset();
Health.LastError.Reset(); Health.LastError.Reset();
return Health; return Health;

View file

@ -35,6 +35,32 @@ namespace HyperTwistMockSpeechClientInternal
return TEXT("ready coach"); return TEXT("ready coach");
} }
TArray<FString> BuildRetrievedHints(const FHyperTwistSpeechSessionConfig* SessionConfig)
{
TArray<FString> RetrievedHints;
if (SessionConfig == nullptr
|| !SessionConfig->OrchestrationProfile.bEnableRetrievedHintAugmentation)
{
return RetrievedHints;
}
const int32 MaxHintCount =
FMath::Max(SessionConfig->OrchestrationProfile.MaxRetrievedHintCount, 0);
for (const FString& CommandHint : SessionConfig->CommandHints)
{
if (!CommandHint.IsEmpty())
{
RetrievedHints.Add(CommandHint);
}
if (RetrievedHints.Num() >= MaxHintCount)
{
break;
}
}
return RetrievedHints;
}
} }
bool UHyperTwistMockSpeechClient::OpenSpeechSession(const FHyperTwistSpeechSessionConfig& Config, FString& OutError) bool UHyperTwistMockSpeechClient::OpenSpeechSession(const FHyperTwistSpeechSessionConfig& Config, FString& OutError)
@ -84,15 +110,26 @@ FHyperTwistSpeechTranscriptResult UHyperTwistMockSpeechClient::TranscribeSpeechU
Result.ServiceLaneId = SessionConfig->OrchestrationProfile.ServiceLaneId; Result.ServiceLaneId = SessionConfig->OrchestrationProfile.ServiceLaneId;
Result.RequestedBatchSize = SessionConfig->OrchestrationProfile.PreferredBatchSize; Result.RequestedBatchSize = SessionConfig->OrchestrationProfile.PreferredBatchSize;
Result.ProcessedClipCount = 1; Result.ProcessedClipCount = 1;
Result.AppliedBatchCollectionWindowMs =
SessionConfig->OrchestrationProfile.BatchCollectionWindowMs;
Result.bUsedBatchedInference = SessionConfig->OrchestrationProfile.bEnableBatchedInference; Result.bUsedBatchedInference = SessionConfig->OrchestrationProfile.bEnableBatchedInference;
Result.bWordTimestampsRequested = SessionConfig->OrchestrationProfile.bEnableWordTimestamps; Result.bWordTimestampsRequested = SessionConfig->OrchestrationProfile.bEnableWordTimestamps;
Result.bConditionedOnPreviousText = SessionConfig->OrchestrationProfile.bConditionOnPreviousText; Result.bConditionedOnPreviousText = SessionConfig->OrchestrationProfile.bConditionOnPreviousText;
Result.bUsedPromptHints = Result.AppliedPromptRoutingModeId =
!SessionConfig->OrchestrationProfile.PrefixHint.IsEmpty() SessionConfig->OrchestrationProfile.PromptRoutingModeId;
|| SessionConfig->OrchestrationProfile.HotwordHints.Num() > 0; Result.AppliedRetrievalContextLaneId =
SessionConfig->OrchestrationProfile.RetrievalContextLaneId;
Result.LanguageProbability = SessionConfig->OrchestrationProfile.bEnableLanguageDetection ? 0.97f : 1.0f; Result.LanguageProbability = SessionConfig->OrchestrationProfile.bEnableLanguageDetection ? 0.97f : 1.0f;
Result.AppliedPrefixHint = SessionConfig->OrchestrationProfile.PrefixHint; Result.AppliedPrefixHint = SessionConfig->OrchestrationProfile.PrefixHint;
Result.AppliedHotwordHints = SessionConfig->OrchestrationProfile.HotwordHints; Result.AppliedHotwordHints = SessionConfig->OrchestrationProfile.HotwordHints;
Result.AppliedRetrievedHints =
HyperTwistMockSpeechClientInternal::BuildRetrievedHints(SessionConfig);
Result.RetrievedHintCount = Result.AppliedRetrievedHints.Num();
Result.bUsedRetrievedHintAugmentation = Result.RetrievedHintCount > 0;
Result.bUsedPromptHints =
!Result.AppliedPrefixHint.IsEmpty()
|| Result.AppliedHotwordHints.Num() > 0
|| Result.bUsedRetrievedHintAugmentation;
FHyperTwistSpeechTranscriptSegment Segment; FHyperTwistSpeechTranscriptSegment Segment;
Segment.SegmentOrdinal = 0; Segment.SegmentOrdinal = 0;
@ -146,9 +183,12 @@ FHyperTwistSpeechServiceHealth UHyperTwistMockSpeechClient::GetSpeechServiceHeal
Health.Capabilities.AddUnique(TEXT("streamingPreview")); Health.Capabilities.AddUnique(TEXT("streamingPreview"));
Health.Capabilities.AddUnique(TEXT("manualTranscriptCommit")); Health.Capabilities.AddUnique(TEXT("manualTranscriptCommit"));
Health.Capabilities.AddUnique(TEXT("batchedTranscribe")); Health.Capabilities.AddUnique(TEXT("batchedTranscribe"));
Health.Capabilities.AddUnique(TEXT("batchWindowTuning"));
Health.Capabilities.AddUnique(TEXT("wordTimestamps")); Health.Capabilities.AddUnique(TEXT("wordTimestamps"));
Health.Capabilities.AddUnique(TEXT("languageDetection")); Health.Capabilities.AddUnique(TEXT("languageDetection"));
Health.Capabilities.AddUnique(TEXT("promptHints")); Health.Capabilities.AddUnique(TEXT("promptHints"));
Health.Capabilities.AddUnique(TEXT("promptRoutingProfiles"));
Health.Capabilities.AddUnique(TEXT("retrievalHintAugmentation"));
Health.Capabilities.AddUnique(TEXT("providerRoutingPolicy")); Health.Capabilities.AddUnique(TEXT("providerRoutingPolicy"));
Health.Capabilities.AddUnique(TEXT("providerRouteSelection")); Health.Capabilities.AddUnique(TEXT("providerRouteSelection"));
Health.Capabilities.AddUnique(TEXT("workflowPolicyState")); Health.Capabilities.AddUnique(TEXT("workflowPolicyState"));

View file

@ -87,6 +87,11 @@ FHyperTwistVoiceServiceHealth UHyperTwistMockVoiceClient::GetVoiceServiceHealth(
Health.Capabilities.AddUnique(TEXT("sentenceSplitNarration")); Health.Capabilities.AddUnique(TEXT("sentenceSplitNarration"));
Health.Capabilities.AddUnique(TEXT("modelBindingSelection")); Health.Capabilities.AddUnique(TEXT("modelBindingSelection"));
Health.Capabilities.AddUnique(TEXT("vocoderBindingSelection")); Health.Capabilities.AddUnique(TEXT("vocoderBindingSelection"));
Health.Capabilities.AddUnique(TEXT("downloadableVoiceAssetReview"));
Health.Capabilities.AddUnique(TEXT("voiceModelCardReview"));
Health.Capabilities.AddUnique(TEXT("downloadableVoiceModelReview"));
Health.Capabilities.AddUnique(TEXT("modelLicenseSelectionReview"));
Health.Capabilities.AddUnique(TEXT("termsAcceptanceReview"));
Health.SupportedOrchestrationProfiles.AddUnique(TEXT("local-basic-narration-v1")); Health.SupportedOrchestrationProfiles.AddUnique(TEXT("local-basic-narration-v1"));
Health.SupportedOrchestrationProfiles.AddUnique(TEXT("python-multispeaker-narration-v1")); Health.SupportedOrchestrationProfiles.AddUnique(TEXT("python-multispeaker-narration-v1"));
return Health; return Health;

View file

@ -0,0 +1,956 @@
#include "HyperTwistTraining/HyperTwistTrainingLearnedSearchLibrary.h"
namespace HyperTwistTrainingLearnedSearchLibraryInternal
{
const TCHAR* LearnedSearchLicense = TEXT("MIT");
const TCHAR* LearnedSearchRepo = TEXT("yakupbilen/drl-rubiks-cube");
FHyperTwistTrainingSourceAttribution MakeDirectDonorAttribution(
const FString& TrackId,
const FString& Notes
)
{
FHyperTwistTrainingSourceAttribution Attribution;
Attribution.SourceMode = EHyperTwistTrainingSourceMode::DirectDonor;
Attribution.SourceRepo = LearnedSearchRepo;
Attribution.SourceLicense = LearnedSearchLicense;
Attribution.SourceTrackId = TrackId;
Attribution.SourceNotes = Notes;
return Attribution;
}
FHyperTwistTrainingSourceAttribution MakeFirstPartyAttribution(
const FString& TrackId,
const FString& Notes
)
{
FHyperTwistTrainingSourceAttribution Attribution;
Attribution.SourceMode = EHyperTwistTrainingSourceMode::FirstParty;
Attribution.SourceRepo = LearnedSearchRepo;
Attribution.SourceLicense = LearnedSearchLicense;
Attribution.SourceTrackId = TrackId;
Attribution.SourceNotes = Notes;
return Attribution;
}
FHyperTwistTrainingLearnedSearchPackageReference MakePackageReference(
const FString& PackageId,
const FString& Label,
const FString& ExportPath,
const FString& OwnershipRole,
const FString& LicensePosture,
const FString& Summary,
const TArray<FString>& RetainedSurfaceTags,
const TArray<FString>& RequiredNoticeActions,
const TArray<FString>& ExplicitExclusions,
const FHyperTwistTrainingSourceAttribution& SourceAttribution
)
{
FHyperTwistTrainingLearnedSearchPackageReference Reference;
Reference.PackageId = PackageId;
Reference.Label = Label;
Reference.ExportPath = ExportPath;
Reference.OwnershipRole = OwnershipRole;
Reference.LicensePosture = LicensePosture;
Reference.Summary = Summary;
Reference.RetainedSurfaceTags = RetainedSurfaceTags;
Reference.RequiredNoticeActions = RequiredNoticeActions;
Reference.ExplicitExclusions = ExplicitExclusions;
Reference.SourceAttribution = SourceAttribution;
return Reference;
}
void AppendJoined(FString& OutText, const TArray<FString>& Values)
{
for (int32 Index = 0; Index < Values.Num(); ++Index)
{
if (Index > 0)
{
OutText.Append(TEXT(", "));
}
OutText.Append(Values[Index]);
}
}
}
FHyperTwistTrainingLearnedSearchReferenceBundle
UHyperTwistTrainingLearnedSearchLibrary::BuildBundledLearnedSearchReferenceBundle()
{
using namespace HyperTwistTrainingLearnedSearchLibraryInternal;
FHyperTwistTrainingLearnedSearchReferenceBundle Bundle;
Bundle.ReferenceUtc = TEXT("2026-05-31T06:05:00Z");
Bundle.PrimaryExperimentProfileContractId = TEXT("learned-search-experiment-profile");
Bundle.PrimaryAdiGenerationBoundaryId = TEXT("learned-search-adi-generation-boundary");
Bundle.PrimarySearchBenchmarkBoundaryId = TEXT("learned-search-search-benchmark-boundary");
Bundle.PrimaryAttributionBoundaryId = TEXT("learned-search-attribution-boundary");
Bundle.PrimarySequencePolicyContractId = TEXT("learned-search-sequence-policy-contract");
Bundle.PrimarySearchBudgetBoundaryId = TEXT("learned-search-search-budget-boundary");
Bundle.PrimaryNodeIdentityContractId = TEXT("learned-search-node-identity-contract");
Bundle.PrimaryStateExpansionBoundaryId = TEXT("learned-search-state-expansion-boundary");
Bundle.PrimaryFrontierScoringBoundaryId = TEXT("learned-search-frontier-scoring-boundary");
Bundle.PrimarySolutionUnwindBoundaryId = TEXT("learned-search-solution-unwind-boundary");
Bundle.PrimaryValueNetworkShapeBoundaryId = TEXT("learned-search-value-network-shape-boundary");
Bundle.PrimaryGeneratorSyncBoundaryId = TEXT("learned-search-generator-sync-boundary");
const TArray<FString> CommonNoticeActions =
{
TEXT("preserve the upstream MIT license text in third-party notices or equivalent release/legal materials"),
TEXT("preserve the upstream copyright notice for Yakup Bilen")
};
Bundle.PackageReferences =
{
MakePackageReference(
TEXT("package/yakupbilen-cube-state"),
TEXT("cube/cube.py"),
TEXT("./cube/cube.py"),
TEXT("learned-search-state-benchmark-anchor"),
TEXT("direct permissive donor benchmark"),
TEXT("Compact `54`-sticker state encoding, direct move-transition tables, inverse-solution recovery, and anti-cancellation sequence cleanup for bounded first-party experimentation."),
{
TEXT("54-sticker state encoding"),
TEXT("direct move-transition tables"),
TEXT("inverse-solution recovery"),
TEXT("anti-cancellation sequence cleanup")
},
CommonNoticeActions,
{
TEXT("live camera recognition ownership"),
TEXT("committed-face reconstruction ownership"),
TEXT("generalized solver backend ownership")
},
MakeDirectDonorAttribution(
TEXT("yakupbilen/cube-state"),
TEXT("Preserves the compact sticker-state transition benchmark without promoting it into HyperTwist live recognition, reconstruction, or generalized solver ownership.")
)
),
MakePackageReference(
TEXT("package/yakupbilen-adi-train-utils"),
TEXT("train/train_utils.py"),
TEXT("./train/train_utils.py"),
TEXT("adi-generation-benchmark-anchor"),
TEXT("direct permissive donor benchmark"),
TEXT("ADI reverse-rollout generation, distance-bucket state sampling, and weighted target-preparation benchmark material for a narrow first-party experimentation lane."),
{
TEXT("ADI reverse rollout generation"),
TEXT("distance-bucket sampling"),
TEXT("weighted target preparation"),
TEXT("scramble-depth batch composition")
},
CommonNoticeActions,
{
TEXT("live camera recognition ownership"),
TEXT("broad model training platform ownership"),
TEXT("generalized dataset shipping ownership")
},
MakeDirectDonorAttribution(
TEXT("yakupbilen/adi-train-utils"),
TEXT("Preserves the narrow ADI state-generation benchmark beneath a first-party HyperTwist experimentation profile without widening into generic training-platform ownership.")
)
),
MakePackageReference(
TEXT("package/yakupbilen-search"),
TEXT("search/search.py"),
TEXT("./search/search.py"),
TEXT("neural-search-benchmark-anchor"),
TEXT("direct permissive donor benchmark"),
TEXT("Batched neural search experimentation, node-expansion ordering, and frontier ranking patterns for bounded offline benchmark use."),
{
TEXT("batched node expansion"),
TEXT("network-scored frontier ranking"),
TEXT("offline A* benchmark search"),
TEXT("anti-cancellation successor pruning")
},
CommonNoticeActions,
{
TEXT("live solve explanation ownership"),
TEXT("correctness/performance oracle ownership"),
TEXT("browser shell ownership")
},
MakeDirectDonorAttribution(
TEXT("yakupbilen/search"),
TEXT("Preserves the offline neural search benchmark beneath first-party HyperTwist experimentation without turning it into the primary live explanation or solver-oracle owner.")
)
),
MakePackageReference(
TEXT("package/yakupbilen-modelpaper"),
TEXT("networks/modelpaper.py"),
TEXT("./networks/modelpaper.py"),
TEXT("value-network-benchmark-anchor"),
TEXT("direct permissive donor benchmark"),
TEXT("Compact value-network benchmark architecture and batched state-evaluation posture for bounded offline experimentation."),
{
TEXT("small value-network inference"),
TEXT("batched state evaluation"),
TEXT("offline checkpoint research"),
TEXT("neural benchmark scoring")
},
CommonNoticeActions,
{
TEXT("deployed inference service ownership"),
TEXT("broad provider-backed model serving"),
TEXT("voice or assistant platform ownership")
},
MakeDirectDonorAttribution(
TEXT("yakupbilen/modelpaper"),
TEXT("Preserves the compact value-network benchmark beneath a first-party experimentation lane without widening into deployed product-side ML service ownership.")
)
)
};
FHyperTwistTrainingLearnedSearchExperimentProfileContract ExperimentProfile;
ExperimentProfile.ContractId = TEXT("learned-search-experiment-profile");
ExperimentProfile.Title = TEXT("First-party learned heuristic search experimentation profile");
ExperimentProfile.Summary = TEXT("First-party HyperTwist contract for `54`-sticker encoding, ADI batch generation, and offline neural frontier benchmark hooks above existing live recognition and solver-oracle owners.");
ExperimentProfile.RequiredPackageIds =
{
TEXT("package/yakupbilen-cube-state"),
TEXT("package/yakupbilen-adi-train-utils"),
TEXT("package/yakupbilen-search"),
TEXT("package/yakupbilen-modelpaper")
};
ExperimentProfile.StateSurfaceTags =
{
TEXT("54-sticker state encoding"),
TEXT("direct move-transition tables"),
TEXT("inverse-solution recovery"),
TEXT("anti-cancellation sequence cleanup")
};
ExperimentProfile.GenerationSurfaceTags =
{
TEXT("ADI reverse rollout generation"),
TEXT("distance-labeled state batches"),
TEXT("weighted target preparation"),
TEXT("scramble-depth batch composition")
};
ExperimentProfile.SearchSurfaceTags =
{
TEXT("batched neural A* frontier scoring"),
TEXT("offline benchmark replay"),
TEXT("value-network evaluation hooks"),
TEXT("oracle-comparison instrumentation")
};
ExperimentProfile.ExplicitExclusions =
{
TEXT("live camera recognition ownership"),
TEXT("committed-face reconstruction ownership"),
TEXT("correctness/performance oracle ownership"),
TEXT("broad deployed ML platform ownership")
};
ExperimentProfile.SourceAttribution = MakeFirstPartyAttribution(
TEXT("first-party/learned-search-experiment-profile"),
TEXT("Reauthors a bounded first-party HyperTwist ML experimentation lane grounded in the retained yakupbilen benchmark without widening into live perception, reconstruction, or solver-oracle ownership.")
);
Bundle.ExperimentProfileContracts = {ExperimentProfile};
FHyperTwistTrainingLearnedSearchAdiGenerationBoundary AdiBoundary;
AdiBoundary.BoundaryId = TEXT("learned-search-adi-generation-boundary");
AdiBoundary.Title = TEXT("ADI generation and target-preparation boundary");
AdiBoundary.Summary = TEXT("First-party HyperTwist boundary for bounded ADI state generation, distance-bucket sampling, and target-preparation posture above the retained learned-search benchmark packages.");
AdiBoundary.RequiredPackageIds =
{
TEXT("package/yakupbilen-cube-state"),
TEXT("package/yakupbilen-adi-train-utils")
};
AdiBoundary.GenerationSurfaceTags =
{
TEXT("ADI reverse rollout generation"),
TEXT("goal-state seeded expansion"),
TEXT("inverse-solution seeded scrambles"),
TEXT("distance-labeled state batches")
};
AdiBoundary.TargetSurfaceTags =
{
TEXT("weighted target preparation"),
TEXT("discount-aware target blending"),
TEXT("batch supervision assembly"),
TEXT("offline evaluation-only posture")
};
AdiBoundary.ProvenanceCaveats =
{
TEXT("offline experimentation only"),
TEXT("generated states are not correctness oracle proof"),
TEXT("no live camera or browser shell ownership")
};
AdiBoundary.ExplicitExclusions =
{
TEXT("live camera recognition ownership"),
TEXT("committed-face reconstruction ownership"),
TEXT("broad model training platform ownership"),
TEXT("generalized dataset shipping ownership")
};
AdiBoundary.SourceAttribution = MakeFirstPartyAttribution(
TEXT("first-party/learned-search-adi-boundary"),
TEXT("Reauthors the bounded ADI generation and target-preparation seam above retained yakupbilen benchmark surfaces without turning the donor row into a generic training-data or product runtime owner.")
);
Bundle.AdiGenerationBoundaries = {AdiBoundary};
FHyperTwistTrainingLearnedSearchSearchBenchmarkBoundary SearchBoundary;
SearchBoundary.BoundaryId = TEXT("learned-search-search-benchmark-boundary");
SearchBoundary.Title = TEXT("Offline neural search benchmark boundary");
SearchBoundary.Summary = TEXT("First-party HyperTwist boundary for bounded neural frontier search benchmarking and small value-model comparison above the retained learned-search packages.");
SearchBoundary.RequiredPackageIds =
{
TEXT("package/yakupbilen-cube-state"),
TEXT("package/yakupbilen-search"),
TEXT("package/yakupbilen-modelpaper")
};
SearchBoundary.SearchSurfaceTags =
{
TEXT("batched node expansion"),
TEXT("cost-plus-heuristic priority ranking"),
TEXT("anti-cancellation successor pruning"),
TEXT("goal-test solve extraction")
};
SearchBoundary.ModelSurfaceTags =
{
TEXT("small value-network inference"),
TEXT("batched state evaluation"),
TEXT("benchmark checkpoint posture"),
TEXT("offline experiment scoring")
};
SearchBoundary.ProvenanceCaveats =
{
TEXT("brownan and efrantar remain correctness/performance oracle owners"),
TEXT("qbr and rubix-cube-solver remain live recognition/reconstruction owners"),
TEXT("research benchmark latency and accuracy remain non-authoritative")
};
SearchBoundary.ExplicitExclusions =
{
TEXT("correctness/performance oracle ownership"),
TEXT("live solve explanation ownership"),
TEXT("broad provider-backed model serving"),
TEXT("browser or smart-device shell ownership")
};
SearchBoundary.SourceAttribution = MakeFirstPartyAttribution(
TEXT("first-party/learned-search-search-boundary"),
TEXT("Reauthors the bounded offline search benchmark seam above retained yakupbilen packages while keeping correctness, performance, explanation, and live shell ownership elsewhere in the stack.")
);
Bundle.SearchBenchmarkBoundaries = {SearchBoundary};
FHyperTwistTrainingLearnedSearchAttributionBoundary AttributionBoundary;
AttributionBoundary.BoundaryId = TEXT("learned-search-attribution-boundary");
AttributionBoundary.Title = TEXT("Learned-search benchmark attribution boundary");
AttributionBoundary.Summary = TEXT("First-party HyperTwist compliance boundary for using the yakupbilen learned-search stack as a retained permissive benchmark beneath a bounded first-party experimentation lane.");
AttributionBoundary.AllowedUseTags =
{
TEXT("first-party reauthored experimentation lane"),
TEXT("direct permissive benchmark reference"),
TEXT("bounded offline search and ADI contract use")
};
AttributionBoundary.RequiredNoticeActions = CommonNoticeActions;
AttributionBoundary.ProvenanceCaveats =
{
TEXT("yakupbilen remains a research benchmark rather than a camera/perception donor"),
TEXT("qbr and rubix-cube-solver remain live recognition/reconstruction owners"),
TEXT("brownan and efrantar remain solver-oracle owners")
};
AttributionBoundary.ExplicitExclusions =
{
TEXT("silent donor promotion"),
TEXT("treating the benchmark as a live reconstruction owner"),
TEXT("claiming deployed product-side ML serving landed")
};
AttributionBoundary.SourceAttribution = MakeFirstPartyAttribution(
TEXT("first-party/learned-search-attribution-boundary"),
TEXT("Records MIT provenance and packet bounds for the learned-search experimentation lane while keeping the donor row benchmark-grounded and non-authoritative for live product ownership.")
);
Bundle.AttributionBoundaries = {AttributionBoundary};
FHyperTwistTrainingLearnedSearchSequencePolicyContract SequencePolicy;
SequencePolicy.ContractId = TEXT("learned-search-sequence-policy-contract");
SequencePolicy.Title = TEXT("Learned-search anti-cancellation sequence policy");
SequencePolicy.Summary = TEXT("First-party HyperTwist contract for anti-cancellation scramble generation, solved-state inclusion posture, and weighting-policy selection above the retained ADI benchmark seam.");
SequencePolicy.RequiredPackageIds =
{
TEXT("package/yakupbilen-cube-state"),
TEXT("package/yakupbilen-adi-train-utils")
};
SequencePolicy.SequenceSurfaceTags =
{
TEXT("inverse-pair suppression"),
TEXT("triple-repeat suppression"),
TEXT("scramble-depth sequence generation"),
TEXT("shuffle-after-generation posture")
};
SequencePolicy.SamplingSurfaceTags =
{
TEXT("optional solved-state inclusion"),
TEXT("distance-labeled sample distribution"),
TEXT("scramble-batch repetition groups"),
TEXT("solved-state append-before-shuffle posture")
};
SequencePolicy.WeightingSurfaceTags =
{
TEXT("learn-first-close weighting"),
TEXT("lightweight depth weighting"),
TEXT("depth-proportional weighting"),
TEXT("offline batch-only supervision weighting")
};
SequencePolicy.ExplicitExclusions =
{
TEXT("live replay notation ownership"),
TEXT("general scramble registry ownership"),
TEXT("broad model training platform ownership"),
TEXT("correctness/performance oracle ownership")
};
SequencePolicy.SourceAttribution = MakeFirstPartyAttribution(
TEXT("first-party/learned-search-sequence-policy"),
TEXT("Reauthors the narrow anti-cancellation sequence and weighting-policy seam above retained ADI benchmark surfaces without promoting it into HyperTwist live replay, scramble-registry, or solver-oracle ownership.")
);
Bundle.SequencePolicyContracts = {SequencePolicy};
FHyperTwistTrainingLearnedSearchSearchBudgetBoundary SearchBudgetBoundary;
SearchBudgetBoundary.BoundaryId = TEXT("learned-search-search-budget-boundary");
SearchBudgetBoundary.Title = TEXT("Learned-search frontier budget boundary");
SearchBudgetBoundary.Summary = TEXT("First-party HyperTwist boundary for bounded frontier-budget, time/iteration cap, and model-clone checkpoint posture above the retained offline search benchmark seam.");
SearchBudgetBoundary.RequiredPackageIds =
{
TEXT("package/yakupbilen-search"),
TEXT("package/yakupbilen-modelpaper")
};
SearchBudgetBoundary.BudgetSurfaceTags =
{
TEXT("weighted frontier ranking"),
TEXT("batch-size frontier cap"),
TEXT("iteration-cap search mode"),
TEXT("time-cap search mode")
};
SearchBudgetBoundary.FrontierSurfaceTags =
{
TEXT("goal-hit early exit"),
TEXT("closed-node depth replacement"),
TEXT("benchmark checkpoint clone posture"),
TEXT("offline-only heuristic eval mode")
};
SearchBudgetBoundary.ProvenanceCaveats =
{
TEXT("frontier budgets remain benchmark-only and non-authoritative for live solve UX"),
TEXT("model clone posture is a checkpoint benchmark rather than deployed service ownership"),
TEXT("search budgets do not supersede retained solver-oracle owners")
};
SearchBudgetBoundary.ExplicitExclusions =
{
TEXT("live solve explanation ownership"),
TEXT("correctness/performance oracle ownership"),
TEXT("deployed model serving ownership"),
TEXT("browser or smart-device shell ownership")
};
SearchBudgetBoundary.SourceAttribution = MakeFirstPartyAttribution(
TEXT("first-party/learned-search-search-budget"),
TEXT("Reauthors the narrow frontier-budget and checkpoint posture above retained search benchmark surfaces while keeping live solve UX, deployed serving, and oracle ownership elsewhere in the stack.")
);
Bundle.SearchBudgetBoundaries = {SearchBudgetBoundary};
FHyperTwistTrainingLearnedSearchNodeIdentityContract NodeIdentityContract;
NodeIdentityContract.ContractId = TEXT("learned-search-node-identity-contract");
NodeIdentityContract.Title = TEXT("Learned-search node identity contract");
NodeIdentityContract.Summary = TEXT("First-party HyperTwist contract for flattened-byte node hashing, parent-linked lineage, and depth-replacement posture above the retained offline search benchmark seam.");
NodeIdentityContract.RequiredPackageIds =
{
TEXT("package/yakupbilen-cube-state"),
TEXT("package/yakupbilen-search")
};
NodeIdentityContract.IdentitySurfaceTags =
{
TEXT("flattened-byte node hash"),
TEXT("array-equality identity check"),
TEXT("closed-node dedupe posture"),
TEXT("shallower-depth replacement policy")
};
NodeIdentityContract.LineageSurfaceTags =
{
TEXT("parent-linked lineage"),
TEXT("move-index lineage"),
TEXT("depth-tracked node state"),
TEXT("solution-path unwind posture")
};
NodeIdentityContract.ExplicitExclusions =
{
TEXT("canonical replay ledger ownership"),
TEXT("live solve-history ownership"),
TEXT("correctness/performance oracle ownership"),
TEXT("browser or smart-device shell ownership")
};
NodeIdentityContract.SourceAttribution = MakeFirstPartyAttribution(
TEXT("first-party/learned-search-node-identity"),
TEXT("Reauthors the narrow node identity and lineage seam above retained search benchmark surfaces without promoting it into HyperTwist canonical replay, solve-history, or oracle ownership.")
);
Bundle.NodeIdentityContracts = {NodeIdentityContract};
FHyperTwistTrainingLearnedSearchStateExpansionBoundary StateExpansionBoundary;
StateExpansionBoundary.BoundaryId = TEXT("learned-search-state-expansion-boundary");
StateExpansionBoundary.Title = TEXT("Learned-search vectorized state-expansion boundary");
StateExpansionBoundary.Summary = TEXT("First-party HyperTwist boundary for vectorized 12-way successor expansion, solved-state reward tagging, and stacked goal-scan posture above the retained offline search benchmark seam.");
StateExpansionBoundary.RequiredPackageIds =
{
TEXT("package/yakupbilen-cube-state"),
TEXT("package/yakupbilen-search")
};
StateExpansionBoundary.ExpansionSurfaceTags =
{
TEXT("stacked state batching"),
TEXT("12-way successor expansion"),
TEXT("take-along-axis transition routing"),
TEXT("vectorized reward scan")
};
StateExpansionBoundary.GoalSurfaceTags =
{
TEXT("solved-state goal tagging"),
TEXT("goal-hit early return posture"),
TEXT("per-successor reward flattening"),
TEXT("offline-only expansion benchmark")
};
StateExpansionBoundary.ProvenanceCaveats =
{
TEXT("state expansion remains benchmark-only and non-authoritative for live reconstruction"),
TEXT("goal tagging does not supersede retained solver-oracle owners"),
TEXT("vectorized expansion is not a browser or camera shell claim")
};
StateExpansionBoundary.ExplicitExclusions =
{
TEXT("live camera recognition ownership"),
TEXT("committed-face reconstruction ownership"),
TEXT("correctness/performance oracle ownership"),
TEXT("canonical replay verification ownership")
};
StateExpansionBoundary.SourceAttribution = MakeFirstPartyAttribution(
TEXT("first-party/learned-search-state-expansion"),
TEXT("Reauthors the narrow vectorized successor-expansion seam above retained search benchmark surfaces while keeping live reconstruction, replay, and oracle ownership elsewhere in the stack.")
);
Bundle.StateExpansionBoundaries = {StateExpansionBoundary};
FHyperTwistTrainingLearnedSearchFrontierScoringBoundary FrontierScoringBoundary;
FrontierScoringBoundary.BoundaryId = TEXT("learned-search-frontier-scoring-boundary");
FrontierScoringBoundary.Title = TEXT("Learned-search frontier scoring boundary");
FrontierScoringBoundary.Summary = TEXT("First-party HyperTwist boundary for batched frontier pop windows, weighted f-score ordering, categorical heuristic input shaping, and no-grad evaluation posture above the retained offline search benchmark seam.");
FrontierScoringBoundary.RequiredPackageIds =
{
TEXT("package/yakupbilen-cube-state"),
TEXT("package/yakupbilen-search"),
TEXT("package/yakupbilen-modelpaper")
};
FrontierScoringBoundary.FrontierSurfaceTags =
{
TEXT("open-list score ordering"),
TEXT("batched frontier pop window"),
TEXT("weighted f-score depth penalty"),
TEXT("generated-node counter growth")
};
FrontierScoringBoundary.EvaluationSurfaceTags =
{
TEXT("one-hot categorical heuristic input"),
TEXT("model eval gating"),
TEXT("torch no-grad evaluation posture"),
TEXT("per-node heuristic score assignment")
};
FrontierScoringBoundary.ProvenanceCaveats =
{
TEXT("frontier scoring remains benchmark-only and non-authoritative for live coaching"),
TEXT("heuristic evaluation does not supersede retained solver-oracle owners"),
TEXT("categorical heuristic input is not a live recognition preprocessing claim")
};
FrontierScoringBoundary.ExplicitExclusions =
{
TEXT("live solve explanation ownership"),
TEXT("deployed model serving ownership"),
TEXT("correctness/performance oracle ownership"),
TEXT("browser or camera shell ownership")
};
FrontierScoringBoundary.SourceAttribution = MakeFirstPartyAttribution(
TEXT("first-party/learned-search-frontier-scoring"),
TEXT("Reauthors the narrow frontier scoring and batched heuristic-evaluation seam above retained search benchmark surfaces while keeping live coaching, deployed serving, and oracle ownership elsewhere in the stack.")
);
Bundle.FrontierScoringBoundaries = {FrontierScoringBoundary};
FHyperTwistTrainingLearnedSearchSolutionUnwindBoundary SolutionUnwindBoundary;
SolutionUnwindBoundary.BoundaryId = TEXT("learned-search-solution-unwind-boundary");
SolutionUnwindBoundary.Title = TEXT("Learned-search solution unwind boundary");
SolutionUnwindBoundary.Summary = TEXT("First-party HyperTwist boundary for solved-state short-circuit handling, parent-chain solution unwind, move-list normalization, and iteration or timeout result reporting above the retained offline search benchmark seam.");
SolutionUnwindBoundary.RequiredPackageIds =
{
TEXT("package/yakupbilen-cube-state"),
TEXT("package/yakupbilen-search")
};
SolutionUnwindBoundary.RecoverySurfaceTags =
{
TEXT("solved-state short-circuit return"),
TEXT("goal-index to parent-chain unwind"),
TEXT("move-list reverse ordering"),
TEXT("clear-seq normalization posture")
};
SolutionUnwindBoundary.TerminationSurfaceTags =
{
TEXT("iteration-bounded search mode"),
TEXT("time-bounded search mode"),
TEXT("iteration and generated-node reporting"),
TEXT("goal-hit early completion posture")
};
SolutionUnwindBoundary.ProvenanceCaveats =
{
TEXT("solution unwind remains benchmark-only and non-authoritative for canonical replay"),
TEXT("termination reporting does not supersede retained timer or stats owners"),
TEXT("generated-node counts remain experiment telemetry rather than user-facing solve records")
};
SolutionUnwindBoundary.ExplicitExclusions =
{
TEXT("canonical replay ledger ownership"),
TEXT("competition stats ownership"),
TEXT("live timer ownership"),
TEXT("solve-history explanation ownership")
};
SolutionUnwindBoundary.SourceAttribution = MakeFirstPartyAttribution(
TEXT("first-party/learned-search-solution-unwind"),
TEXT("Reauthors the narrow solution unwind and termination-reporting seam above retained search benchmark surfaces while keeping replay, timer, and solve-history ownership elsewhere in the stack.")
);
Bundle.SolutionUnwindBoundaries = {SolutionUnwindBoundary};
FHyperTwistTrainingLearnedSearchValueNetworkShapeBoundary ValueNetworkShapeBoundary;
ValueNetworkShapeBoundary.BoundaryId = TEXT("learned-search-value-network-shape-boundary");
ValueNetworkShapeBoundary.Title = TEXT("Learned-search value-network shape boundary");
ValueNetworkShapeBoundary.Summary = TEXT("First-party HyperTwist boundary for compact flattened-input value-network shape, linear-stack depth, and initialization posture above the retained offline learned-search benchmark seam.");
ValueNetworkShapeBoundary.RequiredPackageIds =
{
TEXT("package/yakupbilen-modelpaper")
};
ValueNetworkShapeBoundary.ArchitectureSurfaceTags =
{
TEXT("flattened input reshape"),
TEXT("4096-2048-512 linear stack"),
TEXT("relu activation ladder"),
TEXT("single-value scalar head")
};
ValueNetworkShapeBoundary.InitializationSurfaceTags =
{
TEXT("xavier-normal weight init"),
TEXT("zero-bias init posture"),
TEXT("input-size keyed network shape"),
TEXT("state-dict clone-compatible layout")
};
ValueNetworkShapeBoundary.ProvenanceCaveats =
{
TEXT("value-network shape remains benchmark-only and non-authoritative for deployed serving"),
TEXT("model architecture does not supersede retained solver-oracle owners"),
TEXT("flattened input shape is not a live perception preprocessing claim")
};
ValueNetworkShapeBoundary.ExplicitExclusions =
{
TEXT("deployed model serving ownership"),
TEXT("broad training-platform ownership"),
TEXT("correctness/performance oracle ownership"),
TEXT("live recognition preprocessing ownership")
};
ValueNetworkShapeBoundary.SourceAttribution = MakeFirstPartyAttribution(
TEXT("first-party/learned-search-value-network-shape"),
TEXT("Reauthors the narrow value-network shape and initialization seam above retained model benchmark surfaces while keeping deployed serving, training-platform, and oracle ownership elsewhere in the stack.")
);
Bundle.ValueNetworkShapeBoundaries = {ValueNetworkShapeBoundary};
FHyperTwistTrainingLearnedSearchGeneratorSyncBoundary GeneratorSyncBoundary;
GeneratorSyncBoundary.BoundaryId = TEXT("learned-search-generator-sync-boundary");
GeneratorSyncBoundary.Title = TEXT("Learned-search generator sync boundary");
GeneratorSyncBoundary.Summary = TEXT("First-party HyperTwist boundary for tau-weighted generator refresh, parameter copy posture, and device-aware sync semantics above the retained offline learned-search benchmark seam.");
GeneratorSyncBoundary.RequiredPackageIds =
{
TEXT("package/yakupbilen-adi-train-utils"),
TEXT("package/yakupbilen-modelpaper")
};
GeneratorSyncBoundary.SyncSurfaceTags =
{
TEXT("tau-weighted generator refresh"),
TEXT("state-dict merge posture"),
TEXT("device-aware parameter copy"),
TEXT("generator reload-after-sync")
};
GeneratorSyncBoundary.ParameterSurfaceTags =
{
TEXT("online-to-generator parameter blend"),
TEXT("per-parameter copy loop"),
TEXT("generator return-on-device posture"),
TEXT("offline sync-only refresh boundary")
};
GeneratorSyncBoundary.ProvenanceCaveats =
{
TEXT("generator sync remains benchmark-only and non-authoritative for deployed training services"),
TEXT("tau blending does not supersede retained provider or model-host owners"),
TEXT("parameter refresh is not a live session personalization claim")
};
GeneratorSyncBoundary.ExplicitExclusions =
{
TEXT("deployed training service ownership"),
TEXT("provider-backed model lifecycle ownership"),
TEXT("live user-memory personalization ownership"),
TEXT("correctness/performance oracle ownership")
};
GeneratorSyncBoundary.SourceAttribution = MakeFirstPartyAttribution(
TEXT("first-party/learned-search-generator-sync"),
TEXT("Reauthors the narrow generator refresh and tau-sync seam above retained learned-search benchmark surfaces while keeping deployed training services, provider lifecycle ownership, and oracle ownership elsewhere in the stack.")
);
Bundle.GeneratorSyncBoundaries = {GeneratorSyncBoundary};
return Bundle;
}
bool UHyperTwistTrainingLearnedSearchLibrary::TryGetExperimentProfileContractById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& ContractId,
FHyperTwistTrainingLearnedSearchExperimentProfileContract& OutContract
)
{
for (const FHyperTwistTrainingLearnedSearchExperimentProfileContract& Contract : Bundle.ExperimentProfileContracts)
{
if (Contract.ContractId == ContractId)
{
OutContract = Contract;
return true;
}
}
OutContract = FHyperTwistTrainingLearnedSearchExperimentProfileContract();
return false;
}
bool UHyperTwistTrainingLearnedSearchLibrary::TryGetAdiGenerationBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchAdiGenerationBoundary& OutBoundary
)
{
for (const FHyperTwistTrainingLearnedSearchAdiGenerationBoundary& Boundary : Bundle.AdiGenerationBoundaries)
{
if (Boundary.BoundaryId == BoundaryId)
{
OutBoundary = Boundary;
return true;
}
}
OutBoundary = FHyperTwistTrainingLearnedSearchAdiGenerationBoundary();
return false;
}
bool UHyperTwistTrainingLearnedSearchLibrary::TryGetSearchBenchmarkBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchSearchBenchmarkBoundary& OutBoundary
)
{
for (const FHyperTwistTrainingLearnedSearchSearchBenchmarkBoundary& Boundary : Bundle.SearchBenchmarkBoundaries)
{
if (Boundary.BoundaryId == BoundaryId)
{
OutBoundary = Boundary;
return true;
}
}
OutBoundary = FHyperTwistTrainingLearnedSearchSearchBenchmarkBoundary();
return false;
}
bool UHyperTwistTrainingLearnedSearchLibrary::TryGetAttributionBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchAttributionBoundary& OutBoundary
)
{
for (const FHyperTwistTrainingLearnedSearchAttributionBoundary& Boundary : Bundle.AttributionBoundaries)
{
if (Boundary.BoundaryId == BoundaryId)
{
OutBoundary = Boundary;
return true;
}
}
OutBoundary = FHyperTwistTrainingLearnedSearchAttributionBoundary();
return false;
}
bool UHyperTwistTrainingLearnedSearchLibrary::TryGetSequencePolicyContractById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& ContractId,
FHyperTwistTrainingLearnedSearchSequencePolicyContract& OutContract
)
{
for (const FHyperTwistTrainingLearnedSearchSequencePolicyContract& Contract : Bundle.SequencePolicyContracts)
{
if (Contract.ContractId == ContractId)
{
OutContract = Contract;
return true;
}
}
OutContract = FHyperTwistTrainingLearnedSearchSequencePolicyContract();
return false;
}
bool UHyperTwistTrainingLearnedSearchLibrary::TryGetSearchBudgetBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchSearchBudgetBoundary& OutBoundary
)
{
for (const FHyperTwistTrainingLearnedSearchSearchBudgetBoundary& Boundary : Bundle.SearchBudgetBoundaries)
{
if (Boundary.BoundaryId == BoundaryId)
{
OutBoundary = Boundary;
return true;
}
}
OutBoundary = FHyperTwistTrainingLearnedSearchSearchBudgetBoundary();
return false;
}
bool UHyperTwistTrainingLearnedSearchLibrary::TryGetNodeIdentityContractById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& ContractId,
FHyperTwistTrainingLearnedSearchNodeIdentityContract& OutContract
)
{
for (const FHyperTwistTrainingLearnedSearchNodeIdentityContract& Contract : Bundle.NodeIdentityContracts)
{
if (Contract.ContractId == ContractId)
{
OutContract = Contract;
return true;
}
}
OutContract = FHyperTwistTrainingLearnedSearchNodeIdentityContract();
return false;
}
bool UHyperTwistTrainingLearnedSearchLibrary::TryGetStateExpansionBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchStateExpansionBoundary& OutBoundary
)
{
for (const FHyperTwistTrainingLearnedSearchStateExpansionBoundary& Boundary : Bundle.StateExpansionBoundaries)
{
if (Boundary.BoundaryId == BoundaryId)
{
OutBoundary = Boundary;
return true;
}
}
OutBoundary = FHyperTwistTrainingLearnedSearchStateExpansionBoundary();
return false;
}
bool UHyperTwistTrainingLearnedSearchLibrary::TryGetFrontierScoringBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchFrontierScoringBoundary& OutBoundary
)
{
for (const FHyperTwistTrainingLearnedSearchFrontierScoringBoundary& Boundary : Bundle.FrontierScoringBoundaries)
{
if (Boundary.BoundaryId == BoundaryId)
{
OutBoundary = Boundary;
return true;
}
}
OutBoundary = FHyperTwistTrainingLearnedSearchFrontierScoringBoundary();
return false;
}
bool UHyperTwistTrainingLearnedSearchLibrary::TryGetSolutionUnwindBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchSolutionUnwindBoundary& OutBoundary
)
{
for (const FHyperTwistTrainingLearnedSearchSolutionUnwindBoundary& Boundary : Bundle.SolutionUnwindBoundaries)
{
if (Boundary.BoundaryId == BoundaryId)
{
OutBoundary = Boundary;
return true;
}
}
OutBoundary = FHyperTwistTrainingLearnedSearchSolutionUnwindBoundary();
return false;
}
bool UHyperTwistTrainingLearnedSearchLibrary::TryGetValueNetworkShapeBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchValueNetworkShapeBoundary& OutBoundary
)
{
for (const FHyperTwistTrainingLearnedSearchValueNetworkShapeBoundary& Boundary : Bundle.ValueNetworkShapeBoundaries)
{
if (Boundary.BoundaryId == BoundaryId)
{
OutBoundary = Boundary;
return true;
}
}
OutBoundary = FHyperTwistTrainingLearnedSearchValueNetworkShapeBoundary();
return false;
}
bool UHyperTwistTrainingLearnedSearchLibrary::TryGetGeneratorSyncBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchGeneratorSyncBoundary& OutBoundary
)
{
for (const FHyperTwistTrainingLearnedSearchGeneratorSyncBoundary& Boundary : Bundle.GeneratorSyncBoundaries)
{
if (Boundary.BoundaryId == BoundaryId)
{
OutBoundary = Boundary;
return true;
}
}
OutBoundary = FHyperTwistTrainingLearnedSearchGeneratorSyncBoundary();
return false;
}
FString UHyperTwistTrainingLearnedSearchLibrary::BuildPackageChecklistTsv(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle
)
{
using namespace HyperTwistTrainingLearnedSearchLibraryInternal;
FString Checklist = TEXT("PackageId\tLabel\tExportPath\tOwnershipRole\tLicensePosture\tRetainedSurfaceTags\tRequiredNoticeActions\tExplicitExclusions\n");
for (const FHyperTwistTrainingLearnedSearchPackageReference& Reference : Bundle.PackageReferences)
{
FString RetainedSurfaceTags;
AppendJoined(RetainedSurfaceTags, Reference.RetainedSurfaceTags);
FString NoticeActions;
AppendJoined(NoticeActions, Reference.RequiredNoticeActions);
FString Exclusions;
AppendJoined(Exclusions, Reference.ExplicitExclusions);
Checklist += FString::Printf(
TEXT("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n"),
*Reference.PackageId,
*Reference.Label,
*Reference.ExportPath,
*Reference.OwnershipRole,
*Reference.LicensePosture,
*RetainedSurfaceTags,
*NoticeActions,
*Exclusions
);
}
return Checklist;
}

View file

@ -68,6 +68,7 @@ UHyperTwistTrainingMagic120CellLibrary::BuildBundledMagic120CellReferenceBundle(
Bundle.ReferenceUtc = TEXT("2026-05-22T09:15:00Z"); Bundle.ReferenceUtc = TEXT("2026-05-22T09:15:00Z");
Bundle.PrimaryRuntimeProfileContractId = TEXT("magic120cell-runtime-profile"); Bundle.PrimaryRuntimeProfileContractId = TEXT("magic120cell-runtime-profile");
Bundle.PrimaryPersistenceBoundaryId = TEXT("magic120cell-persistence-boundary"); Bundle.PrimaryPersistenceBoundaryId = TEXT("magic120cell-persistence-boundary");
Bundle.PrimaryViewProfileContractId = TEXT("magic120cell-focus-view-profile");
Bundle.PrimaryAttributionBoundaryId = TEXT("magic120cell-mit-attribution-boundary"); Bundle.PrimaryAttributionBoundaryId = TEXT("magic120cell-mit-attribution-boundary");
const TArray<FString> CommonNoticeActions = const TArray<FString> CommonNoticeActions =
@ -294,6 +295,60 @@ UHyperTwistTrainingMagic120CellLibrary::BuildBundledMagic120CellReferenceBundle(
); );
Bundle.PersistenceBoundaries = {PersistenceBoundary}; Bundle.PersistenceBoundaries = {PersistenceBoundary};
FHyperTwistTrainingMagic120CellViewProfileContract ViewProfileContract;
ViewProfileContract.ContractId = TEXT("magic120cell-focus-view-profile");
ViewProfileContract.Title = TEXT("Magic120Cell symmetry-aware focus view profile");
ViewProfileContract.Summary = TEXT("First-party HyperTwist contract for Magic120Cell projection, symmetry, visibility, and center-cell focus posture above the dedicated family runtime profile without inheriting the legacy host or renderer shell.");
ViewProfileContract.RequiredPackageIds =
{
TEXT("package/magic120cell-family-core"),
TEXT("package/magic120cell-settings")
};
ViewProfileContract.ProjectionSurfaceTags =
{
TEXT("4D projection distance"),
TEXT("cell-distance spacing"),
TEXT("cell-size spacing"),
TEXT("sticker-size spacing"),
TEXT("1C/2C/3C sticker ratio tuning")
};
ViewProfileContract.SymmetryPresetTags =
{
TEXT("full-puzzle default mode"),
TEXT("layer-display default symmetry"),
TEXT("torus focus preset"),
TEXT("hypercube focus preset"),
TEXT("ring focus preset")
};
ViewProfileContract.VisibilityPresetTags =
{
TEXT("logical visibility depth ladder"),
TEXT("12-cell physical visibility vector"),
TEXT("draw inverted cells toggle"),
TEXT("reverse inverted-cell color toggle"),
TEXT("wireframe remains non-authoritative")
};
ViewProfileContract.FocusSurfaceTags =
{
TEXT("center-cell recentering"),
TEXT("1C highlight toggle"),
TEXT("2C highlight toggle"),
TEXT("3C highlight toggle"),
TEXT("4C highlight toggle")
};
ViewProfileContract.ExplicitExclusions =
{
TEXT("WinForms/OpenGL host-shell ownership"),
TEXT("broad renderer ownership"),
TEXT("generic non-Euclidean topology ownership"),
TEXT("broad interaction-shell widening")
};
ViewProfileContract.SourceAttribution = MakeAttribution(
TEXT("magic120cell/focus-view-profile"),
TEXT("Preserves the Magic120Cell settings-derived focus view posture while keeping HyperTwist first-party for the actual host shell, renderer, and broader immersive interaction runtime.")
);
Bundle.ViewProfileContracts = {ViewProfileContract};
FHyperTwistTrainingMagic120CellAttributionBoundary AttributionBoundary; FHyperTwistTrainingMagic120CellAttributionBoundary AttributionBoundary;
AttributionBoundary.BoundaryId = TEXT("magic120cell-mit-attribution-boundary"); AttributionBoundary.BoundaryId = TEXT("magic120cell-mit-attribution-boundary");
AttributionBoundary.Title = TEXT("Magic120Cell donor attribution boundary"); AttributionBoundary.Title = TEXT("Magic120Cell donor attribution boundary");
@ -383,6 +438,25 @@ bool UHyperTwistTrainingMagic120CellLibrary::TryGetAttributionBoundaryById(
return false; return false;
} }
bool UHyperTwistTrainingMagic120CellLibrary::TryGetViewProfileContractById(
const FHyperTwistTrainingMagic120CellReferenceBundle& Bundle,
const FString& ContractId,
FHyperTwistTrainingMagic120CellViewProfileContract& OutContract
)
{
for (const FHyperTwistTrainingMagic120CellViewProfileContract& Contract : Bundle.ViewProfileContracts)
{
if (Contract.ContractId == ContractId)
{
OutContract = Contract;
return true;
}
}
OutContract = FHyperTwistTrainingMagic120CellViewProfileContract();
return false;
}
FString UHyperTwistTrainingMagic120CellLibrary::BuildPackageChecklistTsv( FString UHyperTwistTrainingMagic120CellLibrary::BuildPackageChecklistTsv(
const FHyperTwistTrainingMagic120CellReferenceBundle& Bundle const FHyperTwistTrainingMagic120CellReferenceBundle& Bundle
) )

View file

@ -68,6 +68,7 @@ UHyperTwistTrainingMagicCube5DLibrary::BuildBundledMagicCube5DReferenceBundle()
Bundle.ReferenceUtc = TEXT("2026-05-22T14:05:00Z"); Bundle.ReferenceUtc = TEXT("2026-05-22T14:05:00Z");
Bundle.PrimaryRuntimeProfileContractId = TEXT("magiccube5d-runtime-profile"); Bundle.PrimaryRuntimeProfileContractId = TEXT("magiccube5d-runtime-profile");
Bundle.PrimaryPersistenceBoundaryId = TEXT("magiccube5d-persistence-boundary"); Bundle.PrimaryPersistenceBoundaryId = TEXT("magiccube5d-persistence-boundary");
Bundle.PrimaryViewProfileContractId = TEXT("magiccube5d-projection-view-profile");
Bundle.PrimaryAttributionBoundaryId = TEXT("magiccube5d-mit-attribution-boundary"); Bundle.PrimaryAttributionBoundaryId = TEXT("magiccube5d-mit-attribution-boundary");
const TArray<FString> CommonNoticeActions = const TArray<FString> CommonNoticeActions =
@ -300,6 +301,61 @@ UHyperTwistTrainingMagicCube5DLibrary::BuildBundledMagicCube5DReferenceBundle()
); );
Bundle.PersistenceBoundaries = {PersistenceBoundary}; Bundle.PersistenceBoundaries = {PersistenceBoundary};
FHyperTwistTrainingMagicCube5DViewProfileContract ViewProfileContract;
ViewProfileContract.ContractId = TEXT("magiccube5d-projection-view-profile");
ViewProfileContract.Title = TEXT("MagicCube5D projection and focus view profile");
ViewProfileContract.Summary = TEXT("First-party HyperTwist contract for MagicCube5D projection distances, stereo posture, face-visibility controls, and accent-driven focus posture above the dedicated 5D runtime profile without inheriting the legacy renderer or host shell.");
ViewProfileContract.RequiredPackageIds =
{
TEXT("package/magiccube5d-family-core"),
TEXT("package/magiccube5d-settings"),
TEXT("package/magiccube5d-state-transformer")
};
ViewProfileContract.ProjectionSurfaceTags =
{
TEXT("5D projection distance"),
TEXT("4D projection distance"),
TEXT("face-offset spacing"),
TEXT("sticker-offset spacing"),
TEXT("sticker-size spacing")
};
ViewProfileContract.StereoSurfaceTags =
{
TEXT("stereo disabled default"),
TEXT("cross-eyed stereo posture"),
TEXT("anaglyph stereo posture"),
TEXT("anaglyph no-color posture"),
TEXT("stereo separation tuning")
};
ViewProfileContract.VisibilitySurfaceTags =
{
TEXT("all-faces visible default"),
TEXT("per-face invisibility vector"),
TEXT("show-all-cubie-stickers toggle"),
TEXT("face-visibility reset"),
TEXT("stereo blocks sticker picking")
};
ViewProfileContract.FocusSurfaceTags =
{
TEXT("accent emphasis ladder"),
TEXT("control-click fifth-axis view rotation"),
TEXT("color-signature cubie highlighting"),
TEXT("order-three default family mode"),
TEXT("view-centered solved-progress readout posture")
};
ViewProfileContract.ExplicitExclusions =
{
TEXT("WinForms/OpenGL host-shell ownership"),
TEXT("stereo/anaglyph renderer ownership"),
TEXT("generic hyper-runtime ownership"),
TEXT("broad macro/tutorial shell widening")
};
ViewProfileContract.SourceAttribution = MakeAttribution(
TEXT("magiccube5d/projection-view-profile"),
TEXT("Preserves the MagicCube5D settings-derived projection and focus-view posture while keeping HyperTwist first-party for the actual host shell, stereo renderer behavior, and broader immersive runtime ownership.")
);
Bundle.ViewProfileContracts = {ViewProfileContract};
FHyperTwistTrainingMagicCube5DAttributionBoundary AttributionBoundary; FHyperTwistTrainingMagicCube5DAttributionBoundary AttributionBoundary;
AttributionBoundary.BoundaryId = TEXT("magiccube5d-mit-attribution-boundary"); AttributionBoundary.BoundaryId = TEXT("magiccube5d-mit-attribution-boundary");
AttributionBoundary.Title = TEXT("MagicCube5D donor attribution boundary"); AttributionBoundary.Title = TEXT("MagicCube5D donor attribution boundary");
@ -391,6 +447,25 @@ bool UHyperTwistTrainingMagicCube5DLibrary::TryGetAttributionBoundaryById(
return false; return false;
} }
bool UHyperTwistTrainingMagicCube5DLibrary::TryGetViewProfileContractById(
const FHyperTwistTrainingMagicCube5DReferenceBundle& Bundle,
const FString& ContractId,
FHyperTwistTrainingMagicCube5DViewProfileContract& OutContract
)
{
for (const FHyperTwistTrainingMagicCube5DViewProfileContract& Contract : Bundle.ViewProfileContracts)
{
if (Contract.ContractId == ContractId)
{
OutContract = Contract;
return true;
}
}
OutContract = FHyperTwistTrainingMagicCube5DViewProfileContract();
return false;
}
FString UHyperTwistTrainingMagicCube5DLibrary::BuildPackageChecklistTsv( FString UHyperTwistTrainingMagicCube5DLibrary::BuildPackageChecklistTsv(
const FHyperTwistTrainingMagicCube5DReferenceBundle& Bundle const FHyperTwistTrainingMagicCube5DReferenceBundle& Bundle
) )

View file

@ -71,6 +71,18 @@ public:
UFUNCTION(BlueprintPure, Category = "HyperTwist|Recognition") UFUNCTION(BlueprintPure, Category = "HyperTwist|Recognition")
static TArray<FHyperTwistVoiceProfileSummary> MakeSampleVoiceProfiles(); static TArray<FHyperTwistVoiceProfileSummary> MakeSampleVoiceProfiles();
UFUNCTION(BlueprintPure, Category = "HyperTwist|Recognition")
static FHyperTwistVoiceAssetReviewProfile MakeSampleVoiceAssetReviewProfile();
UFUNCTION(BlueprintPure, Category = "HyperTwist|Recognition")
static TArray<FHyperTwistVoiceAssetDescriptor> MakeSampleLocalVoiceAssetDescriptors();
UFUNCTION(BlueprintPure, Category = "HyperTwist|Recognition")
static FHyperTwistVoiceModelReviewProfile MakeSampleVoiceModelReviewProfile();
UFUNCTION(BlueprintPure, Category = "HyperTwist|Recognition")
static TArray<FHyperTwistVoiceModelReviewDescriptor> MakeSampleAdvancedVoiceModelReviewDescriptors();
UFUNCTION(BlueprintPure, Category = "HyperTwist|Recognition") UFUNCTION(BlueprintPure, Category = "HyperTwist|Recognition")
static FHyperTwistNarrationSynthesisRequest MakeSampleNarrationSynthesisRequest(); static FHyperTwistNarrationSynthesisRequest MakeSampleNarrationSynthesisRequest();
@ -208,6 +220,37 @@ public:
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills") UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillDesignShellState MakeSampleSkillDesignShellState(); static FHyperTwistSkillDesignShellState MakeSampleSkillDesignShellState();
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillWorkflowReviewState MakeSampleSkillWorkflowReviewState();
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillImplementationDelegationState
MakeSampleSkillImplementationDelegationState();
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillPlanOrchestrationState
MakeSampleSkillPlanOrchestrationState();
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillProviderProfileRoutingState
MakeSampleSkillProviderProfileRoutingState();
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillProviderUsageOperationsAuditState
MakeSampleSkillProviderUsageOperationsAuditState();
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillDomainPackFrameworkState
MakeSampleSkillDomainPackFrameworkState();
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillRetainedDomainPackState
MakeSampleSkillRetainedDomainPackState();
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillCreativeMediaPackState
MakeSampleSkillCreativeMediaPackState();
UFUNCTION(BlueprintPure, Category = "HyperTwist|Training") UFUNCTION(BlueprintPure, Category = "HyperTwist|Training")
static FHyperTwistTrainingRepositoryIntegrityReport MakeSampleTrainingRepositoryIntegrityReport(); static FHyperTwistTrainingRepositoryIntegrityReport MakeSampleTrainingRepositoryIntegrityReport();
@ -462,6 +505,52 @@ public:
const FHyperTwistSkillDesignShellState& SkillDesignShellState const FHyperTwistSkillDesignShellState& SkillDesignShellState
); );
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Serialization")
static FString SerializeSkillWorkflowReviewStateToJson(
const FHyperTwistSkillWorkflowReviewState& SkillWorkflowReviewState
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Serialization")
static FString SerializeSkillImplementationDelegationStateToJson(
const FHyperTwistSkillImplementationDelegationState&
SkillImplementationDelegationState
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Serialization")
static FString SerializeSkillPlanOrchestrationStateToJson(
const FHyperTwistSkillPlanOrchestrationState& SkillPlanOrchestrationState
);
UFUNCTION(BlueprintPure, Category = "HyperTwist|Serialization")
static FString SerializeSkillProviderProfileRoutingStateToJson(
const FHyperTwistSkillProviderProfileRoutingState&
SkillProviderProfileRoutingState
);
UFUNCTION(BlueprintPure, Category = "HyperTwist|Serialization")
static FString SerializeSkillProviderUsageOperationsAuditStateToJson(
const FHyperTwistSkillProviderUsageOperationsAuditState&
SkillProviderUsageOperationsAuditState
);
UFUNCTION(BlueprintPure, Category = "HyperTwist|Serialization")
static FString SerializeSkillDomainPackFrameworkStateToJson(
const FHyperTwistSkillDomainPackFrameworkState&
SkillDomainPackFrameworkState
);
UFUNCTION(BlueprintPure, Category = "HyperTwist|Serialization")
static FString SerializeSkillRetainedDomainPackStateToJson(
const FHyperTwistSkillRetainedDomainPackState&
SkillRetainedDomainPackState
);
UFUNCTION(BlueprintPure, Category = "HyperTwist|Serialization")
static FString SerializeSkillCreativeMediaPackStateToJson(
const FHyperTwistSkillCreativeMediaPackState&
SkillCreativeMediaPackState
);
UFUNCTION(BlueprintPure, Category = "HyperTwist|Serialization") UFUNCTION(BlueprintPure, Category = "HyperTwist|Serialization")
static FString SerializeTrainingTimerExportPacketToJson(const FHyperTwistTrainingTimerExportPacket& TimerExportPacket); static FString SerializeTrainingTimerExportPacketToJson(const FHyperTwistTrainingTimerExportPacket& TimerExportPacket);
@ -612,6 +701,60 @@ public:
FHyperTwistSkillDesignShellState& OutSkillDesignShellState FHyperTwistSkillDesignShellState& OutSkillDesignShellState
); );
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Serialization")
static bool DeserializeSkillWorkflowReviewStateFromJson(
const FString& Json,
FHyperTwistSkillWorkflowReviewState& OutSkillWorkflowReviewState
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Serialization")
static bool DeserializeSkillImplementationDelegationStateFromJson(
const FString& Json,
FHyperTwistSkillImplementationDelegationState&
OutSkillImplementationDelegationState
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Serialization")
static bool DeserializeSkillPlanOrchestrationStateFromJson(
const FString& Json,
FHyperTwistSkillPlanOrchestrationState& OutSkillPlanOrchestrationState
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Serialization")
static bool DeserializeSkillProviderProfileRoutingStateFromJson(
const FString& Json,
FHyperTwistSkillProviderProfileRoutingState&
OutSkillProviderProfileRoutingState
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Serialization")
static bool DeserializeSkillProviderUsageOperationsAuditStateFromJson(
const FString& Json,
FHyperTwistSkillProviderUsageOperationsAuditState&
OutSkillProviderUsageOperationsAuditState
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Serialization")
static bool DeserializeSkillDomainPackFrameworkStateFromJson(
const FString& Json,
FHyperTwistSkillDomainPackFrameworkState&
OutSkillDomainPackFrameworkState
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Serialization")
static bool DeserializeSkillRetainedDomainPackStateFromJson(
const FString& Json,
FHyperTwistSkillRetainedDomainPackState&
OutSkillRetainedDomainPackState
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Serialization")
static bool DeserializeSkillCreativeMediaPackStateFromJson(
const FString& Json,
FHyperTwistSkillCreativeMediaPackState&
OutSkillCreativeMediaPackState
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Serialization") UFUNCTION(BlueprintCallable, Category = "HyperTwist|Serialization")
static bool DeserializeTrainingTimerExportPacketFromJson(const FString& Json, FHyperTwistTrainingTimerExportPacket& OutTimerExportPacket); static bool DeserializeTrainingTimerExportPacketFromJson(const FString& Json, FHyperTwistTrainingTimerExportPacket& OutTimerExportPacket);
}; };

View file

@ -3,7 +3,11 @@
#include "CoreMinimal.h" #include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h" #include "Kismet/BlueprintFunctionLibrary.h"
#include "HyperTwistMemory/HyperTwistMemoryTypes.h" #include "HyperTwistMemory/HyperTwistMemoryTypes.h"
#include "HyperTwistRecognition/HyperTwistRecognitionTypes.h"
#include "HyperTwistReplay/HyperTwistReplayReviewLibrary.h"
#include "HyperTwistSkills/HyperTwistSkillTypes.h" #include "HyperTwistSkills/HyperTwistSkillTypes.h"
#include "HyperTwistTraining/HyperTwistTrainingMediaExportLibrary.h"
#include "HyperTwistTraining/HyperTwistTrainingSharedAssetLibrary.h"
#include "HyperTwistSkillCoreLibrary.generated.h" #include "HyperTwistSkillCoreLibrary.generated.h"
UCLASS() UCLASS()
@ -107,4 +111,105 @@ public:
const FHyperTwistSkillExtractionState& ExtractionState, const FHyperTwistSkillExtractionState& ExtractionState,
const FHyperTwistSkillBrowserDiagnosticsState& BrowserDiagnosticsState const FHyperTwistSkillBrowserDiagnosticsState& BrowserDiagnosticsState
); );
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillWorkflowReviewState DeriveSkillWorkflowReviewState(
const FHyperTwistSkillRegistryState& RegistryState,
const FHyperTwistSkillControlState& ControlState,
const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
const FHyperTwistSkillExtractionState& ExtractionState,
const FHyperTwistSkillWorkflowMemoryCaptureState& WorkflowMemoryCaptureState,
const FHyperTwistSkillDesignShellState& DesignShellState
);
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillImplementationDelegationState
DeriveSkillImplementationDelegationState(
const FHyperTwistSkillRegistryState& RegistryState,
const FHyperTwistSkillControlState& ControlState,
const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
const FHyperTwistSkillWorkflowReviewState& WorkflowReviewState,
const FHyperTwistSkillDesignShellState& DesignShellState
);
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillPlanOrchestrationState
DeriveSkillPlanOrchestrationState(
const FHyperTwistSkillRegistryState& RegistryState,
const FHyperTwistSkillControlState& ControlState,
const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
const FHyperTwistSkillImplementationDelegationState&
ImplementationDelegationState,
const FHyperTwistSkillWorkflowMemoryCaptureState&
WorkflowMemoryCaptureState,
const FHyperTwistSkillWorkflowReviewState& WorkflowReviewState
);
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillProviderProfileRoutingState
DeriveSkillProviderProfileRoutingState(
const FHyperTwistSkillRegistryState& RegistryState,
const FHyperTwistSkillControlState& ControlState,
const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
const FHyperTwistSkillAnalyzerWrapperState& AnalyzerWrapperState,
const FHyperTwistSpeechSessionConfig& SpeechSessionConfig,
const FHyperTwistSpeechServiceHealth& SpeechServiceHealth
);
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillProviderUsageOperationsAuditState
DeriveSkillProviderUsageOperationsAuditState(
const FHyperTwistSkillRegistryState& RegistryState,
const FHyperTwistSkillControlState& ControlState,
const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
const FHyperTwistSkillProviderProfileRoutingState&
ProviderProfileRoutingState,
const FHyperTwistSpeechSessionConfig& SpeechSessionConfig,
const FHyperTwistSpeechServiceHealth& SpeechServiceHealth
);
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillDomainPackFrameworkState
DeriveSkillDomainPackFrameworkState(
const FHyperTwistSkillRegistryState& RegistryState,
const FHyperTwistSkillControlState& ControlState,
const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
const FHyperTwistSkillPlanOrchestrationState& PlanOrchestrationState,
const FHyperTwistSkillProviderUsageOperationsAuditState&
ProviderUsageOperationsAuditState
);
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillRetainedDomainPackState
DeriveSkillRetainedDomainPackState(
const FHyperTwistSkillRegistryState& RegistryState,
const FHyperTwistSkillControlState& ControlState,
const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
const FHyperTwistSkillDomainPackFrameworkState& DomainPackFrameworkState,
const FHyperTwistTrainingRepositoryIntegrityReport&
TrainingRepositoryIntegrityReport,
const FHyperTwistTrainingDeckHistorySummary& DeckHistorySummary,
const FHyperTwistTrainingTimingTrendSummary& TimingTrendSummary,
const FHyperTwistTrainingPersonalBestSummary& PersonalBestSummary,
const FHyperTwistReplayReviewAnalytics& ReplayReviewAnalytics,
const TArray<FHyperTwistContentPack>& RetainedContentPacks,
const FHyperTwistTrainingTimerExportPacket& TrainingTimerExportPacket,
const FHyperTwistTrainingMediaExportReferenceBundle&
MediaExportReferenceBundle
);
UFUNCTION(BlueprintPure, Category = "HyperTwist|Skills")
static FHyperTwistSkillCreativeMediaPackState
DeriveSkillCreativeMediaPackState(
const FHyperTwistSkillRegistryState& RegistryState,
const FHyperTwistSkillControlState& ControlState,
const FHyperTwistSkillAuthoringHarnessState& AuthoringHarnessState,
const FHyperTwistSkillRetainedDomainPackState& RetainedDomainPackState,
const FHyperTwistReplayReviewAnalytics& ReplayReviewAnalytics,
const FHyperTwistTrainingTimerExportPacket& TrainingTimerExportPacket,
const FHyperTwistTrainingMediaExportReferenceBundle&
MediaExportReferenceBundle,
const FHyperTwistTrainingSharedAssetReferenceBundle&
SharedAssetReferenceBundle
);
}; };

View file

@ -0,0 +1,696 @@
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "HyperTwistTraining/HyperTwistTrainingTypes.h"
#include "HyperTwistTrainingLearnedSearchLibrary.generated.h"
USTRUCT(BlueprintType)
struct FHyperTwistTrainingLearnedSearchPackageReference
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PackageId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Label;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString ExportPath;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString OwnershipRole;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString LicensePosture;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Summary;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RetainedSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RequiredNoticeActions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExplicitExclusions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
bool IsStructurallyValid() const
{
return !PackageId.IsEmpty() && !Label.IsEmpty() && !ExportPath.IsEmpty()
&& !OwnershipRole.IsEmpty() && SourceAttribution.IsStructurallyValid();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingLearnedSearchExperimentProfileContract
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString ContractId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Title;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Summary;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RequiredPackageIds;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> StateSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> GenerationSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> SearchSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExplicitExclusions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
bool IsStructurallyValid() const
{
return !ContractId.IsEmpty() && !Title.IsEmpty() && SourceAttribution.IsStructurallyValid();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingLearnedSearchAdiGenerationBoundary
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString BoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Title;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Summary;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RequiredPackageIds;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> GenerationSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> TargetSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ProvenanceCaveats;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExplicitExclusions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
bool IsStructurallyValid() const
{
return !BoundaryId.IsEmpty() && !Title.IsEmpty() && SourceAttribution.IsStructurallyValid();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingLearnedSearchSearchBenchmarkBoundary
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString BoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Title;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Summary;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RequiredPackageIds;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> SearchSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ModelSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ProvenanceCaveats;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExplicitExclusions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
bool IsStructurallyValid() const
{
return !BoundaryId.IsEmpty() && !Title.IsEmpty() && SourceAttribution.IsStructurallyValid();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingLearnedSearchAttributionBoundary
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString BoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Title;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Summary;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> AllowedUseTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RequiredNoticeActions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ProvenanceCaveats;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExplicitExclusions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
bool IsStructurallyValid() const
{
return !BoundaryId.IsEmpty() && !Title.IsEmpty() && SourceAttribution.IsStructurallyValid();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingLearnedSearchSequencePolicyContract
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString ContractId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Title;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Summary;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RequiredPackageIds;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> SequenceSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> SamplingSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> WeightingSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExplicitExclusions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
bool IsStructurallyValid() const
{
return !ContractId.IsEmpty() && !Title.IsEmpty() && SourceAttribution.IsStructurallyValid();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingLearnedSearchSearchBudgetBoundary
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString BoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Title;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Summary;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RequiredPackageIds;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> BudgetSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> FrontierSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ProvenanceCaveats;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExplicitExclusions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
bool IsStructurallyValid() const
{
return !BoundaryId.IsEmpty() && !Title.IsEmpty() && SourceAttribution.IsStructurallyValid();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingLearnedSearchNodeIdentityContract
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString ContractId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Title;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Summary;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RequiredPackageIds;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> IdentitySurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> LineageSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExplicitExclusions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
bool IsStructurallyValid() const
{
return !ContractId.IsEmpty() && !Title.IsEmpty() && SourceAttribution.IsStructurallyValid();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingLearnedSearchStateExpansionBoundary
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString BoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Title;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Summary;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RequiredPackageIds;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExpansionSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> GoalSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ProvenanceCaveats;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExplicitExclusions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
bool IsStructurallyValid() const
{
return !BoundaryId.IsEmpty() && !Title.IsEmpty() && SourceAttribution.IsStructurallyValid();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingLearnedSearchFrontierScoringBoundary
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString BoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Title;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Summary;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RequiredPackageIds;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> FrontierSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> EvaluationSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ProvenanceCaveats;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExplicitExclusions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
bool IsStructurallyValid() const
{
return !BoundaryId.IsEmpty() && !Title.IsEmpty() && SourceAttribution.IsStructurallyValid();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingLearnedSearchSolutionUnwindBoundary
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString BoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Title;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Summary;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RequiredPackageIds;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RecoverySurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> TerminationSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ProvenanceCaveats;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExplicitExclusions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
bool IsStructurallyValid() const
{
return !BoundaryId.IsEmpty() && !Title.IsEmpty() && SourceAttribution.IsStructurallyValid();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingLearnedSearchValueNetworkShapeBoundary
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString BoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Title;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Summary;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RequiredPackageIds;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ArchitectureSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> InitializationSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ProvenanceCaveats;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExplicitExclusions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
bool IsStructurallyValid() const
{
return !BoundaryId.IsEmpty() && !Title.IsEmpty() && SourceAttribution.IsStructurallyValid();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingLearnedSearchGeneratorSyncBoundary
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString BoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Title;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Summary;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RequiredPackageIds;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> SyncSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ParameterSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ProvenanceCaveats;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExplicitExclusions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
bool IsStructurallyValid() const
{
return !BoundaryId.IsEmpty() && !Title.IsEmpty() && SourceAttribution.IsStructurallyValid();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingLearnedSearchReferenceBundle
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString ReferenceUtc;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimaryExperimentProfileContractId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimaryAdiGenerationBoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimarySearchBenchmarkBoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimaryAttributionBoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimarySequencePolicyContractId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimarySearchBudgetBoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimaryNodeIdentityContractId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimaryStateExpansionBoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimaryFrontierScoringBoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimarySolutionUnwindBoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimaryValueNetworkShapeBoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimaryGeneratorSyncBoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingLearnedSearchPackageReference> PackageReferences;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingLearnedSearchExperimentProfileContract> ExperimentProfileContracts;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingLearnedSearchAdiGenerationBoundary> AdiGenerationBoundaries;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingLearnedSearchSearchBenchmarkBoundary> SearchBenchmarkBoundaries;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingLearnedSearchAttributionBoundary> AttributionBoundaries;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingLearnedSearchSequencePolicyContract> SequencePolicyContracts;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingLearnedSearchSearchBudgetBoundary> SearchBudgetBoundaries;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingLearnedSearchNodeIdentityContract> NodeIdentityContracts;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingLearnedSearchStateExpansionBoundary> StateExpansionBoundaries;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingLearnedSearchFrontierScoringBoundary> FrontierScoringBoundaries;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingLearnedSearchSolutionUnwindBoundary> SolutionUnwindBoundaries;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingLearnedSearchValueNetworkShapeBoundary> ValueNetworkShapeBoundaries;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingLearnedSearchGeneratorSyncBoundary> GeneratorSyncBoundaries;
bool IsStructurallyValid() const
{
return !PrimaryExperimentProfileContractId.IsEmpty()
&& !PrimaryAdiGenerationBoundaryId.IsEmpty()
&& !PrimarySearchBenchmarkBoundaryId.IsEmpty()
&& !PrimaryAttributionBoundaryId.IsEmpty()
&& !PrimarySequencePolicyContractId.IsEmpty()
&& !PrimarySearchBudgetBoundaryId.IsEmpty()
&& !PrimaryNodeIdentityContractId.IsEmpty()
&& !PrimaryStateExpansionBoundaryId.IsEmpty()
&& !PrimaryFrontierScoringBoundaryId.IsEmpty()
&& !PrimarySolutionUnwindBoundaryId.IsEmpty()
&& !PrimaryValueNetworkShapeBoundaryId.IsEmpty()
&& !PrimaryGeneratorSyncBoundaryId.IsEmpty()
&& PackageReferences.Num() > 0;
}
};
UCLASS()
class UNREALHYPERTWIST_API UHyperTwistTrainingLearnedSearchLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|LearnedSearch")
static FHyperTwistTrainingLearnedSearchReferenceBundle BuildBundledLearnedSearchReferenceBundle();
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|LearnedSearch")
static bool TryGetExperimentProfileContractById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& ContractId,
FHyperTwistTrainingLearnedSearchExperimentProfileContract& OutContract
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|LearnedSearch")
static bool TryGetAdiGenerationBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchAdiGenerationBoundary& OutBoundary
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|LearnedSearch")
static bool TryGetSearchBenchmarkBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchSearchBenchmarkBoundary& OutBoundary
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|LearnedSearch")
static bool TryGetAttributionBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchAttributionBoundary& OutBoundary
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|LearnedSearch")
static bool TryGetSequencePolicyContractById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& ContractId,
FHyperTwistTrainingLearnedSearchSequencePolicyContract& OutContract
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|LearnedSearch")
static bool TryGetSearchBudgetBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchSearchBudgetBoundary& OutBoundary
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|LearnedSearch")
static bool TryGetNodeIdentityContractById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& ContractId,
FHyperTwistTrainingLearnedSearchNodeIdentityContract& OutContract
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|LearnedSearch")
static bool TryGetStateExpansionBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchStateExpansionBoundary& OutBoundary
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|LearnedSearch")
static bool TryGetFrontierScoringBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchFrontierScoringBoundary& OutBoundary
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|LearnedSearch")
static bool TryGetSolutionUnwindBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchSolutionUnwindBoundary& OutBoundary
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|LearnedSearch")
static bool TryGetValueNetworkShapeBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchValueNetworkShapeBoundary& OutBoundary
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|LearnedSearch")
static bool TryGetGeneratorSyncBoundaryById(
const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle,
const FString& BoundaryId,
FHyperTwistTrainingLearnedSearchGeneratorSyncBoundary& OutBoundary
);
UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|LearnedSearch")
static FString BuildPackageChecklistTsv(const FHyperTwistTrainingLearnedSearchReferenceBundle& Bundle);
};

View file

@ -123,6 +123,47 @@ struct FHyperTwistTrainingMagic120CellPersistenceBoundary
} }
}; };
USTRUCT(BlueprintType)
struct FHyperTwistTrainingMagic120CellViewProfileContract
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString ContractId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Title;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Summary;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RequiredPackageIds;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ProjectionSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> SymmetryPresetTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> VisibilityPresetTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> FocusSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExplicitExclusions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
bool IsStructurallyValid() const
{
return !ContractId.IsEmpty() && !Title.IsEmpty() && SourceAttribution.IsStructurallyValid();
}
};
USTRUCT(BlueprintType) USTRUCT(BlueprintType)
struct FHyperTwistTrainingMagic120CellAttributionBoundary struct FHyperTwistTrainingMagic120CellAttributionBoundary
{ {
@ -172,6 +213,9 @@ struct FHyperTwistTrainingMagic120CellReferenceBundle
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimaryPersistenceBoundaryId; FString PrimaryPersistenceBoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimaryViewProfileContractId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimaryAttributionBoundaryId; FString PrimaryAttributionBoundaryId;
@ -184,6 +228,9 @@ struct FHyperTwistTrainingMagic120CellReferenceBundle
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingMagic120CellPersistenceBoundary> PersistenceBoundaries; TArray<FHyperTwistTrainingMagic120CellPersistenceBoundary> PersistenceBoundaries;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingMagic120CellViewProfileContract> ViewProfileContracts;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingMagic120CellAttributionBoundary> AttributionBoundaries; TArray<FHyperTwistTrainingMagic120CellAttributionBoundary> AttributionBoundaries;
@ -191,6 +238,7 @@ struct FHyperTwistTrainingMagic120CellReferenceBundle
{ {
return !PrimaryRuntimeProfileContractId.IsEmpty() return !PrimaryRuntimeProfileContractId.IsEmpty()
&& !PrimaryPersistenceBoundaryId.IsEmpty() && !PrimaryPersistenceBoundaryId.IsEmpty()
&& !PrimaryViewProfileContractId.IsEmpty()
&& !PrimaryAttributionBoundaryId.IsEmpty() && !PrimaryAttributionBoundaryId.IsEmpty()
&& PackageReferences.Num() > 0; && PackageReferences.Num() > 0;
} }
@ -219,6 +267,13 @@ public:
FHyperTwistTrainingMagic120CellPersistenceBoundary& OutBoundary FHyperTwistTrainingMagic120CellPersistenceBoundary& OutBoundary
); );
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Magic120Cell")
static bool TryGetViewProfileContractById(
const FHyperTwistTrainingMagic120CellReferenceBundle& Bundle,
const FString& ContractId,
FHyperTwistTrainingMagic120CellViewProfileContract& OutContract
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Magic120Cell") UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Magic120Cell")
static bool TryGetAttributionBoundaryById( static bool TryGetAttributionBoundaryById(
const FHyperTwistTrainingMagic120CellReferenceBundle& Bundle, const FHyperTwistTrainingMagic120CellReferenceBundle& Bundle,

View file

@ -126,6 +126,47 @@ struct FHyperTwistTrainingMagicCube5DPersistenceBoundary
} }
}; };
USTRUCT(BlueprintType)
struct FHyperTwistTrainingMagicCube5DViewProfileContract
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString ContractId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Title;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Summary;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> RequiredPackageIds;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ProjectionSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> StereoSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> VisibilitySurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> FocusSurfaceTags;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> ExplicitExclusions;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
bool IsStructurallyValid() const
{
return !ContractId.IsEmpty() && !Title.IsEmpty() && SourceAttribution.IsStructurallyValid();
}
};
USTRUCT(BlueprintType) USTRUCT(BlueprintType)
struct FHyperTwistTrainingMagicCube5DAttributionBoundary struct FHyperTwistTrainingMagicCube5DAttributionBoundary
{ {
@ -175,6 +216,9 @@ struct FHyperTwistTrainingMagicCube5DReferenceBundle
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimaryPersistenceBoundaryId; FString PrimaryPersistenceBoundaryId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimaryViewProfileContractId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString PrimaryAttributionBoundaryId; FString PrimaryAttributionBoundaryId;
@ -187,6 +231,9 @@ struct FHyperTwistTrainingMagicCube5DReferenceBundle
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingMagicCube5DPersistenceBoundary> PersistenceBoundaries; TArray<FHyperTwistTrainingMagicCube5DPersistenceBoundary> PersistenceBoundaries;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingMagicCube5DViewProfileContract> ViewProfileContracts;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingMagicCube5DAttributionBoundary> AttributionBoundaries; TArray<FHyperTwistTrainingMagicCube5DAttributionBoundary> AttributionBoundaries;
@ -194,6 +241,7 @@ struct FHyperTwistTrainingMagicCube5DReferenceBundle
{ {
return !PrimaryRuntimeProfileContractId.IsEmpty() return !PrimaryRuntimeProfileContractId.IsEmpty()
&& !PrimaryPersistenceBoundaryId.IsEmpty() && !PrimaryPersistenceBoundaryId.IsEmpty()
&& !PrimaryViewProfileContractId.IsEmpty()
&& !PrimaryAttributionBoundaryId.IsEmpty() && !PrimaryAttributionBoundaryId.IsEmpty()
&& PackageReferences.Num() > 0; && PackageReferences.Num() > 0;
} }
@ -222,6 +270,13 @@ public:
FHyperTwistTrainingMagicCube5DPersistenceBoundary& OutBoundary FHyperTwistTrainingMagicCube5DPersistenceBoundary& OutBoundary
); );
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|MagicCube5D")
static bool TryGetViewProfileContractById(
const FHyperTwistTrainingMagicCube5DReferenceBundle& Bundle,
const FString& ContractId,
FHyperTwistTrainingMagicCube5DViewProfileContract& OutContract
);
UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|MagicCube5D") UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|MagicCube5D")
static bool TryGetAttributionBoundaryById( static bool TryGetAttributionBoundaryById(
const FHyperTwistTrainingMagicCube5DReferenceBundle& Bundle, const FHyperTwistTrainingMagicCube5DReferenceBundle& Bundle,

View file

@ -1949,6 +1949,9 @@ struct FHyperTwistTrainingCompanionSpeechSessionState
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistSpeechNativeCaptureRouteShellState NativeCaptureRouteShellState; FHyperTwistSpeechNativeCaptureRouteShellState NativeCaptureRouteShellState;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistSpeechExternalDictationShellState ExternalDictationShellState;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistSpeechUsageCostDashboardShellState UsageCostDashboardShellState; FHyperTwistSpeechUsageCostDashboardShellState UsageCostDashboardShellState;

View file

@ -0,0 +1,198 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistBootstrap/HyperTwistContractLibrary.h"
#include "HyperTwistRecognition/HyperTwistVoiceClient.h"
#include "UObject/Object.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistCoquiPhase6RARTestInternal
{
UHyperTwistMockVoiceClient* MakeMockVoiceClient()
{
return NewObject<UHyperTwistMockVoiceClient>(GetTransientPackage());
}
UHyperTwistHttpVoiceClient* MakeHttpVoiceClient()
{
return NewObject<UHyperTwistHttpVoiceClient>(GetTransientPackage());
}
const FHyperTwistVoiceModelReviewDescriptor* FindReviewById(
const TArray<FHyperTwistVoiceModelReviewDescriptor>& Reviews,
const FString& ReviewId
)
{
return Reviews.FindByPredicate(
[&ReviewId](const FHyperTwistVoiceModelReviewDescriptor& Review)
{
return Review.VoiceModelReviewId == ReviewId;
}
);
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistCoquiPhase6RARVoiceModelReviewProfileTest,
"HyperTwist.Permissive.Coqui.Phase6R.AR.VoiceModelReviewProfile",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistCoquiPhase6RARVoiceModelReviewProfileTest::RunTest(const FString& Parameters)
{
UHyperTwistMockVoiceClient* VoiceClient = HyperTwistCoquiPhase6RARTestInternal::MakeMockVoiceClient();
TestNotNull(TEXT("The mock voice client must be constructed for Phase 6R-AR."), VoiceClient);
if (VoiceClient == nullptr)
{
return false;
}
const FHyperTwistVoiceServiceHealth Health = VoiceClient->GetVoiceServiceHealth();
TestTrue(TEXT("The advanced voice-model review health must remain structurally valid."), Health.IsStructurallyValid());
TestEqual(
TEXT("The advanced review lane must preserve the voice-model review profile id."),
Health.VoiceModelReviewProfileId,
TEXT("downloadable-voice-model-review-v1")
);
TestTrue(
TEXT("The advanced review profile must remain structurally valid."),
Health.VoiceModelReviewProfileDefinition.IsStructurallyValid()
);
TestTrue(
TEXT("The advanced review lane must advertise downloadable voice-model review."),
Health.Capabilities.Contains(TEXT("downloadableVoiceModelReview"))
);
TestTrue(
TEXT("The advanced review lane must advertise model-license selection review."),
Health.Capabilities.Contains(TEXT("modelLicenseSelectionReview"))
);
TestTrue(
TEXT("The advanced review lane must advertise terms-acceptance review."),
Health.Capabilities.Contains(TEXT("termsAcceptanceReview"))
);
TestFalse(
TEXT("The advanced review profile must keep runtime model download deferred."),
Health.VoiceModelReviewProfileDefinition.bAllowsRuntimeModelDownloadInCurrentPacket
);
TestFalse(
TEXT("The advanced review profile must keep bundled model redistribution disabled."),
Health.VoiceModelReviewProfileDefinition.bAllowsBundledModelRedistribution
);
TestEqual(
TEXT("The advanced review lane must expose one bounded advanced review descriptor."),
Health.SupportedVoiceModelReviewIds.Num(),
1
);
TestEqual(
TEXT("The advanced review lane must expose one bounded advanced review record."),
Health.SupportedVoiceModelReviews.Num(),
1
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistCoquiPhase6RARAdvancedNarrationReviewAlignmentTest,
"HyperTwist.Permissive.Coqui.Phase6R.AR.AdvancedNarrationReviewAlignment",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistCoquiPhase6RARAdvancedNarrationReviewAlignmentTest::RunTest(const FString& Parameters)
{
UHyperTwistMockVoiceClient* VoiceClient = HyperTwistCoquiPhase6RARTestInternal::MakeMockVoiceClient();
TestNotNull(TEXT("The mock voice client must be constructed for Phase 6R-AR."), VoiceClient);
if (VoiceClient == nullptr)
{
return false;
}
const FHyperTwistVoiceServiceHealth Health = VoiceClient->GetVoiceServiceHealth();
const FHyperTwistNarrationSynthesisRequest Request =
UHyperTwistContractLibrary::MakeSampleAdvancedNarrationSynthesisRequest();
const FHyperTwistVoiceModelReviewDescriptor* Review =
HyperTwistCoquiPhase6RARTestInternal::FindReviewById(
Health.SupportedVoiceModelReviews,
TEXT("voice-model-review/coqui/multilingual-premium-v1")
);
TestNotNull(TEXT("The advanced coqui review descriptor must be present."), Review);
if (Review == nullptr)
{
return false;
}
TestEqual(
TEXT("The review descriptor must align to the advanced narration model binding."),
Review->ModelBindingId,
Request.OrchestrationProfile.ModelBindingId
);
TestEqual(
TEXT("The review descriptor must align to the advanced narration vocoder binding."),
Review->VocoderBindingId,
Request.OrchestrationProfile.VocoderBindingId
);
TestEqual(
TEXT("The review descriptor must align to the advanced narration voice profile."),
Review->VoiceProfileId,
Request.VoiceProfileId
);
TestEqual(
TEXT("The review descriptor must preserve the registry-backed review document path."),
Review->ReviewDocumentPath,
TEXT("TTS/.models.json")
);
TestTrue(
TEXT("The advanced descriptor must preserve the terms-acceptance review requirement."),
Review->bTosAcceptanceRequired
);
TestFalse(
TEXT("The advanced descriptor must not imply bundled redistribution."),
Review->bBundledWithCodeDistribution
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistCoquiPhase6RARProviderBackedReviewFallbackTest,
"HyperTwist.Permissive.Coqui.Phase6R.AR.ProviderBackedReviewFallback",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistCoquiPhase6RARProviderBackedReviewFallbackTest::RunTest(const FString& Parameters)
{
UHyperTwistHttpVoiceClient* VoiceClient = HyperTwistCoquiPhase6RARTestInternal::MakeHttpVoiceClient();
TestNotNull(TEXT("The provider-backed voice client must be constructed for Phase 6R-AR."), VoiceClient);
if (VoiceClient == nullptr)
{
return false;
}
VoiceClient->ServiceBaseUrl.Reset();
const FHyperTwistVoiceServiceHealth Health = VoiceClient->GetVoiceServiceHealth();
TestTrue(TEXT("The provider-backed review fallback must remain structurally valid."), Health.IsStructurallyValid());
TestFalse(TEXT("The provider-backed review fallback must report not ready."), Health.bReady);
TestEqual(
TEXT("The provider-backed review fallback must preserve the missing-endpoint error."),
Health.LastError,
TEXT("service-base-url-missing")
);
TestTrue(
TEXT("The provider-backed review fallback must preserve downloadable voice-model review capability."),
Health.Capabilities.Contains(TEXT("downloadableVoiceModelReview"))
);
TestEqual(
TEXT("The provider-backed review fallback must preserve one advanced review id."),
Health.SupportedVoiceModelReviewIds.Num(),
1
);
TestEqual(
TEXT("The provider-backed review fallback must preserve one advanced review descriptor."),
Health.SupportedVoiceModelReviews.Num(),
1
);
return true;
}
#endif

View file

@ -0,0 +1,251 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "Engine/GameInstance.h"
#include "HyperTwistTraining/HyperTwistTrainingSubsystem.h"
#include "UObject/UnrealType.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistFasterWhisperPhase6RAPTestInternal
{
FHyperTwistTrainingDeck MakeSpeechDeck()
{
FHyperTwistTrainingDeck Deck;
Deck.DeckId = TEXT("phase6r-ap/fasterwhisper-service-lane-tuning");
Deck.Title = TEXT("Phase 6R-AP Faster Whisper Service Lane Tuning");
Deck.DeliveryModes = {
EHyperTwistTrainingDeliveryMode::CoachReviewed
};
FHyperTwistTrainingCase TrainingCase;
TrainingCase.CaseId = TEXT("phase6r-ap-case");
TrainingCase.PuzzleId = TEXT("cube/3x3x3");
TrainingCase.PromptKind = EHyperTwistTrainingPromptKind::Sequence;
TrainingCase.PromptLabel = TEXT("Phase 6R-AP Coach Speech");
TrainingCase.AllowedDeliveryModes = {
EHyperTwistTrainingDeliveryMode::CoachReviewed
};
Deck.Cases = {TrainingCase};
return Deck;
}
void ForceMockSpeechClient(UHyperTwistTrainingSubsystem* TrainingSubsystem)
{
if (TrainingSubsystem == nullptr)
{
return;
}
if (FStrProperty* SpeechClientKindProperty = FindFProperty<FStrProperty>(
UHyperTwistTrainingSubsystem::StaticClass(),
TEXT("CompanionSpeechClientKind")
))
{
SpeechClientKindProperty->SetPropertyValue_InContainer(TrainingSubsystem, TEXT("mock"));
}
}
UHyperTwistTrainingSubsystem* MakeSpeechSubsystem(const FString& SessionId)
{
UGameInstance* GameInstance = NewObject<UGameInstance>(GetTransientPackage());
if (GameInstance == nullptr)
{
return nullptr;
}
UHyperTwistTrainingSubsystem* TrainingSubsystem =
NewObject<UHyperTwistTrainingSubsystem>(GameInstance);
if (TrainingSubsystem == nullptr)
{
return nullptr;
}
ForceMockSpeechClient(TrainingSubsystem);
const FHyperTwistTrainingRunState RunState = TrainingSubsystem->StartTrainingRunFromDeck(
MakeSpeechDeck(),
TEXT("phase6r-ap-user"),
SessionId,
EHyperTwistTrainingDeliveryMode::CoachReviewed
);
return RunState.IsStructurallyValid() ? TrainingSubsystem : nullptr;
}
bool HasCapability(const TArray<FString>& Capabilities, const FString& ExpectedCapability)
{
return Capabilities.Contains(ExpectedCapability);
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistFasterWhisperPhase6RAPSessionConfigTest,
"HyperTwist.Permissive.FasterWhisper.Phase6R.AP.SessionConfig",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistFasterWhisperPhase6RAPSessionConfigTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistFasterWhisperPhase6RAPTestInternal::MakeSpeechSubsystem(
TEXT("phase6r-ap-config-session")
);
TestNotNull(TEXT("The speech subsystem must be constructed for Phase 6R-AP."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
FString OpenError;
TestTrue(
TEXT("The speech session must open for the Phase 6R-AP tuning profile."),
TrainingSubsystem->OpenActiveCompanionSpeechSession(OpenError)
);
TestTrue(TEXT("Opening the speech session must not report an error."), OpenError.IsEmpty());
const FHyperTwistTrainingCompanionSpeechSessionState SessionState =
TrainingSubsystem->GetActiveCompanionSpeechSessionState();
const FHyperTwistSpeechTranscriptionOrchestrationProfile& Profile =
SessionState.SessionConfig.OrchestrationProfile;
TestEqual(
TEXT("The tuning profile must preserve the Python orchestration profile id."),
Profile.OrchestrationProfileId,
TEXT("python-batch-transcribe-v1")
);
TestEqual(
TEXT("The bounded tuning profile must preserve the batch collection window."),
Profile.BatchCollectionWindowMs,
150
);
TestEqual(
TEXT("The bounded tuning profile must preserve the prompt-routing mode."),
Profile.PromptRoutingModeId,
TEXT("prefix-hotword-session-hints-v1")
);
TestEqual(
TEXT("The bounded tuning profile must preserve the retrieval context lane."),
Profile.RetrievalContextLaneId,
TEXT("speech-command-hint-session-memory")
);
TestEqual(
TEXT("The bounded tuning profile must preserve the retrieved-hint cap."),
Profile.MaxRetrievedHintCount,
4
);
TestTrue(
TEXT("The bounded tuning profile must keep retrieved-hint augmentation enabled."),
Profile.bEnableRetrievedHintAugmentation
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistFasterWhisperPhase6RAPTranscriptTuningTest,
"HyperTwist.Permissive.FasterWhisper.Phase6R.AP.TranscriptTuningMetadata",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistFasterWhisperPhase6RAPTranscriptTuningTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistFasterWhisperPhase6RAPTestInternal::MakeSpeechSubsystem(
TEXT("phase6r-ap-transcript-session")
);
TestNotNull(TEXT("The speech subsystem must be constructed for Phase 6R-AP."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
FHyperTwistSpeechUtteranceEnvelope Utterance;
Utterance.AudioRef = TEXT("mock://coach/next-case");
Utterance.SpeechStartMs = 100;
Utterance.SpeechEndMs = 900;
Utterance.SilenceGapMs = 180;
Utterance.SampleCount = 12800;
const FHyperTwistSpeechTranscriptResult Result =
TrainingSubsystem->SubmitActiveCompanionSpeechUtterance(Utterance);
TestTrue(TEXT("The transcript result must remain structurally valid."), Result.IsStructurallyValid());
TestEqual(
TEXT("The batch collection window must be carried onto the transcript result."),
Result.AppliedBatchCollectionWindowMs,
150
);
TestEqual(
TEXT("The prompt-routing mode must be carried onto the transcript result."),
Result.AppliedPromptRoutingModeId,
TEXT("prefix-hotword-session-hints-v1")
);
TestEqual(
TEXT("The retrieval context lane must be carried onto the transcript result."),
Result.AppliedRetrievalContextLaneId,
TEXT("speech-command-hint-session-memory")
);
TestTrue(
TEXT("The bounded tuning profile must record retrieved-hint augmentation."),
Result.bUsedRetrievedHintAugmentation
);
TestEqual(
TEXT("The bounded tuning profile must cap retrieved command hints to four."),
Result.RetrievedHintCount,
4
);
TestEqual(
TEXT("The bounded tuning profile must retain the first command hint."),
Result.AppliedRetrievedHints.Num() > 0 ? Result.AppliedRetrievedHints[0] : FString(),
TEXT("ready coach")
);
TestTrue(
TEXT("The bounded tuning profile must still surface prompt-hint usage."),
Result.bUsedPromptHints
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistFasterWhisperPhase6RAPServiceHealthTest,
"HyperTwist.Permissive.FasterWhisper.Phase6R.AP.ServiceHealth",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistFasterWhisperPhase6RAPServiceHealthTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistFasterWhisperPhase6RAPTestInternal::MakeSpeechSubsystem(
TEXT("phase6r-ap-health-session")
);
TestNotNull(TEXT("The speech subsystem must be constructed for Phase 6R-AP."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
const FHyperTwistTrainingCompanionSpeechSessionState SessionState =
TrainingSubsystem->GetActiveCompanionSpeechSessionState();
TestTrue(
TEXT("Speech health must expose the batch-window tuning capability."),
HyperTwistFasterWhisperPhase6RAPTestInternal::HasCapability(
SessionState.ServiceHealth.Capabilities,
TEXT("batchWindowTuning")
)
);
TestTrue(
TEXT("Speech health must expose the prompt-routing profile capability."),
HyperTwistFasterWhisperPhase6RAPTestInternal::HasCapability(
SessionState.ServiceHealth.Capabilities,
TEXT("promptRoutingProfiles")
)
);
TestTrue(
TEXT("Speech health must expose the retrieval-hint augmentation capability."),
HyperTwistFasterWhisperPhase6RAPTestInternal::HasCapability(
SessionState.ServiceHealth.Capabilities,
TEXT("retrievalHintAugmentation")
)
);
return true;
}
#endif

View file

@ -0,0 +1,245 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "Engine/GameInstance.h"
#include "HyperTwistTraining/HyperTwistTrainingSubsystem.h"
#include "UObject/UnrealType.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistHandyPhase6RAJTestInternal
{
FHyperTwistTrainingDeck MakeSpeechDeck()
{
FHyperTwistTrainingDeck Deck;
Deck.DeckId = TEXT("phase6r-aj/handy-dictation-adjunct");
Deck.Title = TEXT("Phase 6R-AJ Handy Dictation Adjunct");
Deck.DeliveryModes = {
EHyperTwistTrainingDeliveryMode::CoachReviewed
};
FHyperTwistTrainingCase TrainingCase;
TrainingCase.CaseId = TEXT("phase6r-aj-case");
TrainingCase.PuzzleId = TEXT("cube/3x3x3");
TrainingCase.PromptKind = EHyperTwistTrainingPromptKind::Sequence;
TrainingCase.PromptLabel = TEXT("Phase 6R-AJ Coach Speech");
TrainingCase.AllowedDeliveryModes = {
EHyperTwistTrainingDeliveryMode::CoachReviewed
};
Deck.Cases = {TrainingCase};
return Deck;
}
void ForceMockSpeechClient(UHyperTwistTrainingSubsystem* TrainingSubsystem)
{
if (TrainingSubsystem == nullptr)
{
return;
}
if (FStrProperty* SpeechClientKindProperty = FindFProperty<FStrProperty>(
UHyperTwistTrainingSubsystem::StaticClass(),
TEXT("CompanionSpeechClientKind")
))
{
SpeechClientKindProperty->SetPropertyValue_InContainer(TrainingSubsystem, TEXT("mock"));
}
}
UHyperTwistTrainingSubsystem* MakeSpeechSubsystem(const FString& SessionId)
{
UGameInstance* GameInstance = NewObject<UGameInstance>(GetTransientPackage());
if (GameInstance == nullptr)
{
return nullptr;
}
UHyperTwistTrainingSubsystem* TrainingSubsystem = NewObject<UHyperTwistTrainingSubsystem>(GameInstance);
if (TrainingSubsystem == nullptr)
{
return nullptr;
}
ForceMockSpeechClient(TrainingSubsystem);
const FHyperTwistTrainingRunState RunState = TrainingSubsystem->StartTrainingRunFromDeck(
MakeSpeechDeck(),
TEXT("phase6r-aj-user"),
SessionId,
EHyperTwistTrainingDeliveryMode::CoachReviewed
);
return RunState.IsStructurallyValid() ? TrainingSubsystem : nullptr;
}
bool HasActionId(const TArray<FString>& ActionIds, const FString& ExpectedActionId)
{
return ActionIds.Contains(ExpectedActionId);
}
bool HasCapability(const TArray<FString>& Capabilities, const FString& ExpectedCapability)
{
return Capabilities.Contains(ExpectedCapability);
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistHandyPhase6RAJSessionConfigTest,
"HyperTwist.Permissive.Handy.Phase6R.AJ.SessionConfig",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistHandyPhase6RAJSessionConfigTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistHandyPhase6RAJTestInternal::MakeSpeechSubsystem(TEXT("phase6r-aj-config-session"));
TestNotNull(TEXT("The speech subsystem must be constructed for Phase 6R-AJ."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
FString OpenError;
TestTrue(
TEXT("The companion speech session must open for the Handy adjunct."),
TrainingSubsystem->OpenActiveCompanionSpeechSession(OpenError)
);
TestTrue(TEXT("Opening the speech session must not report an error."), OpenError.IsEmpty());
const FHyperTwistTrainingCompanionSpeechSessionState SessionState =
TrainingSubsystem->GetActiveCompanionSpeechSessionState();
TestTrue(TEXT("The speech session config must remain structurally valid."), SessionState.SessionConfig.IsStructurallyValid());
TestEqual(
TEXT("The external dictation shell profile id must be present."),
SessionState.SessionConfig.ExternalDictationShellProfileId,
TEXT("speech-external-dictation-shell-v1")
);
TestTrue(
TEXT("The external dictation shell profile must remain structurally valid."),
SessionState.SessionConfig.ExternalDictationShellProfileDefinition.IsStructurallyValid()
);
TestEqual(
TEXT("The shell kind must stay bounded to the external dictation shell."),
SessionState.SessionConfig.ExternalDictationShellProfileDefinition.ShellKind,
TEXT("operator-external-dictation-shell")
);
TestEqual(
TEXT("The retained shell must preserve the cycle-route action id."),
SessionState.SessionConfig.ExternalDictationShellProfileDefinition.CycleOutputRouteActionId,
TEXT("cycle-external-dictation-output-route")
);
TestTrue(
TEXT("Speech health must expose the external dictation shell capability."),
HyperTwistHandyPhase6RAJTestInternal::HasCapability(
SessionState.ServiceHealth.Capabilities,
TEXT("externalDictationShell")
)
);
TestTrue(
TEXT("Speech health must expose the transcript-history shell capability."),
HyperTwistHandyPhase6RAJTestInternal::HasCapability(
SessionState.ServiceHealth.Capabilities,
TEXT("speechTranscriptHistoryShell")
)
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistHandyPhase6RAJShellStateTest,
"HyperTwist.Permissive.Handy.Phase6R.AJ.ExternalDictationShellState",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistHandyPhase6RAJShellStateTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistHandyPhase6RAJTestInternal::MakeSpeechSubsystem(TEXT("phase6r-aj-shell-session"));
TestNotNull(TEXT("The speech subsystem must be constructed for Phase 6R-AJ."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
FString OpenError;
TestTrue(TEXT("The companion speech session must open for shell inspection."), TrainingSubsystem->OpenActiveCompanionSpeechSession(OpenError));
TestTrue(TEXT("Opening the speech session must not report an error."), OpenError.IsEmpty());
const FHyperTwistSpeechExternalDictationShellState ShellState =
TrainingSubsystem->GetActiveCompanionSpeechSessionState().ExternalDictationShellState;
TestTrue(TEXT("The external dictation shell state must remain structurally valid."), ShellState.IsStructurallyValid());
TestEqual(
TEXT("The selected route must default to clipboard paste."),
ShellState.SelectedOutputRouteId,
TEXT("clipboard-paste")
);
TestEqual(TEXT("The bounded shell must expose three retained output routes."), ShellState.OutputRouteOptions.Num(), 3);
TestTrue(TEXT("The transcript-history surface must stay visible."), ShellState.bTranscriptHistoryVisible);
TestTrue(TEXT("The output-routing surface must stay visible."), ShellState.bOutputRoutingVisible);
TestFalse(TEXT("No retained transcript should exist before the first utterance."), ShellState.bLatestEntryReadyForDispatch);
TestTrue(
TEXT("The shell must expose the copy-transcript action."),
HyperTwistHandyPhase6RAJTestInternal::HasActionId(
ShellState.AvailableActionIds,
TEXT("copy-latest-dictation-transcript")
)
);
TestTrue(
TEXT("The shell must expose the script-dispatch action."),
HyperTwistHandyPhase6RAJTestInternal::HasActionId(
ShellState.AvailableActionIds,
TEXT("dispatch-dictation-script-output")
)
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistHandyPhase6RAJTranscriptHistoryTest,
"HyperTwist.Permissive.Handy.Phase6R.AJ.TranscriptHistoryOutputRouting",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistHandyPhase6RAJTranscriptHistoryTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistHandyPhase6RAJTestInternal::MakeSpeechSubsystem(
TEXT("phase6r-aj-transcript-session")
);
TestNotNull(TEXT("The speech subsystem must be constructed for Phase 6R-AJ."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
FHyperTwistSpeechUtteranceEnvelope Utterance;
Utterance.AudioRef = TEXT("mock://coach/repeat-case");
Utterance.SpeechStartMs = 140;
Utterance.SpeechEndMs = 920;
Utterance.SilenceGapMs = 180;
Utterance.SampleCount = 12480;
const FHyperTwistSpeechTranscriptResult Result =
TrainingSubsystem->SubmitActiveCompanionSpeechUtterance(Utterance);
TestTrue(TEXT("The transcript result must stay structurally valid."), Result.IsStructurallyValid());
TestEqual(
TEXT("The bounded mock route must still resolve the repeat-case transcript."),
Result.TranscriptText,
TEXT("repeat case")
);
const FHyperTwistSpeechExternalDictationShellState ShellState =
TrainingSubsystem->GetActiveCompanionSpeechSessionState().ExternalDictationShellState;
TestTrue(TEXT("The external dictation shell state must remain structurally valid after transcript capture."), ShellState.IsStructurallyValid());
TestEqual(TEXT("The shell must retain one transcript-history entry."), ShellState.HistoryEntryCount, 1);
TestEqual(TEXT("The latest transcript text must stay available for output routing."), ShellState.LatestTranscriptText, TEXT("repeat case"));
TestEqual(TEXT("The post-processed text must normalize to the same bounded command text."), ShellState.LatestPostProcessedText, TEXT("repeat case"));
TestTrue(TEXT("The latest retained transcript must be ready for output routing."), ShellState.bLatestEntryReadyForDispatch);
TestEqual(
TEXT("The retained transcript must stay aligned to the selected route."),
ShellState.HistoryEntries.Num() > 0 ? ShellState.HistoryEntries[0].OutputRouteId : FString(),
TEXT("clipboard-paste")
);
return true;
}
#endif

View file

@ -0,0 +1,313 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "Engine/GameInstance.h"
#include "HyperTwistTraining/HyperTwistTrainingSubsystem.h"
#include "UObject/UnrealType.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistHandyPhase6RAOTestInternal
{
FHyperTwistTrainingDeck MakeSpeechDeck()
{
FHyperTwistTrainingDeck Deck;
Deck.DeckId = TEXT("phase6r-ao/handy-hotkey-mute-device-shell");
Deck.Title = TEXT("Phase 6R-AO Handy Hotkey Mute Device Shell");
Deck.DeliveryModes = {
EHyperTwistTrainingDeliveryMode::CoachReviewed
};
FHyperTwistTrainingCase TrainingCase;
TrainingCase.CaseId = TEXT("phase6r-ao-case");
TrainingCase.PuzzleId = TEXT("cube/3x3x3");
TrainingCase.PromptKind = EHyperTwistTrainingPromptKind::Sequence;
TrainingCase.PromptLabel = TEXT("Phase 6R-AO Coach Speech");
TrainingCase.AllowedDeliveryModes = {
EHyperTwistTrainingDeliveryMode::CoachReviewed
};
Deck.Cases = {TrainingCase};
return Deck;
}
void ForceMockSpeechClient(UHyperTwistTrainingSubsystem* TrainingSubsystem)
{
if (TrainingSubsystem == nullptr)
{
return;
}
if (FStrProperty* SpeechClientKindProperty = FindFProperty<FStrProperty>(
UHyperTwistTrainingSubsystem::StaticClass(),
TEXT("CompanionSpeechClientKind")
))
{
SpeechClientKindProperty->SetPropertyValue_InContainer(TrainingSubsystem, TEXT("mock"));
}
}
UHyperTwistTrainingSubsystem* MakeSpeechSubsystem(const FString& SessionId)
{
UGameInstance* GameInstance = NewObject<UGameInstance>(GetTransientPackage());
if (GameInstance == nullptr)
{
return nullptr;
}
UHyperTwistTrainingSubsystem* TrainingSubsystem =
NewObject<UHyperTwistTrainingSubsystem>(GameInstance);
if (TrainingSubsystem == nullptr)
{
return nullptr;
}
ForceMockSpeechClient(TrainingSubsystem);
const FHyperTwistTrainingRunState RunState = TrainingSubsystem->StartTrainingRunFromDeck(
MakeSpeechDeck(),
TEXT("phase6r-ao-user"),
SessionId,
EHyperTwistTrainingDeliveryMode::CoachReviewed
);
return RunState.IsStructurallyValid() ? TrainingSubsystem : nullptr;
}
bool HasCapability(const TArray<FString>& Capabilities, const FString& ExpectedCapability)
{
return Capabilities.Contains(ExpectedCapability);
}
bool HasActionId(const TArray<FString>& ActionIds, const FString& ExpectedActionId)
{
return ActionIds.Contains(ExpectedActionId);
}
bool HasProfileActionBinding(
const TArray<FHyperTwistSpeechShellActionBinding>& ActionBindings,
const FString& ExpectedActionId
)
{
return ActionBindings.ContainsByPredicate(
[&ExpectedActionId](const FHyperTwistSpeechShellActionBinding& Binding)
{
return Binding.ActionId == ExpectedActionId;
}
);
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistHandyPhase6RAOSessionConfigTest,
"HyperTwist.Permissive.Handy.Phase6R.AO.SessionConfig",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistHandyPhase6RAOSessionConfigTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistHandyPhase6RAOTestInternal::MakeSpeechSubsystem(TEXT("phase6r-ao-config-session"));
TestNotNull(TEXT("The speech subsystem must be constructed for Phase 6R-AO."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
FString OpenError;
TestTrue(
TEXT("The companion speech session must open for the Handy shell posture."),
TrainingSubsystem->OpenActiveCompanionSpeechSession(OpenError)
);
TestTrue(TEXT("Opening the speech session must not report an error."), OpenError.IsEmpty());
const FHyperTwistTrainingCompanionSpeechSessionState SessionState =
TrainingSubsystem->GetActiveCompanionSpeechSessionState();
const FHyperTwistSpeechExternalDictationShellProfile& Profile =
SessionState.SessionConfig.ExternalDictationShellProfileDefinition;
TestTrue(TEXT("The external dictation shell profile must remain structurally valid."), Profile.IsStructurallyValid());
TestEqual(
TEXT("The global hotkey surface must stay bounded to platform-scoped shortcut lifecycle."),
Profile.GlobalHotkeySurfaceMode,
TEXT("platform-scoped-dictation-shortcut-lifecycle")
);
TestEqual(
TEXT("The input-device surface must stay bounded to selected device cycling."),
Profile.InputDeviceSurfaceMode,
TEXT("selected-input-device-cycle")
);
TestEqual(
TEXT("The output-device surface must stay bounded to selected device cycling."),
Profile.OutputDeviceSurfaceMode,
TEXT("selected-output-device-cycle")
);
TestEqual(
TEXT("The mute surface must stay bounded to mute-while-recording posture."),
Profile.MuteSurfaceMode,
TEXT("mute-while-recording-toggle")
);
TestEqual(
TEXT("The microphone mode surface must stay bounded to lazy-close and always-on posture."),
Profile.MicrophoneModeSurfaceMode,
TEXT("lazy-close-and-always-on-mode")
);
TestEqual(
TEXT("The retained primary hotkey label must stay aligned to the donor shortcut posture."),
Profile.PrimaryHotkeyBindingLabel,
TEXT("ctrl+space")
);
TestEqual(
TEXT("The retained post-process hotkey label must stay aligned to the donor shortcut posture."),
Profile.PostProcessHotkeyBindingLabel,
TEXT("ctrl+shift+space")
);
TestTrue(
TEXT("The shell profile must expose the global-hotkey inspection action binding."),
HyperTwistHandyPhase6RAOTestInternal::HasProfileActionBinding(
Profile.ActionBindings,
TEXT("inspect-dictation-global-hotkey")
)
);
TestTrue(
TEXT("The shell profile must expose the input-device cycle action binding."),
HyperTwistHandyPhase6RAOTestInternal::HasProfileActionBinding(
Profile.ActionBindings,
TEXT("cycle-dictation-input-device")
)
);
TestTrue(
TEXT("The shell profile must expose the mute toggle action binding."),
HyperTwistHandyPhase6RAOTestInternal::HasProfileActionBinding(
Profile.ActionBindings,
TEXT("toggle-dictation-mute-while-recording")
)
);
TestTrue(
TEXT("Speech health must expose the global-hotkey shell capability."),
HyperTwistHandyPhase6RAOTestInternal::HasCapability(
SessionState.ServiceHealth.Capabilities,
TEXT("speechGlobalHotkeyShell")
)
);
TestTrue(
TEXT("Speech health must expose the device-selection shell capability."),
HyperTwistHandyPhase6RAOTestInternal::HasCapability(
SessionState.ServiceHealth.Capabilities,
TEXT("speechDeviceSelectionShell")
)
);
TestTrue(
TEXT("Speech health must expose the mute-while-recording shell capability."),
HyperTwistHandyPhase6RAOTestInternal::HasCapability(
SessionState.ServiceHealth.Capabilities,
TEXT("speechMuteWhileRecordingShell")
)
);
TestTrue(
TEXT("Speech health must expose the microphone-mode shell capability."),
HyperTwistHandyPhase6RAOTestInternal::HasCapability(
SessionState.ServiceHealth.Capabilities,
TEXT("speechMicrophoneModeShell")
)
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistHandyPhase6RAOShellStateTest,
"HyperTwist.Permissive.Handy.Phase6R.AO.HotkeyMuteDeviceShellState",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistHandyPhase6RAOShellStateTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistHandyPhase6RAOTestInternal::MakeSpeechSubsystem(TEXT("phase6r-ao-shell-session"));
TestNotNull(TEXT("The speech subsystem must be constructed for Phase 6R-AO."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
FString OpenError;
TestTrue(
TEXT("The companion speech session must open for shell inspection."),
TrainingSubsystem->OpenActiveCompanionSpeechSession(OpenError)
);
TestTrue(TEXT("Opening the speech session must not report an error."), OpenError.IsEmpty());
const FHyperTwistSpeechExternalDictationShellState ShellState =
TrainingSubsystem->GetActiveCompanionSpeechSessionState().ExternalDictationShellState;
TestTrue(TEXT("The external dictation shell state must remain structurally valid."), ShellState.IsStructurallyValid());
TestEqual(
TEXT("The primary global hotkey label must remain aligned to the retained shortcut posture."),
ShellState.PrimaryHotkeyBindingLabel,
TEXT("ctrl+space")
);
TestEqual(
TEXT("The post-process hotkey label must remain aligned to the retained shortcut posture."),
ShellState.PostProcessHotkeyBindingLabel,
TEXT("ctrl+shift+space")
);
TestEqual(
TEXT("The selected input device id must default to the system route."),
ShellState.SelectedInputDeviceId,
TEXT("system-default-input")
);
TestEqual(
TEXT("The selected output device id must default to the system route."),
ShellState.SelectedOutputDeviceId,
TEXT("system-default-output")
);
TestEqual(
TEXT("The microphone mode must default to on-demand."),
ShellState.MicrophoneModeId,
TEXT("on-demand")
);
TestTrue(TEXT("The shell must surface the global-hotkey card."), ShellState.bGlobalHotkeyVisible);
TestTrue(TEXT("The shell must surface the input-device selection card."), ShellState.bInputDeviceSelectionVisible);
TestTrue(TEXT("The shell must surface the output-device selection card."), ShellState.bOutputDeviceSelectionVisible);
TestTrue(TEXT("The shell must surface the mute-while-recording card."), ShellState.bMuteWhileRecordingVisible);
TestTrue(TEXT("The shell must surface the microphone-mode card."), ShellState.bMicrophoneModeVisible);
TestTrue(TEXT("The shell must keep push-to-talk mode enabled by default."), ShellState.bPushToTalkMode);
TestFalse(TEXT("Mute-while-recording must stay disabled by default."), ShellState.bMuteWhileRecordingEnabled);
TestEqual(TEXT("The shell must retain three bounded input-device options."), ShellState.InputDeviceOptions.Num(), 3);
TestEqual(TEXT("The shell must retain two bounded output-device options."), ShellState.OutputDeviceOptions.Num(), 2);
TestTrue(
TEXT("The shell must expose the global-hotkey inspection action."),
HyperTwistHandyPhase6RAOTestInternal::HasActionId(
ShellState.AvailableActionIds,
TEXT("inspect-dictation-global-hotkey")
)
);
TestTrue(
TEXT("The shell must expose the input-device cycle action."),
HyperTwistHandyPhase6RAOTestInternal::HasActionId(
ShellState.AvailableActionIds,
TEXT("cycle-dictation-input-device")
)
);
TestTrue(
TEXT("The shell must expose the output-device cycle action."),
HyperTwistHandyPhase6RAOTestInternal::HasActionId(
ShellState.AvailableActionIds,
TEXT("cycle-dictation-output-device")
)
);
TestTrue(
TEXT("The shell must expose the mute-while-recording toggle action."),
HyperTwistHandyPhase6RAOTestInternal::HasActionId(
ShellState.AvailableActionIds,
TEXT("toggle-dictation-mute-while-recording")
)
);
TestTrue(
TEXT("The shell must expose the microphone-mode toggle action."),
HyperTwistHandyPhase6RAOTestInternal::HasActionId(
ShellState.AvailableActionIds,
TEXT("toggle-dictation-microphone-mode")
)
);
return true;
}
#endif

View file

@ -0,0 +1,352 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "Engine/GameInstance.h"
#include "HyperTwistTraining/HyperTwistTrainingSubsystem.h"
#include "UObject/UnrealType.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistHandyPhase6RAUTestInternal
{
FHyperTwistTrainingDeck MakeSpeechDeck()
{
FHyperTwistTrainingDeck Deck;
Deck.DeckId = TEXT("phase6r-au/handy-local-model-catalog-shell");
Deck.Title = TEXT("Phase 6R-AU Handy Local Model Catalog Shell");
Deck.DeliveryModes = {
EHyperTwistTrainingDeliveryMode::CoachReviewed
};
FHyperTwistTrainingCase TrainingCase;
TrainingCase.CaseId = TEXT("phase6r-au-case");
TrainingCase.PuzzleId = TEXT("cube/3x3x3");
TrainingCase.PromptKind = EHyperTwistTrainingPromptKind::Sequence;
TrainingCase.PromptLabel = TEXT("Phase 6R-AU Coach Speech");
TrainingCase.AllowedDeliveryModes = {
EHyperTwistTrainingDeliveryMode::CoachReviewed
};
Deck.Cases = {TrainingCase};
return Deck;
}
void ForceMockSpeechClient(UHyperTwistTrainingSubsystem* TrainingSubsystem)
{
if (TrainingSubsystem == nullptr)
{
return;
}
if (FStrProperty* SpeechClientKindProperty = FindFProperty<FStrProperty>(
UHyperTwistTrainingSubsystem::StaticClass(),
TEXT("CompanionSpeechClientKind")
))
{
SpeechClientKindProperty->SetPropertyValue_InContainer(TrainingSubsystem, TEXT("mock"));
}
}
UHyperTwistTrainingSubsystem* MakeSpeechSubsystem(const FString& SessionId)
{
UGameInstance* GameInstance = NewObject<UGameInstance>(GetTransientPackage());
if (GameInstance == nullptr)
{
return nullptr;
}
UHyperTwistTrainingSubsystem* TrainingSubsystem =
NewObject<UHyperTwistTrainingSubsystem>(GameInstance);
if (TrainingSubsystem == nullptr)
{
return nullptr;
}
ForceMockSpeechClient(TrainingSubsystem);
const FHyperTwistTrainingRunState RunState = TrainingSubsystem->StartTrainingRunFromDeck(
MakeSpeechDeck(),
TEXT("phase6r-au-user"),
SessionId,
EHyperTwistTrainingDeliveryMode::CoachReviewed
);
return RunState.IsStructurallyValid() ? TrainingSubsystem : nullptr;
}
bool HasCapability(const TArray<FString>& Capabilities, const FString& ExpectedCapability)
{
return Capabilities.Contains(ExpectedCapability);
}
bool HasActionId(const TArray<FString>& ActionIds, const FString& ExpectedActionId)
{
return ActionIds.Contains(ExpectedActionId);
}
bool HasProfileActionBinding(
const TArray<FHyperTwistSpeechShellActionBinding>& ActionBindings,
const FString& ExpectedActionId
)
{
return ActionBindings.ContainsByPredicate(
[&ExpectedActionId](const FHyperTwistSpeechShellActionBinding& Binding)
{
return Binding.ActionId == ExpectedActionId;
}
);
}
const FHyperTwistSpeechExternalDictationModelCatalogEntry* FindCatalogEntry(
const TArray<FHyperTwistSpeechExternalDictationModelCatalogEntry>& Entries,
const FString& PayloadId
)
{
return Entries.FindByPredicate(
[&PayloadId](const FHyperTwistSpeechExternalDictationModelCatalogEntry& Entry)
{
return Entry.PayloadId == PayloadId;
}
);
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistHandyPhase6RAUSessionConfigTest,
"HyperTwist.Permissive.Handy.Phase6R.AU.SessionConfig",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistHandyPhase6RAUSessionConfigTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistHandyPhase6RAUTestInternal::MakeSpeechSubsystem(TEXT("phase6r-au-config-session"));
TestNotNull(TEXT("The speech subsystem must be constructed for Phase 6R-AU."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
FString OpenError;
TestTrue(
TEXT("The companion speech session must open for the Handy local-model-catalog posture."),
TrainingSubsystem->OpenActiveCompanionSpeechSession(OpenError)
);
TestTrue(TEXT("Opening the speech session must not report an error."), OpenError.IsEmpty());
const FHyperTwistTrainingCompanionSpeechSessionState SessionState =
TrainingSubsystem->GetActiveCompanionSpeechSessionState();
const FHyperTwistSpeechExternalDictationShellProfile& Profile =
SessionState.SessionConfig.ExternalDictationShellProfileDefinition;
TestTrue(TEXT("The external dictation shell profile must remain structurally valid."), Profile.IsStructurallyValid());
TestEqual(
TEXT("The local model catalog surface must stay bounded to review posture."),
Profile.LocalModelCatalogSurfaceMode,
TEXT("local-model-catalog-review")
);
TestEqual(
TEXT("The local model integrity surface must stay bounded to payload-integrity review."),
Profile.ModelIntegritySurfaceMode,
TEXT("payload-integrity-review")
);
TestEqual(
TEXT("The local model unload surface must stay bounded to sidecar unload-policy review."),
Profile.ModelUnloadSurfaceMode,
TEXT("sidecar-model-unload-policy")
);
TestTrue(
TEXT("The shell profile must expose the local model catalog inspection action."),
HyperTwistHandyPhase6RAUTestInternal::HasProfileActionBinding(
Profile.ActionBindings,
TEXT("inspect-local-model-catalog")
)
);
TestTrue(
TEXT("The shell profile must expose the payload-integrity review action."),
HyperTwistHandyPhase6RAUTestInternal::HasProfileActionBinding(
Profile.ActionBindings,
TEXT("review-local-model-integrity")
)
);
TestTrue(
TEXT("The shell profile must expose the unload-policy review action."),
HyperTwistHandyPhase6RAUTestInternal::HasProfileActionBinding(
Profile.ActionBindings,
TEXT("review-local-model-unload-policy")
)
);
TestTrue(
TEXT("The session config must preserve a structurally valid payload-custody profile."),
SessionState.SessionConfig.PayloadCustodyProfileDefinition.IsStructurallyValid()
);
TestTrue(
TEXT("Speech health must expose the local model catalog shell capability."),
HyperTwistHandyPhase6RAUTestInternal::HasCapability(
SessionState.ServiceHealth.Capabilities,
TEXT("speechLocalModelCatalogShell")
)
);
TestTrue(
TEXT("Speech health must expose the model integrity shell capability."),
HyperTwistHandyPhase6RAUTestInternal::HasCapability(
SessionState.ServiceHealth.Capabilities,
TEXT("speechModelIntegrityShell")
)
);
TestTrue(
TEXT("Speech health must expose the model unload-policy shell capability."),
HyperTwistHandyPhase6RAUTestInternal::HasCapability(
SessionState.ServiceHealth.Capabilities,
TEXT("speechModelUnloadPolicyShell")
)
);
TestTrue(
TEXT("Speech health must preserve payload-custody capability."),
HyperTwistHandyPhase6RAUTestInternal::HasCapability(
SessionState.ServiceHealth.Capabilities,
TEXT("downloadableModelPayloadCustody")
)
);
TestTrue(
TEXT("Speech health must preserve payload-integrity review capability."),
HyperTwistHandyPhase6RAUTestInternal::HasCapability(
SessionState.ServiceHealth.Capabilities,
TEXT("payloadIntegrityReview")
)
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistHandyPhase6RAUShellStateTest,
"HyperTwist.Permissive.Handy.Phase6R.AU.LocalModelCatalogShellState",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistHandyPhase6RAUShellStateTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistHandyPhase6RAUTestInternal::MakeSpeechSubsystem(TEXT("phase6r-au-shell-session"));
TestNotNull(TEXT("The speech subsystem must be constructed for Phase 6R-AU."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
FString OpenError;
TestTrue(
TEXT("The companion speech session must open for local-model-catalog inspection."),
TrainingSubsystem->OpenActiveCompanionSpeechSession(OpenError)
);
TestTrue(TEXT("Opening the speech session must not report an error."), OpenError.IsEmpty());
const FHyperTwistSpeechExternalDictationShellState ShellState =
TrainingSubsystem->GetActiveCompanionSpeechSessionState().ExternalDictationShellState;
TestTrue(TEXT("The external dictation shell state must remain structurally valid."), ShellState.IsStructurallyValid());
TestEqual(
TEXT("The shell must preserve the payload-custody profile id."),
ShellState.PayloadCustodyProfileId,
TEXT("downloadable-model-payload-custody-v1")
);
TestEqual(
TEXT("The shell must preserve the local model catalog surface id."),
ShellState.LocalModelCatalogSurfaceModeId,
TEXT("local-model-catalog-review")
);
TestEqual(
TEXT("The shell must preserve the model integrity surface id."),
ShellState.ModelIntegritySurfaceModeId,
TEXT("payload-integrity-review")
);
TestEqual(
TEXT("The shell must preserve the model unload surface id."),
ShellState.ModelUnloadSurfaceModeId,
TEXT("sidecar-model-unload-policy")
);
TestEqual(
TEXT("The shell must retain two bounded catalog entries."),
ShellState.ModelCatalogEntryCount,
2
);
TestEqual(
TEXT("The shell must retain one optional bounded catalog entry."),
ShellState.OptionalModelCatalogEntryCount,
1
);
TestEqual(
TEXT("The shell must keep runtime download deferred for both catalog entries."),
ShellState.DownloadDeferredModelEntryCount,
2
);
TestEqual(
TEXT("The shell must require integrity review for the primary whisper payload."),
ShellState.IntegrityReviewRequiredEntryCount,
1
);
TestEqual(
TEXT("The shell must preserve the primary payload selection."),
ShellState.SelectedPrimaryPayloadId,
TEXT("speech-model/whisper.cpp/base.en")
);
TestTrue(TEXT("The shell must surface the local model catalog card."), ShellState.bLocalModelCatalogVisible);
TestTrue(TEXT("The shell must surface the model integrity card."), ShellState.bModelIntegrityVisible);
TestTrue(TEXT("The shell must surface the model unload-policy card."), ShellState.bModelUnloadPolicyVisible);
TestTrue(TEXT("The shell must keep the bounded model catalog ready for review."), ShellState.bCatalogReady);
TestTrue(TEXT("The shell must keep runtime download deferred."), ShellState.bRuntimeDownloadDeferred);
TestTrue(TEXT("The shell must keep bundled payload redistribution deferred."), ShellState.bBundledPayloadRedistributionDeferred);
TestTrue(TEXT("The shell must preserve user-managed payload support."), ShellState.bSupportsUserManagedPayloads);
TestTrue(TEXT("The shell must preserve sidecar-managed payload support."), ShellState.bSupportsSidecarManagedPayloads);
TestTrue(TEXT("The shell must preserve integrity-verification requirements."), ShellState.bIntegrityVerificationRequired);
TestTrue(TEXT("The shell must keep unload actions deferred to sidecar/out-of-packet policy."), ShellState.bUnloadActionsDeferredToSidecar);
TestTrue(
TEXT("The shell must expose the local model catalog action."),
HyperTwistHandyPhase6RAUTestInternal::HasActionId(
ShellState.AvailableActionIds,
TEXT("inspect-local-model-catalog")
)
);
TestTrue(
TEXT("The shell must expose the payload-integrity action."),
HyperTwistHandyPhase6RAUTestInternal::HasActionId(
ShellState.AvailableActionIds,
TEXT("review-local-model-integrity")
)
);
TestTrue(
TEXT("The shell must expose the unload-policy action."),
HyperTwistHandyPhase6RAUTestInternal::HasActionId(
ShellState.AvailableActionIds,
TEXT("review-local-model-unload-policy")
)
);
const FHyperTwistSpeechExternalDictationModelCatalogEntry* PrimaryEntry =
HyperTwistHandyPhase6RAUTestInternal::FindCatalogEntry(
ShellState.ModelCatalogEntries,
TEXT("speech-model/whisper.cpp/base.en")
);
TestNotNull(TEXT("The shell must keep the primary whisper model catalog entry."), PrimaryEntry);
if (PrimaryEntry != nullptr)
{
TestTrue(TEXT("The primary catalog entry must remain selected."), PrimaryEntry->bSelectedPrimaryPayload);
TestFalse(TEXT("The primary catalog entry must not be optional."), PrimaryEntry->bOptionalForSession);
TestTrue(TEXT("The primary catalog entry must require integrity review."), PrimaryEntry->bIntegrityReviewRequired);
TestTrue(TEXT("The primary catalog entry must keep runtime download deferred."), PrimaryEntry->bDownloadDeferredInCurrentPacket);
}
const FHyperTwistSpeechExternalDictationModelCatalogEntry* VadEntry =
HyperTwistHandyPhase6RAUTestInternal::FindCatalogEntry(
ShellState.ModelCatalogEntries,
TEXT("speech-vad/whisper.cpp/silero-v6.2.0")
);
TestNotNull(TEXT("The shell must keep the optional VAD payload catalog entry."), VadEntry);
if (VadEntry != nullptr)
{
TestTrue(TEXT("The VAD catalog entry must remain optional."), VadEntry->bOptionalForSession);
TestFalse(TEXT("The VAD catalog entry must not become the selected primary payload."), VadEntry->bSelectedPrimaryPayload);
TestFalse(TEXT("The VAD catalog entry must not force integrity review without a checksum."), VadEntry->bIntegrityReviewRequired);
}
return true;
}
#endif

View file

@ -0,0 +1,141 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistImmersivePhaseIAEnvironmentProfileTest,
"HyperTwist.FirstParty.Immersive.PhaseIA.EnvironmentProfile",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistImmersivePhaseIAEnvironmentProfileTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingImmersiveEnvironmentProfileContract Contract;
TestTrue(
TEXT("The immersive environment profile contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveEnvironmentProfileContract(
TEXT("immersive-training-environment-profile"),
Contract
)
);
TestEqual(
TEXT("The immersive environment profile id must stay stable."),
Contract.ContractId,
TEXT("immersive-training-environment-profile")
);
TestTrue(
TEXT("The immersive environment profile must preserve an alpine ridge family."),
Contract.EnvironmentFamilyIds.Contains(TEXT("environment/alpine-ridge"))
);
TestTrue(
TEXT("The immersive environment profile must preserve an observatory family."),
Contract.EnvironmentFamilyIds.Contains(TEXT("environment/observatory"))
);
TestTrue(
TEXT("The immersive environment profile must remain a scenic training shell."),
Contract.PresenceSurfaceTags.Contains(TEXT("scenic training shell"))
);
TestTrue(
TEXT("The immersive environment profile must keep the generic virtual desktop excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic virtual desktop shell"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistImmersivePhaseIALightingAudioTest,
"HyperTwist.FirstParty.Immersive.PhaseIA.LightingAndAudio",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistImmersivePhaseIALightingAudioTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingImmersiveLightingPresetBoundary LightingBoundary;
TestTrue(
TEXT("The immersive lighting boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveLightingPresetBoundary(
TEXT("immersive-training-lighting-preset-boundary"),
LightingBoundary
)
);
TestTrue(
TEXT("The immersive lighting boundary must preserve dawn-focus lighting."),
LightingBoundary.LightingPresetIds.Contains(TEXT("preset/dawn-focus"))
);
TestTrue(
TEXT("The immersive lighting boundary must preserve puzzle-face legibility bias."),
LightingBoundary.LegibilitySurfaceTags.Contains(TEXT("puzzle-face legibility bias"))
);
TestTrue(
TEXT("The immersive lighting boundary must keep full weather simulation excluded."),
LightingBoundary.ExplicitExclusions.Contains(TEXT("full weather simulation ownership"))
);
FHyperTwistTrainingImmersiveAmbientAudioBoundary AudioBoundary;
TestTrue(
TEXT("The immersive ambient audio boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveAmbientAudioBoundary(
TEXT("immersive-training-ambient-audio-boundary"),
AudioBoundary
)
);
TestTrue(
TEXT("The immersive ambient audio boundary must preserve the alpine wind bed."),
AudioBoundary.AudioFamilyIds.Contains(TEXT("audio/alpine-wind-bed"))
);
TestTrue(
TEXT("The immersive ambient audio boundary must preserve replay-safe ducking."),
AudioBoundary.ComfortSurfaceTags.Contains(TEXT("replay-safe ducking"))
);
TestTrue(
TEXT("The immersive ambient audio boundary must keep voice-assistant playback excluded."),
AudioBoundary.ExplicitExclusions.Contains(TEXT("voice-assistant playback ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistImmersivePhaseIAWorldAnchorsTest,
"HyperTwist.FirstParty.Immersive.PhaseIA.WorldAnchors",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistImmersivePhaseIAWorldAnchorsTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingImmersiveWorldAnchorContract Contract;
TestTrue(
TEXT("The immersive world-anchor contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveWorldAnchorContract(
TEXT("immersive-training-world-anchor-contract"),
Contract
)
);
TestEqual(
TEXT("The immersive world-anchor id must stay stable."),
Contract.ContractId,
TEXT("immersive-training-world-anchor-contract")
);
TestTrue(
TEXT("The immersive world-anchor contract must preserve the puzzle dais anchor."),
Contract.AnchorIds.Contains(TEXT("anchor/puzzle-dais"))
);
TestTrue(
TEXT("The immersive world-anchor contract must preserve replay path staging."),
Contract.TargetSurfaceTags.Contains(TEXT("replay path staging"))
);
TestTrue(
TEXT("The immersive world-anchor contract must preserve a comfort-safe forward anchor."),
Contract.StabilitySurfaceTags.Contains(TEXT("comfort-safe forward anchor"))
);
TestTrue(
TEXT("The immersive world-anchor contract must keep productivity dashboard anchors excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic productivity dashboard anchors"))
);
return true;
}
#endif

View file

@ -0,0 +1,145 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistImmersivePhaseIBPresenceControlTest,
"HyperTwist.FirstParty.Immersive.PhaseIB.PresenceControl",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistImmersivePhaseIBPresenceControlTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingImmersivePresenceControlContract Contract;
TestTrue(
TEXT("The immersive presence-control contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersivePresenceControlContract(
TEXT("immersive-training-presence-control-contract"),
Contract
)
);
TestEqual(
TEXT("The immersive presence-control id must stay stable."),
Contract.ContractId,
TEXT("immersive-training-presence-control-contract")
);
TestTrue(
TEXT("The immersive presence-control contract must preserve deep-presence intensity."),
Contract.ImmersionIntensityIds.Contains(TEXT("intensity/deep-presence"))
);
TestTrue(
TEXT("The immersive presence-control contract must preserve reduced-distraction review posture."),
Contract.ReducedDistractionPresetIds.Contains(TEXT("preset/reduced-distraction-review"))
);
TestTrue(
TEXT("The immersive presence-control contract must preserve session-local presence tuning."),
Contract.PresenceSurfaceTags.Contains(TEXT("session-local presence tuning"))
);
TestTrue(
TEXT("The immersive presence-control contract must keep platform-global XR settings excluded."),
Contract.ExplicitExclusions.Contains(TEXT("platform-global XR settings ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistImmersivePhaseIBComfortPostureTest,
"HyperTwist.FirstParty.Immersive.PhaseIB.ComfortAndPosture",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistImmersivePhaseIBComfortPostureTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingImmersiveComfortBoundary ComfortBoundary;
TestTrue(
TEXT("The immersive comfort boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveComfortBoundary(
TEXT("immersive-training-comfort-boundary"),
ComfortBoundary
)
);
TestTrue(
TEXT("The immersive comfort boundary must preserve strong vignette posture."),
ComfortBoundary.ComfortOptionIds.Contains(TEXT("comfort/strong-vignette"))
);
TestTrue(
TEXT("The immersive comfort boundary must preserve edge-softening vignette behavior."),
ComfortBoundary.VignetteSurfaceTags.Contains(TEXT("edge-softening vignette"))
);
TestTrue(
TEXT("The immersive comfort boundary must keep platform locomotion ownership excluded."),
ComfortBoundary.ExplicitExclusions.Contains(TEXT("platform-level locomotion shell ownership"))
);
FHyperTwistTrainingImmersivePostureVariantContract PostureContract;
TestTrue(
TEXT("The immersive posture-variant contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersivePostureVariantContract(
TEXT("immersive-training-posture-variant-contract"),
PostureContract
)
);
TestTrue(
TEXT("The immersive posture-variant contract must preserve seated stable posture."),
PostureContract.PostureVariantIds.Contains(TEXT("posture/seated-stable"))
);
TestTrue(
TEXT("The immersive posture-variant contract must preserve puzzle dais height offset."),
PostureContract.AnchorAdjustmentSurfaceTags.Contains(TEXT("puzzle dais height offset"))
);
TestTrue(
TEXT("The immersive posture-variant contract must preserve comfort-safe recentering."),
PostureContract.ComfortSurfaceTags.Contains(TEXT("comfort-safe recentering"))
);
TestTrue(
TEXT("The immersive posture-variant contract must keep locomotion rigs excluded."),
PostureContract.ExplicitExclusions.Contains(TEXT("full locomotion rig ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistImmersivePhaseIBSessionRecallTest,
"HyperTwist.FirstParty.Immersive.PhaseIB.SessionRecall",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistImmersivePhaseIBSessionRecallTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingImmersiveSessionRecallBoundary Boundary;
TestTrue(
TEXT("The immersive session recall boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveSessionRecallBoundary(
TEXT("immersive-training-session-recall-boundary"),
Boundary
)
);
TestEqual(
TEXT("The immersive session recall id must stay stable."),
Boundary.BoundaryId,
TEXT("immersive-training-session-recall-boundary")
);
TestTrue(
TEXT("The immersive session recall boundary must preserve session-local recall."),
Boundary.RecallScopeIds.Contains(TEXT("recall/session-local"))
);
TestTrue(
TEXT("The immersive session recall boundary must preserve immersion intensity preference recall."),
Boundary.PreferenceFieldTags.Contains(TEXT("immersion intensity id"))
);
TestTrue(
TEXT("The immersive session recall boundary must preserve manual reset."),
Boundary.ResetSurfaceTags.Contains(TEXT("manual reset to default focus posture"))
);
TestTrue(
TEXT("The immersive session recall boundary must keep cloud profile ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("cross-session cloud profile ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,150 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistImmersivePhaseICCoachCueGhostTargetTest,
"HyperTwist.FirstParty.Immersive.PhaseIC.CoachCueAndGhostTarget",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistImmersivePhaseICCoachCueGhostTargetTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingImmersiveCoachCueAnchorContract CoachContract;
TestTrue(
TEXT("The immersive coach-cue anchor contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveCoachCueAnchorContract(
TEXT("immersive-training-coach-cue-anchor-contract"),
CoachContract
)
);
TestEqual(
TEXT("The immersive coach-cue anchor id must stay stable."),
CoachContract.ContractId,
TEXT("immersive-training-coach-cue-anchor-contract")
);
TestTrue(
TEXT("The immersive coach-cue anchor contract must preserve the coach callout arc."),
CoachContract.CueAnchorIds.Contains(TEXT("anchor/coach-callout-arc"))
);
TestTrue(
TEXT("The immersive coach-cue anchor contract must preserve guided lesson-step trigger posture."),
CoachContract.TriggerSurfaceTags.Contains(TEXT("guided lesson-step trigger"))
);
TestTrue(
TEXT("The immersive coach-cue anchor contract must keep generic tooltips excluded."),
CoachContract.ExplicitExclusions.Contains(TEXT("generic UI tooltip ownership"))
);
FHyperTwistTrainingImmersiveGhostTargetBoundary GhostBoundary;
TestTrue(
TEXT("The immersive ghost-target boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveGhostTargetBoundary(
TEXT("immersive-training-ghost-target-boundary"),
GhostBoundary
)
);
TestTrue(
TEXT("The immersive ghost-target boundary must preserve drill end-state targeting."),
GhostBoundary.TargetModeIds.Contains(TEXT("ghost-target/drill-end-state"))
);
TestTrue(
TEXT("The immersive ghost-target boundary must preserve semi-transparent target pose visualization."),
GhostBoundary.VisualizationSurfaceTags.Contains(TEXT("semi-transparent target pose"))
);
TestTrue(
TEXT("The immersive ghost-target boundary must preserve puzzle-local alignment."),
GhostBoundary.AlignmentSurfaceTags.Contains(TEXT("puzzle-local alignment"))
);
TestTrue(
TEXT("The immersive ghost-target boundary must keep animation rig ownership excluded."),
GhostBoundary.ExplicitExclusions.Contains(TEXT("full animation-rig ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistImmersivePhaseICReplayEmphasisTest,
"HyperTwist.FirstParty.Immersive.PhaseIC.ReplayEmphasis",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistImmersivePhaseICReplayEmphasisTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingImmersiveReplayEmphasisBoundary Boundary;
TestTrue(
TEXT("The immersive replay-emphasis boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveReplayEmphasisBoundary(
TEXT("immersive-training-replay-emphasis-boundary"),
Boundary
)
);
TestEqual(
TEXT("The immersive replay-emphasis boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("immersive-training-replay-emphasis-boundary")
);
TestTrue(
TEXT("The immersive replay-emphasis boundary must preserve path-ribbon mode."),
Boundary.EmphasisModeIds.Contains(TEXT("replay-emphasis/path-ribbon"))
);
TestTrue(
TEXT("The immersive replay-emphasis boundary must preserve error-turn highlight."),
Boundary.ReplaySurfaceTags.Contains(TEXT("error-turn highlight"))
);
TestTrue(
TEXT("The immersive replay-emphasis boundary must preserve coach-linked replay focus."),
Boundary.AttentionSurfaceTags.Contains(TEXT("coach-linked replay focus"))
);
TestTrue(
TEXT("The immersive replay-emphasis boundary must keep cinematic replay ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("full cinematic replay ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistImmersivePhaseICLessonStateTest,
"HyperTwist.FirstParty.Immersive.PhaseIC.LessonState",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistImmersivePhaseICLessonStateTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingImmersiveLessonStateContract Contract;
TestTrue(
TEXT("The immersive lesson-state contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveLessonStateContract(
TEXT("immersive-training-lesson-state-contract"),
Contract
)
);
TestEqual(
TEXT("The immersive lesson-state id must stay stable."),
Contract.ContractId,
TEXT("immersive-training-lesson-state-contract")
);
TestTrue(
TEXT("The immersive lesson-state contract must preserve drill-focus state."),
Contract.LessonStateIds.Contains(TEXT("lesson-state/drill-focus"))
);
TestTrue(
TEXT("The immersive lesson-state contract must preserve drill-target spotlighting."),
Contract.SpotlightSurfaceTags.Contains(TEXT("drill-target spotlight"))
);
TestTrue(
TEXT("The immersive lesson-state contract must preserve lesson-specific environment tone."),
Contract.StateSurfaceTags.Contains(TEXT("lesson-specific environment tone"))
);
TestTrue(
TEXT("The immersive lesson-state contract must keep mission scripting ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic mission scripting ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,145 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistImmersivePhaseIDSessionStateCueTest,
"HyperTwist.FirstParty.Immersive.PhaseID.SessionStateCues",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistImmersivePhaseIDSessionStateCueTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingImmersiveSessionStateCueContract Contract;
TestTrue(
TEXT("The immersive session-state cue contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveSessionStateCueContract(
TEXT("immersive-training-session-state-cue-contract"),
Contract
)
);
TestEqual(
TEXT("The immersive session-state cue id must stay stable."),
Contract.ContractId,
TEXT("immersive-training-session-state-cue-contract")
);
TestTrue(
TEXT("The immersive session-state cue contract must preserve mastery state."),
Contract.SessionStateIds.Contains(TEXT("session-state/mastery"))
);
TestTrue(
TEXT("The immersive session-state cue contract must preserve mastery settle glow transition."),
Contract.TransitionCueIds.Contains(TEXT("transition-cue/mastery-settle-glow"))
);
TestTrue(
TEXT("The immersive session-state cue contract must preserve review-safe environmental fade."),
Contract.TransitionSurfaceTags.Contains(TEXT("review-safe environmental fade"))
);
TestTrue(
TEXT("The immersive session-state cue contract must keep spectacle transitions excluded."),
Contract.ExplicitExclusions.Contains(TEXT("theatrical spectacle transition ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistImmersivePhaseIDLightingAndAudioPacingTest,
"HyperTwist.FirstParty.Immersive.PhaseID.LightingAndAudioPacing",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistImmersivePhaseIDLightingAndAudioPacingTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingImmersiveLightingReactionBoundary LightingBoundary;
TestTrue(
TEXT("The immersive lighting reaction boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveLightingReactionBoundary(
TEXT("immersive-training-lighting-reaction-boundary"),
LightingBoundary
)
);
TestTrue(
TEXT("The immersive lighting reaction boundary must preserve challenge-mode contrast push."),
LightingBoundary.LightingSurfaceTags.Contains(TEXT("challenge-mode contrast push"))
);
TestTrue(
TEXT("The immersive lighting reaction boundary must preserve puzzle-face visibility clamp."),
LightingBoundary.LegibilityGuardTags.Contains(TEXT("puzzle-face visibility clamp"))
);
TestTrue(
TEXT("The immersive lighting reaction boundary must keep shader FX ownership excluded."),
LightingBoundary.ExplicitExclusions.Contains(TEXT("generic shader FX ownership"))
);
FHyperTwistTrainingImmersiveAudioPacingBoundary AudioBoundary;
TestTrue(
TEXT("The immersive audio pacing boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveAudioPacingBoundary(
TEXT("immersive-training-audio-pacing-boundary"),
AudioBoundary
)
);
TestTrue(
TEXT("The immersive audio pacing boundary must preserve mastery release rise."),
AudioBoundary.AudioPacingModeIds.Contains(TEXT("audio-pacing/mastery-release-rise"))
);
TestTrue(
TEXT("The immersive audio pacing boundary must preserve correction-state ducking."),
AudioBoundary.AudioSurfaceTags.Contains(TEXT("correction-state ducking"))
);
TestTrue(
TEXT("The immersive audio pacing boundary must preserve challenge-mode tightened pacing."),
AudioBoundary.PacingSurfaceTags.Contains(TEXT("challenge-mode tightened pacing"))
);
TestTrue(
TEXT("The immersive audio pacing boundary must keep soundtrack scoring ownership excluded."),
AudioBoundary.ExplicitExclusions.Contains(TEXT("full soundtrack scoring ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistImmersivePhaseIDModeDifferentiationTest,
"HyperTwist.FirstParty.Immersive.PhaseID.ModeDifferentiation",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistImmersivePhaseIDModeDifferentiationTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingImmersiveModeDifferentiationContract Contract;
TestTrue(
TEXT("The immersive mode-differentiation contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveModeDifferentiationContract(
TEXT("immersive-training-mode-differentiation-contract"),
Contract
)
);
TestEqual(
TEXT("The immersive mode-differentiation id must stay stable."),
Contract.ContractId,
TEXT("immersive-training-mode-differentiation-contract")
);
TestTrue(
TEXT("The immersive mode-differentiation contract must preserve challenge mode."),
Contract.ModeIds.Contains(TEXT("mode/challenge"))
);
TestTrue(
TEXT("The immersive mode-differentiation contract must preserve study-mode atmospheric softness."),
Contract.DifferentiationSurfaceTags.Contains(TEXT("study-mode atmospheric softness"))
);
TestTrue(
TEXT("The immersive mode-differentiation contract must preserve no-theatrical-overreaction guard."),
Contract.GuardSurfaceTags.Contains(TEXT("no-theatrical-overreaction guard"))
);
TestTrue(
TEXT("The immersive mode-differentiation contract must keep narrative mode ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("broad narrative mode ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,141 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistImmersivePhaseIETransitionLegibilityTest,
"HyperTwist.FirstParty.Immersive.PhaseIE.TransitionAndLegibility",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistImmersivePhaseIETransitionLegibilityTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingImmersiveTransitionSafetyBoundary TransitionBoundary;
TestTrue(
TEXT("The immersive transition-safety boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveTransitionSafetyBoundary(
TEXT("immersive-training-transition-safety-boundary"),
TransitionBoundary
)
);
TestTrue(
TEXT("The immersive transition-safety boundary must preserve no-snap teleport shift."),
TransitionBoundary.ComfortTransitionIds.Contains(TEXT("transition-safety/no-snap-teleport-shift"))
);
TestTrue(
TEXT("The immersive transition-safety boundary must preserve the no-flash-pulse transition guard."),
TransitionBoundary.GuardSurfaceTags.Contains(TEXT("no-flash-pulse transition guard"))
);
TestTrue(
TEXT("The immersive transition-safety boundary must keep broad camera-system ownership excluded."),
TransitionBoundary.ExplicitExclusions.Contains(TEXT("broad camera-system ownership"))
);
FHyperTwistTrainingImmersiveAccessibilityLegibilityContract AccessibilityContract;
TestTrue(
TEXT("The immersive accessibility-legibility contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveAccessibilityLegibilityContract(
TEXT("immersive-training-accessibility-legibility-contract"),
AccessibilityContract
)
);
TestEqual(
TEXT("The immersive accessibility-legibility contract id must stay stable."),
AccessibilityContract.ContractId,
TEXT("immersive-training-accessibility-legibility-contract")
);
TestTrue(
TEXT("The immersive accessibility-legibility contract must preserve high-contrast puzzle focus."),
AccessibilityContract.AccessibilityModeIds.Contains(TEXT("accessibility/high-contrast-puzzle-focus"))
);
TestTrue(
TEXT("The immersive accessibility-legibility contract must preserve reduced bloom scenic path."),
AccessibilityContract.ReducedEffectsSurfaceTags.Contains(TEXT("reduced-bloom scenic path"))
);
TestTrue(
TEXT("The immersive accessibility-legibility contract must keep platform-global accessibility profile ownership excluded."),
AccessibilityContract.ExplicitExclusions.Contains(TEXT("platform-global accessibility profile ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistImmersivePhaseIEPerformanceBudgetTest,
"HyperTwist.FirstParty.Immersive.PhaseIE.PerformanceBudget",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistImmersivePhaseIEPerformanceBudgetTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingImmersivePerformanceBudgetBoundary Boundary;
TestTrue(
TEXT("The immersive performance-budget boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersivePerformanceBudgetBoundary(
TEXT("immersive-training-performance-budget-boundary"),
Boundary
)
);
TestTrue(
TEXT("The immersive performance-budget boundary must preserve the reduced-effects-safe budget profile."),
Boundary.BudgetProfileIds.Contains(TEXT("performance-budget/reduced-effects-safe"))
);
TestTrue(
TEXT("The immersive performance-budget boundary must preserve coach-and-puzzle first render budget."),
Boundary.PerformanceSurfaceTags.Contains(TEXT("coach-and-puzzle first render budget"))
);
TestTrue(
TEXT("The immersive performance-budget boundary must preserve the frame-time regression trigger."),
Boundary.FallbackTriggerTags.Contains(TEXT("frame-time regression trigger"))
);
TestTrue(
TEXT("The immersive performance-budget boundary must keep renderer feature-matrix ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("renderer feature-matrix ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistImmersivePhaseIEFallbackModeTest,
"HyperTwist.FirstParty.Immersive.PhaseIE.FallbackModes",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistImmersivePhaseIEFallbackModeTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingImmersiveFallbackModeContract Contract;
TestTrue(
TEXT("The immersive fallback-mode contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledImmersiveFallbackModeContract(
TEXT("immersive-training-fallback-mode-contract"),
Contract
)
);
TestEqual(
TEXT("The immersive fallback-mode contract id must stay stable."),
Contract.ContractId,
TEXT("immersive-training-fallback-mode-contract")
);
TestTrue(
TEXT("The immersive fallback-mode contract must preserve reduced-effects scenic fallback."),
Contract.FallbackModeIds.Contains(TEXT("fallback-mode/reduced-effects-scenic"))
);
TestTrue(
TEXT("The immersive fallback-mode contract must preserve reduced-effects fallback path."),
Contract.ReducedEffectsPathTags.Contains(TEXT("reduced-effects fallback path"))
);
TestTrue(
TEXT("The immersive fallback-mode contract must preserve puzzle-and-coach continuity guarantee."),
Contract.CompatibilitySurfaceTags.Contains(TEXT("puzzle-and-coach continuity guarantee"))
);
TestTrue(
TEXT("The immersive fallback-mode contract must keep generic graphics settings menu ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic graphics settings menu ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,132 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistLearnedSearchPhase6RAVReferenceBundleTest,
"HyperTwist.FirstParty.LearnedSearch.Phase6R.AV.ReferenceBundle",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistLearnedSearchPhase6RAVReferenceBundleTest::RunTest(const FString& Parameters)
{
const FHyperTwistTrainingLearnedSearchReferenceBundle Bundle =
UHyperTwistTrainingRuntimeLibrary::GetBundledLearnedSearchReferenceBundle();
TestTrue(TEXT("The learned-search bundle must remain structurally valid after Phase 6R-AV."), Bundle.IsStructurallyValid());
TestEqual(
TEXT("The primary learned-search experiment profile id must stay stable."),
Bundle.PrimaryExperimentProfileContractId,
TEXT("learned-search-experiment-profile")
);
TestTrue(
TEXT("The learned-search bundle must keep the ADI benchmark package reference."),
Bundle.PackageReferences.ContainsByPredicate(
[](const FHyperTwistTrainingLearnedSearchPackageReference& Reference)
{
return Reference.PackageId == TEXT("package/yakupbilen-adi-train-utils")
&& Reference.SourceAttribution.SourceRepo == TEXT("yakupbilen/drl-rubiks-cube");
}
)
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistLearnedSearchPhase6RAVExperimentProfileTest,
"HyperTwist.FirstParty.LearnedSearch.Phase6R.AV.ExperimentProfile",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistLearnedSearchPhase6RAVExperimentProfileTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingLearnedSearchExperimentProfileContract Contract;
TestTrue(
TEXT("The learned-search experiment profile must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledLearnedSearchExperimentProfileContract(
TEXT("learned-search-experiment-profile"),
Contract
)
);
TestEqual(
TEXT("The learned-search experiment profile id must stay stable."),
Contract.ContractId,
TEXT("learned-search-experiment-profile")
);
TestEqual(
TEXT("The learned-search experiment profile must remain first-party."),
Contract.SourceAttribution.SourceMode,
EHyperTwistTrainingSourceMode::FirstParty
);
TestTrue(
TEXT("The learned-search experiment profile must require the compact state package."),
Contract.RequiredPackageIds.Contains(TEXT("package/yakupbilen-cube-state"))
);
TestTrue(
TEXT("The learned-search experiment profile must require the ADI generation package."),
Contract.RequiredPackageIds.Contains(TEXT("package/yakupbilen-adi-train-utils"))
);
TestTrue(
TEXT("The learned-search experiment profile must preserve batched neural A* frontier scoring."),
Contract.SearchSurfaceTags.Contains(TEXT("batched neural A* frontier scoring"))
);
TestTrue(
TEXT("The learned-search experiment profile must keep correctness/performance oracle ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("correctness/performance oracle ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistLearnedSearchPhase6RAVBoundaryTest,
"HyperTwist.FirstParty.LearnedSearch.Phase6R.AV.Boundaries",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistLearnedSearchPhase6RAVBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingLearnedSearchSearchBenchmarkBoundary SearchBoundary;
TestTrue(
TEXT("The learned-search benchmark boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledLearnedSearchSearchBenchmarkBoundary(
TEXT("learned-search-search-benchmark-boundary"),
SearchBoundary
)
);
TestTrue(
TEXT("The benchmark boundary must require the neural search package."),
SearchBoundary.RequiredPackageIds.Contains(TEXT("package/yakupbilen-search"))
);
TestTrue(
TEXT("The benchmark boundary must preserve small value-network inference."),
SearchBoundary.ModelSurfaceTags.Contains(TEXT("small value-network inference"))
);
TestTrue(
TEXT("The benchmark boundary must keep live recognition/reconstruction ownership caveats visible."),
SearchBoundary.ProvenanceCaveats.Contains(TEXT("qbr and rubix-cube-solver remain live recognition/reconstruction owners"))
);
FHyperTwistTrainingLearnedSearchAttributionBoundary AttributionBoundary;
TestTrue(
TEXT("The learned-search attribution boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledLearnedSearchAttributionBoundary(
TEXT("learned-search-attribution-boundary"),
AttributionBoundary
)
);
TestTrue(
TEXT("The attribution boundary must preserve first-party reauthored experimentation use."),
AttributionBoundary.AllowedUseTags.Contains(TEXT("first-party reauthored experimentation lane"))
);
TestTrue(
TEXT("The attribution boundary must keep silent donor promotion excluded."),
AttributionBoundary.ExplicitExclusions.Contains(TEXT("silent donor promotion"))
);
return true;
}
#endif

View file

@ -0,0 +1,102 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistLearnedSearchPhase6RAWSequencePolicyTest,
"HyperTwist.FirstParty.LearnedSearch.Phase6R.AW.SequencePolicy",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistLearnedSearchPhase6RAWSequencePolicyTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingLearnedSearchSequencePolicyContract Contract;
TestTrue(
TEXT("The learned-search sequence policy contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledLearnedSearchSequencePolicyContract(
TEXT("learned-search-sequence-policy-contract"),
Contract
)
);
TestEqual(
TEXT("The learned-search sequence policy id must stay stable."),
Contract.ContractId,
TEXT("learned-search-sequence-policy-contract")
);
TestEqual(
TEXT("The learned-search sequence policy must remain first-party."),
Contract.SourceAttribution.SourceMode,
EHyperTwistTrainingSourceMode::FirstParty
);
TestTrue(
TEXT("The sequence policy must preserve inverse-pair suppression."),
Contract.SequenceSurfaceTags.Contains(TEXT("inverse-pair suppression"))
);
TestTrue(
TEXT("The sequence policy must preserve triple-repeat suppression."),
Contract.SequenceSurfaceTags.Contains(TEXT("triple-repeat suppression"))
);
TestTrue(
TEXT("The sequence policy must preserve optional solved-state inclusion."),
Contract.SamplingSurfaceTags.Contains(TEXT("optional solved-state inclusion"))
);
TestTrue(
TEXT("The sequence policy must preserve learn-first-close weighting."),
Contract.WeightingSurfaceTags.Contains(TEXT("learn-first-close weighting"))
);
TestTrue(
TEXT("The sequence policy must keep live replay notation ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("live replay notation ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistLearnedSearchPhase6RAWSearchBudgetTest,
"HyperTwist.FirstParty.LearnedSearch.Phase6R.AW.SearchBudget",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistLearnedSearchPhase6RAWSearchBudgetTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingLearnedSearchSearchBudgetBoundary Boundary;
TestTrue(
TEXT("The learned-search search-budget boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledLearnedSearchSearchBudgetBoundary(
TEXT("learned-search-search-budget-boundary"),
Boundary
)
);
TestEqual(
TEXT("The search-budget boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("learned-search-search-budget-boundary")
);
TestTrue(
TEXT("The search-budget boundary must preserve weighted frontier ranking."),
Boundary.BudgetSurfaceTags.Contains(TEXT("weighted frontier ranking"))
);
TestTrue(
TEXT("The search-budget boundary must preserve iteration-cap search mode."),
Boundary.BudgetSurfaceTags.Contains(TEXT("iteration-cap search mode"))
);
TestTrue(
TEXT("The search-budget boundary must preserve benchmark checkpoint clone posture."),
Boundary.FrontierSurfaceTags.Contains(TEXT("benchmark checkpoint clone posture"))
);
TestTrue(
TEXT("The search-budget boundary must keep correctness/performance oracle ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("correctness/performance oracle ownership"))
);
TestTrue(
TEXT("The search-budget boundary must preserve the benchmark-only live solve UX caveat."),
Boundary.ProvenanceCaveats.Contains(TEXT("frontier budgets remain benchmark-only and non-authoritative for live solve UX"))
);
return true;
}
#endif

View file

@ -0,0 +1,98 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistLearnedSearchPhase6RAXNodeIdentityTest,
"HyperTwist.FirstParty.LearnedSearch.Phase6R.AX.NodeIdentity",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistLearnedSearchPhase6RAXNodeIdentityTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingLearnedSearchNodeIdentityContract Contract;
TestTrue(
TEXT("The learned-search node identity contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledLearnedSearchNodeIdentityContract(
TEXT("learned-search-node-identity-contract"),
Contract
)
);
TestEqual(
TEXT("The learned-search node identity id must stay stable."),
Contract.ContractId,
TEXT("learned-search-node-identity-contract")
);
TestEqual(
TEXT("The learned-search node identity contract must remain first-party."),
Contract.SourceAttribution.SourceMode,
EHyperTwistTrainingSourceMode::FirstParty
);
TestTrue(
TEXT("The node identity contract must preserve flattened-byte node hashing."),
Contract.IdentitySurfaceTags.Contains(TEXT("flattened-byte node hash"))
);
TestTrue(
TEXT("The node identity contract must preserve shallower-depth replacement policy."),
Contract.IdentitySurfaceTags.Contains(TEXT("shallower-depth replacement policy"))
);
TestTrue(
TEXT("The node identity contract must preserve parent-linked lineage."),
Contract.LineageSurfaceTags.Contains(TEXT("parent-linked lineage"))
);
TestTrue(
TEXT("The node identity contract must keep canonical replay ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("canonical replay ledger ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistLearnedSearchPhase6RAXStateExpansionTest,
"HyperTwist.FirstParty.LearnedSearch.Phase6R.AX.StateExpansion",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistLearnedSearchPhase6RAXStateExpansionTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingLearnedSearchStateExpansionBoundary Boundary;
TestTrue(
TEXT("The learned-search state-expansion boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledLearnedSearchStateExpansionBoundary(
TEXT("learned-search-state-expansion-boundary"),
Boundary
)
);
TestEqual(
TEXT("The state-expansion boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("learned-search-state-expansion-boundary")
);
TestTrue(
TEXT("The state-expansion boundary must preserve 12-way successor expansion."),
Boundary.ExpansionSurfaceTags.Contains(TEXT("12-way successor expansion"))
);
TestTrue(
TEXT("The state-expansion boundary must preserve vectorized reward scan."),
Boundary.ExpansionSurfaceTags.Contains(TEXT("vectorized reward scan"))
);
TestTrue(
TEXT("The state-expansion boundary must preserve solved-state goal tagging."),
Boundary.GoalSurfaceTags.Contains(TEXT("solved-state goal tagging"))
);
TestTrue(
TEXT("The state-expansion boundary must keep committed-face reconstruction ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("committed-face reconstruction ownership"))
);
TestTrue(
TEXT("The state-expansion boundary must preserve the benchmark-only reconstruction caveat."),
Boundary.ProvenanceCaveats.Contains(TEXT("state expansion remains benchmark-only and non-authoritative for live reconstruction"))
);
return true;
}
#endif

View file

@ -0,0 +1,101 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistLearnedSearchPhase6RAYFrontierScoringTest,
"HyperTwist.FirstParty.LearnedSearch.Phase6R.AY.FrontierScoring",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistLearnedSearchPhase6RAYFrontierScoringTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingLearnedSearchFrontierScoringBoundary Boundary;
TestTrue(
TEXT("The learned-search frontier scoring boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledLearnedSearchFrontierScoringBoundary(
TEXT("learned-search-frontier-scoring-boundary"),
Boundary
)
);
TestEqual(
TEXT("The learned-search frontier scoring boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("learned-search-frontier-scoring-boundary")
);
TestTrue(
TEXT("The frontier scoring boundary must preserve weighted f-score depth penalty."),
Boundary.FrontierSurfaceTags.Contains(TEXT("weighted f-score depth penalty"))
);
TestTrue(
TEXT("The frontier scoring boundary must preserve the batched frontier pop window."),
Boundary.FrontierSurfaceTags.Contains(TEXT("batched frontier pop window"))
);
TestTrue(
TEXT("The frontier scoring boundary must preserve one-hot categorical heuristic input."),
Boundary.EvaluationSurfaceTags.Contains(TEXT("one-hot categorical heuristic input"))
);
TestTrue(
TEXT("The frontier scoring boundary must preserve torch no-grad evaluation posture."),
Boundary.EvaluationSurfaceTags.Contains(TEXT("torch no-grad evaluation posture"))
);
TestTrue(
TEXT("The frontier scoring boundary must keep deployed model serving excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("deployed model serving ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistLearnedSearchPhase6RAYSolutionUnwindTest,
"HyperTwist.FirstParty.LearnedSearch.Phase6R.AY.SolutionUnwind",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistLearnedSearchPhase6RAYSolutionUnwindTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingLearnedSearchSolutionUnwindBoundary Boundary;
TestTrue(
TEXT("The learned-search solution unwind boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledLearnedSearchSolutionUnwindBoundary(
TEXT("learned-search-solution-unwind-boundary"),
Boundary
)
);
TestEqual(
TEXT("The learned-search solution unwind boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("learned-search-solution-unwind-boundary")
);
TestTrue(
TEXT("The solution unwind boundary must preserve goal-index to parent-chain unwind."),
Boundary.RecoverySurfaceTags.Contains(TEXT("goal-index to parent-chain unwind"))
);
TestTrue(
TEXT("The solution unwind boundary must preserve clear-seq normalization posture."),
Boundary.RecoverySurfaceTags.Contains(TEXT("clear-seq normalization posture"))
);
TestTrue(
TEXT("The solution unwind boundary must preserve time-bounded search mode."),
Boundary.TerminationSurfaceTags.Contains(TEXT("time-bounded search mode"))
);
TestTrue(
TEXT("The solution unwind boundary must preserve iteration and generated-node reporting."),
Boundary.TerminationSurfaceTags.Contains(TEXT("iteration and generated-node reporting"))
);
TestTrue(
TEXT("The solution unwind boundary must keep canonical replay ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("canonical replay ledger ownership"))
);
TestTrue(
TEXT("The solution unwind boundary must preserve the benchmark-only replay caveat."),
Boundary.ProvenanceCaveats.Contains(TEXT("solution unwind remains benchmark-only and non-authoritative for canonical replay"))
);
return true;
}
#endif

View file

@ -0,0 +1,101 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistLearnedSearchPhase6RAZValueNetworkShapeTest,
"HyperTwist.FirstParty.LearnedSearch.Phase6R.AZ.ValueNetworkShape",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistLearnedSearchPhase6RAZValueNetworkShapeTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingLearnedSearchValueNetworkShapeBoundary Boundary;
TestTrue(
TEXT("The learned-search value-network shape boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledLearnedSearchValueNetworkShapeBoundary(
TEXT("learned-search-value-network-shape-boundary"),
Boundary
)
);
TestEqual(
TEXT("The learned-search value-network shape id must stay stable."),
Boundary.BoundaryId,
TEXT("learned-search-value-network-shape-boundary")
);
TestTrue(
TEXT("The value-network shape boundary must preserve the flattened input reshape."),
Boundary.ArchitectureSurfaceTags.Contains(TEXT("flattened input reshape"))
);
TestTrue(
TEXT("The value-network shape boundary must preserve the 4096-2048-512 linear stack."),
Boundary.ArchitectureSurfaceTags.Contains(TEXT("4096-2048-512 linear stack"))
);
TestTrue(
TEXT("The value-network shape boundary must preserve xavier-normal weight init."),
Boundary.InitializationSurfaceTags.Contains(TEXT("xavier-normal weight init"))
);
TestTrue(
TEXT("The value-network shape boundary must preserve zero-bias init posture."),
Boundary.InitializationSurfaceTags.Contains(TEXT("zero-bias init posture"))
);
TestTrue(
TEXT("The value-network shape boundary must keep deployed model serving excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("deployed model serving ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistLearnedSearchPhase6RAZGeneratorSyncTest,
"HyperTwist.FirstParty.LearnedSearch.Phase6R.AZ.GeneratorSync",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistLearnedSearchPhase6RAZGeneratorSyncTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingLearnedSearchGeneratorSyncBoundary Boundary;
TestTrue(
TEXT("The learned-search generator sync boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledLearnedSearchGeneratorSyncBoundary(
TEXT("learned-search-generator-sync-boundary"),
Boundary
)
);
TestEqual(
TEXT("The learned-search generator sync id must stay stable."),
Boundary.BoundaryId,
TEXT("learned-search-generator-sync-boundary")
);
TestTrue(
TEXT("The generator sync boundary must preserve tau-weighted generator refresh."),
Boundary.SyncSurfaceTags.Contains(TEXT("tau-weighted generator refresh"))
);
TestTrue(
TEXT("The generator sync boundary must preserve state-dict merge posture."),
Boundary.SyncSurfaceTags.Contains(TEXT("state-dict merge posture"))
);
TestTrue(
TEXT("The generator sync boundary must preserve device-aware parameter copy."),
Boundary.ParameterSurfaceTags.Contains(TEXT("device-aware parameter copy"))
);
TestTrue(
TEXT("The generator sync boundary must preserve generator return-on-device posture."),
Boundary.ParameterSurfaceTags.Contains(TEXT("generator return-on-device posture"))
);
TestTrue(
TEXT("The generator sync boundary must keep provider-backed model lifecycle ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("provider-backed model lifecycle ownership"))
);
TestTrue(
TEXT("The generator sync boundary must preserve the benchmark-only training-service caveat."),
Boundary.ProvenanceCaveats.Contains(TEXT("generator sync remains benchmark-only and non-authoritative for deployed training services"))
);
return true;
}
#endif

View file

@ -0,0 +1,109 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistMagic120CellPhase6RALReferenceBundleTest,
"HyperTwist.Permissive.Magic120Cell.Phase6R.AL.ReferenceBundle",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistMagic120CellPhase6RALReferenceBundleTest::RunTest(const FString& Parameters)
{
const FHyperTwistTrainingMagic120CellReferenceBundle Bundle =
UHyperTwistTrainingRuntimeLibrary::GetBundledMagic120CellReferenceBundle();
TestTrue(TEXT("The Magic120Cell bundle must remain structurally valid after Phase 6R-AL."), Bundle.IsStructurallyValid());
TestEqual(
TEXT("The primary Magic120Cell view profile id must stay stable."),
Bundle.PrimaryViewProfileContractId,
TEXT("magic120cell-focus-view-profile")
);
TestTrue(
TEXT("The Magic120Cell bundle must expose one or more view profile contracts."),
Bundle.ViewProfileContracts.Num() >= 1
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistMagic120CellPhase6RALViewProfileContractTest,
"HyperTwist.Permissive.Magic120Cell.Phase6R.AL.ViewProfileContract",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistMagic120CellPhase6RALViewProfileContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingMagic120CellViewProfileContract Contract;
TestTrue(
TEXT("The Magic120Cell focus view profile must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledMagic120CellViewProfileContract(
TEXT("magic120cell-focus-view-profile"),
Contract
)
);
TestEqual(TEXT("The view profile id must stay stable."), Contract.ContractId, TEXT("magic120cell-focus-view-profile"));
TestTrue(
TEXT("The view profile must keep the Magic120Cell settings package as a required input."),
Contract.RequiredPackageIds.Contains(TEXT("package/magic120cell-settings"))
);
TestTrue(
TEXT("The view profile must preserve 4D projection distance semantics."),
Contract.ProjectionSurfaceTags.Contains(TEXT("4D projection distance"))
);
TestTrue(
TEXT("The view profile must preserve the layer-display default symmetry preset."),
Contract.SymmetryPresetTags.Contains(TEXT("layer-display default symmetry"))
);
TestTrue(
TEXT("The view profile must preserve logical visibility depth ladder semantics."),
Contract.VisibilityPresetTags.Contains(TEXT("logical visibility depth ladder"))
);
TestTrue(
TEXT("The view profile must preserve center-cell recentering focus posture."),
Contract.FocusSurfaceTags.Contains(TEXT("center-cell recentering"))
);
TestEqual(
TEXT("The view profile must keep the direct donor source repo."),
Contract.SourceAttribution.SourceRepo,
TEXT("roice3/Magic120Cell")
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistMagic120CellPhase6RALViewProfileExclusionTest,
"HyperTwist.Permissive.Magic120Cell.Phase6R.AL.ViewProfileExclusions",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistMagic120CellPhase6RALViewProfileExclusionTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingMagic120CellViewProfileContract Contract;
TestTrue(
TEXT("The Magic120Cell focus view profile must still resolve for exclusion checks."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledMagic120CellViewProfileContract(
TEXT("magic120cell-focus-view-profile"),
Contract
)
);
TestTrue(
TEXT("The view profile must keep host-shell ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("WinForms/OpenGL host-shell ownership"))
);
TestTrue(
TEXT("The view profile must keep broad renderer ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("broad renderer ownership"))
);
TestTrue(
TEXT("The view profile must keep broad interaction-shell widening excluded."),
Contract.ExplicitExclusions.Contains(TEXT("broad interaction-shell widening"))
);
return true;
}
#endif

View file

@ -0,0 +1,109 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistMagicCube5DPhase6RAMReferenceBundleTest,
"HyperTwist.Permissive.MagicCube5D.Phase6R.AM.ReferenceBundle",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistMagicCube5DPhase6RAMReferenceBundleTest::RunTest(const FString& Parameters)
{
const FHyperTwistTrainingMagicCube5DReferenceBundle Bundle =
UHyperTwistTrainingRuntimeLibrary::GetBundledMagicCube5DReferenceBundle();
TestTrue(TEXT("The MagicCube5D bundle must remain structurally valid after Phase 6R-AM."), Bundle.IsStructurallyValid());
TestEqual(
TEXT("The primary MagicCube5D view profile id must stay stable."),
Bundle.PrimaryViewProfileContractId,
TEXT("magiccube5d-projection-view-profile")
);
TestTrue(
TEXT("The MagicCube5D bundle must expose one or more view profile contracts."),
Bundle.ViewProfileContracts.Num() >= 1
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistMagicCube5DPhase6RAMViewProfileContractTest,
"HyperTwist.Permissive.MagicCube5D.Phase6R.AM.ViewProfileContract",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistMagicCube5DPhase6RAMViewProfileContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingMagicCube5DViewProfileContract Contract;
TestTrue(
TEXT("The MagicCube5D projection view profile must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledMagicCube5DViewProfileContract(
TEXT("magiccube5d-projection-view-profile"),
Contract
)
);
TestEqual(TEXT("The view profile id must stay stable."), Contract.ContractId, TEXT("magiccube5d-projection-view-profile"));
TestTrue(
TEXT("The view profile must keep the MagicCube5D settings package as a required input."),
Contract.RequiredPackageIds.Contains(TEXT("package/magiccube5d-settings"))
);
TestTrue(
TEXT("The view profile must preserve 5D projection distance semantics."),
Contract.ProjectionSurfaceTags.Contains(TEXT("5D projection distance"))
);
TestTrue(
TEXT("The view profile must preserve cross-eyed stereo posture."),
Contract.StereoSurfaceTags.Contains(TEXT("cross-eyed stereo posture"))
);
TestTrue(
TEXT("The view profile must preserve per-face invisibility semantics."),
Contract.VisibilitySurfaceTags.Contains(TEXT("per-face invisibility vector"))
);
TestTrue(
TEXT("The view profile must preserve fifth-axis view rotation focus posture."),
Contract.FocusSurfaceTags.Contains(TEXT("control-click fifth-axis view rotation"))
);
TestEqual(
TEXT("The view profile must keep the direct donor source repo."),
Contract.SourceAttribution.SourceRepo,
TEXT("roice3/MagicCube5D")
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistMagicCube5DPhase6RAMViewProfileExclusionTest,
"HyperTwist.Permissive.MagicCube5D.Phase6R.AM.ViewProfileExclusions",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistMagicCube5DPhase6RAMViewProfileExclusionTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingMagicCube5DViewProfileContract Contract;
TestTrue(
TEXT("The MagicCube5D projection view profile must still resolve for exclusion checks."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledMagicCube5DViewProfileContract(
TEXT("magiccube5d-projection-view-profile"),
Contract
)
);
TestTrue(
TEXT("The view profile must keep host-shell ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("WinForms/OpenGL host-shell ownership"))
);
TestTrue(
TEXT("The view profile must keep stereo/anaglyph renderer ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("stereo/anaglyph renderer ownership"))
);
TestTrue(
TEXT("The view profile must keep broad macro/tutorial shell widening excluded."),
Contract.ExplicitExclusions.Contains(TEXT("broad macro/tutorial shell widening"))
);
return true;
}
#endif

View file

@ -0,0 +1,215 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistRecognition/HyperTwistVoiceClient.h"
#include "UObject/Object.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistPiperPhase6RAQTestInternal
{
UHyperTwistMockVoiceClient* MakeMockVoiceClient()
{
return NewObject<UHyperTwistMockVoiceClient>(GetTransientPackage());
}
UHyperTwistHttpVoiceClient* MakeHttpVoiceClient()
{
return NewObject<UHyperTwistHttpVoiceClient>(GetTransientPackage());
}
const FHyperTwistVoiceProfileSummary* FindProfileById(
const TArray<FHyperTwistVoiceProfileSummary>& Profiles,
const FString& VoiceProfileId
)
{
return Profiles.FindByPredicate(
[&VoiceProfileId](const FHyperTwistVoiceProfileSummary& Profile)
{
return Profile.VoiceProfileId == VoiceProfileId;
}
);
}
const FHyperTwistVoiceAssetDescriptor* FindVoiceAssetById(
const TArray<FHyperTwistVoiceAssetDescriptor>& VoiceAssets,
const FString& VoiceAssetId
)
{
return VoiceAssets.FindByPredicate(
[&VoiceAssetId](const FHyperTwistVoiceAssetDescriptor& VoiceAsset)
{
return VoiceAsset.VoiceAssetId == VoiceAssetId;
}
);
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistPiperPhase6RAQVoiceAssetCatalogAlignmentTest,
"HyperTwist.Permissive.Piper.Phase6R.AQ.VoiceAssetCatalogAlignment",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistPiperPhase6RAQVoiceAssetCatalogAlignmentTest::RunTest(const FString& Parameters)
{
UHyperTwistMockVoiceClient* VoiceClient = HyperTwistPiperPhase6RAQTestInternal::MakeMockVoiceClient();
TestNotNull(TEXT("The mock voice client must be constructed for Phase 6R-AQ."), VoiceClient);
if (VoiceClient == nullptr)
{
return false;
}
const TArray<FHyperTwistVoiceProfileSummary> Profiles = VoiceClient->ListVoiceProfiles();
const FHyperTwistVoiceServiceHealth Health = VoiceClient->GetVoiceServiceHealth();
TestTrue(TEXT("The local voice catalog must remain non-empty."), Profiles.Num() >= 3);
TestTrue(TEXT("The voice review health must remain structurally valid."), Health.IsStructurallyValid());
TestEqual(TEXT("The bounded review lane must expose three local voice assets."), Health.SupportedVoiceAssetIds.Num(), 3);
TestEqual(TEXT("The bounded review lane must expose three local voice descriptors."), Health.SupportedVoiceAssets.Num(), 3);
TestFalse(
TEXT("The bounded piper review lane must not implicitly widen into the coqui premium profile."),
Health.SupportedVoiceAssetIds.Contains(TEXT("voice-asset/coqui/multilingual-guide-premium"))
);
for (const FHyperTwistVoiceAssetDescriptor& VoiceAsset : Health.SupportedVoiceAssets)
{
const FHyperTwistVoiceProfileSummary* Profile =
HyperTwistPiperPhase6RAQTestInternal::FindProfileById(Profiles, VoiceAsset.VoiceProfileId);
TestNotNull(TEXT("Every reviewable local voice asset must map back to a voice profile."), Profile);
if (Profile != nullptr)
{
TestEqual(
TEXT("The reviewable local voice asset must preserve the model-card review path."),
VoiceAsset.ReviewDocumentPath,
Profile->ModelCardRelativePath
);
}
}
const FHyperTwistVoiceAssetDescriptor* LessacAsset =
HyperTwistPiperPhase6RAQTestInternal::FindVoiceAssetById(
Health.SupportedVoiceAssets,
TEXT("voice-asset/piper/en_US-lessac-medium")
);
TestNotNull(TEXT("The bounded review lane must preserve the Lessac voice asset descriptor."), LessacAsset);
if (LessacAsset != nullptr)
{
TestEqual(
TEXT("The Lessac descriptor must preserve the ONNX artifact name."),
LessacAsset->ArtifactName,
TEXT("en_US-lessac-medium.onnx")
);
TestEqual(
TEXT("The Lessac descriptor must preserve the donor-grounded relative path hint."),
LessacAsset->RelativePathHint,
TEXT("en/en_US/lessac/medium/en_US-lessac-medium.onnx")
);
TestTrue(TEXT("The Lessac descriptor must remain user-supplied in this packet."), LessacAsset->bUserSuppliedOnly);
TestFalse(TEXT("The Lessac descriptor must not be bundled by this packet."), LessacAsset->bBundledWithCodeDistribution);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistPiperPhase6RAQVoiceAssetReviewHealthTest,
"HyperTwist.Permissive.Piper.Phase6R.AQ.VoiceAssetReviewHealth",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistPiperPhase6RAQVoiceAssetReviewHealthTest::RunTest(const FString& Parameters)
{
UHyperTwistMockVoiceClient* VoiceClient = HyperTwistPiperPhase6RAQTestInternal::MakeMockVoiceClient();
TestNotNull(TEXT("The mock voice client must be constructed for Phase 6R-AQ."), VoiceClient);
if (VoiceClient == nullptr)
{
return false;
}
const FHyperTwistVoiceServiceHealth Health = VoiceClient->GetVoiceServiceHealth();
TestTrue(TEXT("The voice review health must remain structurally valid."), Health.IsStructurallyValid());
TestEqual(
TEXT("The voice review lane must preserve the review profile id."),
Health.VoiceAssetReviewProfileId,
TEXT("downloadable-voice-asset-review-v1")
);
TestTrue(
TEXT("The voice review profile must remain structurally valid."),
Health.VoiceAssetReviewProfileDefinition.IsStructurallyValid()
);
TestTrue(
TEXT("The voice service must advertise downloadable voice-asset review capability."),
Health.Capabilities.Contains(TEXT("downloadableVoiceAssetReview"))
);
TestTrue(
TEXT("The voice service must advertise model-card review capability."),
Health.Capabilities.Contains(TEXT("voiceModelCardReview"))
);
TestFalse(
TEXT("The review profile must keep runtime voice download deferred."),
Health.VoiceAssetReviewProfileDefinition.bAllowsRuntimeVoiceDownloadInCurrentPacket
);
TestFalse(
TEXT("The review profile must keep bundled redistribution disabled."),
Health.VoiceAssetReviewProfileDefinition.bAllowsBundledVoiceAssetRedistribution
);
TestTrue(
TEXT("The review profile must preserve user-managed voice support."),
Health.VoiceAssetReviewProfileDefinition.bSupportsUserManagedVoiceAssets
);
TestTrue(
TEXT("The review profile must preserve sidecar-managed voice support."),
Health.VoiceAssetReviewProfileDefinition.bSupportsSidecarManagedVoiceAssets
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistPiperPhase6RAQProviderBackedVoiceAssetReviewFallbackTest,
"HyperTwist.Permissive.Piper.Phase6R.AQ.ProviderBackedVoiceAssetReviewFallback",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistPiperPhase6RAQProviderBackedVoiceAssetReviewFallbackTest::RunTest(const FString& Parameters)
{
UHyperTwistHttpVoiceClient* VoiceClient = HyperTwistPiperPhase6RAQTestInternal::MakeHttpVoiceClient();
TestNotNull(TEXT("The provider-backed voice client must be constructed for Phase 6R-AQ."), VoiceClient);
if (VoiceClient == nullptr)
{
return false;
}
VoiceClient->ServiceBaseUrl.Reset();
const FHyperTwistVoiceServiceHealth Health = VoiceClient->GetVoiceServiceHealth();
TestTrue(TEXT("The provider-backed review fallback must remain structurally valid."), Health.IsStructurallyValid());
TestFalse(TEXT("The provider-backed review fallback must report not ready."), Health.bReady);
TestEqual(
TEXT("The provider-backed review fallback must preserve the missing-endpoint error."),
Health.LastError,
TEXT("service-base-url-missing")
);
TestTrue(
TEXT("The provider-backed review fallback must preserve downloadable voice-asset review capability."),
Health.Capabilities.Contains(TEXT("downloadableVoiceAssetReview"))
);
TestTrue(
TEXT("The provider-backed review fallback must preserve provider-backed voice capability."),
Health.Capabilities.Contains(TEXT("provider-backed-voice"))
);
TestEqual(
TEXT("The provider-backed review fallback must preserve three local voice asset ids."),
Health.SupportedVoiceAssetIds.Num(),
3
);
TestEqual(
TEXT("The provider-backed review fallback must preserve three local voice asset descriptors."),
Health.SupportedVoiceAssets.Num(),
3
);
return true;
}
#endif

View file

@ -0,0 +1,265 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "Engine/GameInstance.h"
#include "HyperTwistTraining/HyperTwistTrainingSubsystem.h"
#include "UObject/UnrealType.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistQbrPhase6RAKTestInternal
{
FHyperTwistTrainingDeck MakeRecognitionDeck()
{
FHyperTwistTrainingDeck Deck;
Deck.DeckId = TEXT("phase6r-ak/qbr-locale-guidance-routing");
Deck.Title = TEXT("Phase 6R-AK Qbr Locale Guidance Routing");
Deck.DeliveryModes = {
EHyperTwistTrainingDeliveryMode::RecognitionAssisted,
EHyperTwistTrainingDeliveryMode::CoachReviewed
};
FHyperTwistTrainingCase TrainingCase;
TrainingCase.CaseId = TEXT("phase6r-ak-case");
TrainingCase.PuzzleId = TEXT("cube/3x3x3");
TrainingCase.PromptKind = EHyperTwistTrainingPromptKind::Recognition;
TrainingCase.PromptLabel = TEXT("Phase 6R-AK Recognition");
TrainingCase.AllowedDeliveryModes = {
EHyperTwistTrainingDeliveryMode::RecognitionAssisted,
EHyperTwistTrainingDeliveryMode::CoachReviewed
};
Deck.Cases = {TrainingCase};
return Deck;
}
void ForceMockRecognitionClient(UHyperTwistTrainingSubsystem* TrainingSubsystem)
{
if (TrainingSubsystem == nullptr)
{
return;
}
if (FStrProperty* RecognitionClientKindProperty = FindFProperty<FStrProperty>(
UHyperTwistTrainingSubsystem::StaticClass(),
TEXT("RecognitionClientKind")
))
{
RecognitionClientKindProperty->SetPropertyValue_InContainer(TrainingSubsystem, TEXT("mock"));
}
}
UHyperTwistTrainingSubsystem* MakeRecognitionSubsystem(const FString& SessionId)
{
UGameInstance* GameInstance = NewObject<UGameInstance>(GetTransientPackage());
if (GameInstance == nullptr)
{
return nullptr;
}
UHyperTwistTrainingSubsystem* TrainingSubsystem = NewObject<UHyperTwistTrainingSubsystem>(GameInstance);
if (TrainingSubsystem == nullptr)
{
return nullptr;
}
ForceMockRecognitionClient(TrainingSubsystem);
const FHyperTwistTrainingRunState RunState = TrainingSubsystem->StartTrainingRunFromDeck(
MakeRecognitionDeck(),
TEXT("phase6r-ak-user"),
SessionId,
EHyperTwistTrainingDeliveryMode::RecognitionAssisted
);
return RunState.IsStructurallyValid() ? TrainingSubsystem : nullptr;
}
void SubmitPreviewFrame(
UHyperTwistTrainingSubsystem* TrainingSubsystem,
const FString& FaceId,
const int32 FrameOrdinal
)
{
FHyperTwistVisionFrameEnvelope Frame;
Frame.FrameOrdinal = FrameOrdinal;
Frame.TargetFaceHint = FaceId;
TrainingSubsystem->SubmitActiveRecognitionFrame(Frame);
}
FHyperTwistVisionCommitResult CommitFace(
UHyperTwistTrainingSubsystem* TrainingSubsystem,
const FString& FaceId,
const int32 FrameOrdinal
)
{
SubmitPreviewFrame(TrainingSubsystem, FaceId, FrameOrdinal);
FHyperTwistVisionCommitRequest Request;
Request.TargetFace = FaceId;
return TrainingSubsystem->CommitActiveRecognitionObservation(Request);
}
bool HasLocaleCode(const TArray<FString>& LocaleCodes, const FString& ExpectedLocaleCode)
{
return LocaleCodes.Contains(ExpectedLocaleCode);
}
const FHyperTwistVisionLocaleOption* FindLocaleOption(
const TArray<FHyperTwistVisionLocaleOption>& LocaleOptions,
const FString& ExpectedLocaleCode
)
{
return LocaleOptions.FindByPredicate(
[&ExpectedLocaleCode](const FHyperTwistVisionLocaleOption& Candidate)
{
return Candidate.LocaleCode == ExpectedLocaleCode;
}
);
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistQbrPhase6RAKSessionConfigTest,
"HyperTwist.Permissive.Qbr.Phase6R.AK.LocaleGuidanceSessionConfig",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistQbrPhase6RAKSessionConfigTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistQbrPhase6RAKTestInternal::MakeRecognitionSubsystem(TEXT("phase6r-ak-config-session"));
TestNotNull(TEXT("The recognition subsystem must be constructed for Phase 6R-AK."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
FString OpenError;
TestTrue(TEXT("The recognition session must open for the locale-guidance route."), TrainingSubsystem->OpenActiveRecognitionSession(OpenError));
TestTrue(TEXT("Opening the recognition session must not report an error."), OpenError.IsEmpty());
const FHyperTwistTrainingRecognitionSessionState SessionState =
TrainingSubsystem->GetActiveRecognitionSessionState();
TestEqual(
TEXT("The qbr webcam shell must expose the ten source-backed locale entries."),
SessionState.SessionConfig.ShellProfileDefinition.SupportedLocales.Num(),
10
);
TestEqual(
TEXT("The webcam shell must default to English."),
SessionState.SessionConfig.ShellProfileDefinition.DefaultLocaleCode,
TEXT("en")
);
TestEqual(
TEXT("The solve-explanation profile must expose the same ten source-backed locale entries."),
SessionState.SessionConfig.SolveExplanationProfileDefinition.SupportedLocales.Num(),
10
);
TestEqual(
TEXT("The solve-explanation locale overlay must keep the bounded routing mode id."),
SessionState.SessionConfig.SolveExplanationProfileDefinition.LocaleGuidanceMode,
TEXT("qbr-locale-guidance-routing-v1")
);
TestEqual(
TEXT("The solve-explanation profile must preserve the qbr starting-orientation reminder."),
SessionState.SessionConfig.SolveExplanationProfileDefinition.StartingOrientationHint,
TEXT("front: green | top: white")
);
const FHyperTwistVisionLocaleOption* EnglishLocale =
HyperTwistQbrPhase6RAKTestInternal::FindLocaleOption(
SessionState.SessionConfig.SolveExplanationProfileDefinition.SupportedLocales,
TEXT("en")
);
TestNotNull(TEXT("The English locale option must be present."), EnglishLocale);
if (EnglishLocale != nullptr)
{
TestEqual(TEXT("The English locale label must remain source-backed."), EnglishLocale->DisplayLabel, TEXT("English"));
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistQbrPhase6RAKPartialStateTest,
"HyperTwist.Permissive.Qbr.Phase6R.AK.LocaleGuidancePartialState",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistQbrPhase6RAKPartialStateTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistQbrPhase6RAKTestInternal::MakeRecognitionSubsystem(TEXT("phase6r-ak-partial-session"));
TestNotNull(TEXT("The recognition subsystem must be constructed for Phase 6R-AK."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
const FHyperTwistVisionCommitResult Result =
HyperTwistQbrPhase6RAKTestInternal::CommitFace(TrainingSubsystem, TEXT("F"), 1);
TestTrue(TEXT("The qbr webcam shell state must stay structurally valid."), Result.ShellState.IsStructurallyValid());
TestEqual(TEXT("The shell locale must default to English."), Result.ShellState.LocaleCode, TEXT("en"));
TestEqual(TEXT("The shell locale label must remain English by default."), Result.ShellState.LocaleDisplayLabel, TEXT("English"));
TestEqual(TEXT("The shell must surface ten supported locale codes."), Result.ShellState.AvailableLocaleCodes.Num(), 10);
TestTrue(TEXT("The shell must expose Spanish as a source-backed locale option."), HyperTwistQbrPhase6RAKTestInternal::HasLocaleCode(Result.ShellState.AvailableLocaleCodes, TEXT("es")));
TestTrue(TEXT("The shell must expose Farsi as a source-backed locale option."), HyperTwistQbrPhase6RAKTestInternal::HasLocaleCode(Result.ShellState.AvailableLocaleCodes, TEXT("fa")));
TestTrue(TEXT("The partial solve route must carry a structurally valid solve explanation state."), Result.SolveExplanationState.IsStructurallyValid());
TestEqual(TEXT("The solve-guidance locale must default to English."), Result.SolveExplanationState.ActiveLocaleCode, TEXT("en"));
TestEqual(TEXT("The solve-guidance locale label must remain English by default."), Result.SolveExplanationState.ActiveLocaleDisplayLabel, TEXT("English"));
TestEqual(TEXT("The bounded locale-guidance mode id must be present."), Result.SolveExplanationState.LocaleGuidanceMode, TEXT("qbr-locale-guidance-routing-v1"));
TestEqual(TEXT("The qbr starting-orientation reminder must stay visible in the state."), Result.SolveExplanationState.StartingOrientationHint, TEXT("front: green | top: white"));
TestTrue(TEXT("Locale cycling must stay visible in the bounded guidance overlay."), Result.SolveExplanationState.bLocaleCycleVisible);
TestTrue(TEXT("The starting-orientation reminder must stay visible."), Result.SolveExplanationState.bStartingOrientationHintVisible);
TestEqual(TEXT("The partial locale-guidance route must still direct the user back to capture."), Result.SolveExplanationState.RecommendedStageId, TEXT("capture-remaining-faces"));
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistQbrPhase6RAKCompleteStateTest,
"HyperTwist.Permissive.Qbr.Phase6R.AK.LocaleGuidanceCompleteState",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistQbrPhase6RAKCompleteStateTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistQbrPhase6RAKTestInternal::MakeRecognitionSubsystem(TEXT("phase6r-ak-complete-session"));
TestNotNull(TEXT("The recognition subsystem must be constructed for Phase 6R-AK."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
const TArray<FString> FaceOrder = {
TEXT("U"),
TEXT("R"),
TEXT("F"),
TEXT("D"),
TEXT("L"),
TEXT("B")
};
FHyperTwistVisionCommitResult Result;
for (int32 FaceOrdinal = 0; FaceOrdinal < FaceOrder.Num(); ++FaceOrdinal)
{
Result = HyperTwistQbrPhase6RAKTestInternal::CommitFace(
TrainingSubsystem,
FaceOrder[FaceOrdinal],
FaceOrdinal + 1
);
}
TestTrue(TEXT("The completed locale-guidance route must carry a structurally valid solve explanation state."), Result.SolveExplanationState.IsStructurallyValid());
TestTrue(TEXT("Solve guidance must unlock after the full reconstruction completes."), Result.SolveExplanationState.bReadyForExplanation);
TestEqual(TEXT("The completed locale-guidance route must recommend the orientation stage first."), Result.SolveExplanationState.RecommendedStageId, TEXT("orient-centers"));
TestEqual(TEXT("The completed locale-guidance route must preserve the active locale code."), Result.SolveExplanationState.ActiveLocaleCode, TEXT("en"));
TestEqual(TEXT("The completed locale-guidance route must preserve the active locale label."), Result.SolveExplanationState.ActiveLocaleDisplayLabel, TEXT("English"));
TestEqual(TEXT("The completed locale-guidance route must preserve the qbr starting-orientation reminder."), Result.SolveExplanationState.StartingOrientationHint, TEXT("front: green | top: white"));
TestTrue(TEXT("Locale cycling must remain visible after reconstruction completes."), Result.SolveExplanationState.bLocaleCycleVisible);
TestTrue(TEXT("The starting-orientation reminder must remain visible after reconstruction completes."), Result.SolveExplanationState.bStartingOrientationHintVisible);
return true;
}
#endif

View file

@ -0,0 +1,221 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "Engine/GameInstance.h"
#include "HyperTwistTraining/HyperTwistTrainingSubsystem.h"
#include "UObject/UnrealType.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistQbrPhase6RANTestInternal
{
FHyperTwistTrainingDeck MakeRecognitionDeck()
{
FHyperTwistTrainingDeck Deck;
Deck.DeckId = TEXT("phase6r-an/qbr-locale-presentation");
Deck.Title = TEXT("Phase 6R-AN Qbr Locale Presentation");
Deck.DeliveryModes = {
EHyperTwistTrainingDeliveryMode::RecognitionAssisted,
EHyperTwistTrainingDeliveryMode::CoachReviewed
};
FHyperTwistTrainingCase TrainingCase;
TrainingCase.CaseId = TEXT("phase6r-an-case");
TrainingCase.PuzzleId = TEXT("cube/3x3x3");
TrainingCase.PromptKind = EHyperTwistTrainingPromptKind::Recognition;
TrainingCase.PromptLabel = TEXT("Phase 6R-AN Recognition");
TrainingCase.AllowedDeliveryModes = {
EHyperTwistTrainingDeliveryMode::RecognitionAssisted,
EHyperTwistTrainingDeliveryMode::CoachReviewed
};
Deck.Cases = {TrainingCase};
return Deck;
}
void ForceMockRecognitionClient(UHyperTwistTrainingSubsystem* TrainingSubsystem)
{
if (TrainingSubsystem == nullptr)
{
return;
}
if (FStrProperty* RecognitionClientKindProperty = FindFProperty<FStrProperty>(
UHyperTwistTrainingSubsystem::StaticClass(),
TEXT("RecognitionClientKind")
))
{
RecognitionClientKindProperty->SetPropertyValue_InContainer(TrainingSubsystem, TEXT("mock"));
}
}
UHyperTwistTrainingSubsystem* MakeRecognitionSubsystem(const FString& SessionId)
{
UGameInstance* GameInstance = NewObject<UGameInstance>(GetTransientPackage());
if (GameInstance == nullptr)
{
return nullptr;
}
UHyperTwistTrainingSubsystem* TrainingSubsystem = NewObject<UHyperTwistTrainingSubsystem>(GameInstance);
if (TrainingSubsystem == nullptr)
{
return nullptr;
}
ForceMockRecognitionClient(TrainingSubsystem);
const FHyperTwistTrainingRunState RunState = TrainingSubsystem->StartTrainingRunFromDeck(
MakeRecognitionDeck(),
TEXT("phase6r-an-user"),
SessionId,
EHyperTwistTrainingDeliveryMode::RecognitionAssisted
);
return RunState.IsStructurallyValid() ? TrainingSubsystem : nullptr;
}
void SubmitPreviewFrame(
UHyperTwistTrainingSubsystem* TrainingSubsystem,
const FString& FaceId,
const int32 FrameOrdinal
)
{
FHyperTwistVisionFrameEnvelope Frame;
Frame.FrameOrdinal = FrameOrdinal;
Frame.TargetFaceHint = FaceId;
TrainingSubsystem->SubmitActiveRecognitionFrame(Frame);
}
FHyperTwistVisionCommitResult CommitFace(
UHyperTwistTrainingSubsystem* TrainingSubsystem,
const FString& FaceId,
const int32 FrameOrdinal
)
{
SubmitPreviewFrame(TrainingSubsystem, FaceId, FrameOrdinal);
FHyperTwistVisionCommitRequest Request;
Request.TargetFace = FaceId;
return TrainingSubsystem->CommitActiveRecognitionObservation(Request);
}
const FHyperTwistVisionLocaleOption* FindLocaleOption(
const TArray<FHyperTwistVisionLocaleOption>& LocaleOptions,
const FString& ExpectedLocaleCode
)
{
return LocaleOptions.FindByPredicate(
[&ExpectedLocaleCode](const FHyperTwistVisionLocaleOption& Candidate)
{
return Candidate.LocaleCode == ExpectedLocaleCode;
}
);
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistQbrPhase6RANSessionConfigTest,
"HyperTwist.Permissive.Qbr.Phase6R.AN.LocalePresentationSessionConfig",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistQbrPhase6RANSessionConfigTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistQbrPhase6RANTestInternal::MakeRecognitionSubsystem(TEXT("phase6r-an-config-session"));
TestNotNull(TEXT("The recognition subsystem must be constructed for Phase 6R-AN."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
FString OpenError;
TestTrue(TEXT("The recognition session must open for the locale-presentation route."), TrainingSubsystem->OpenActiveRecognitionSession(OpenError));
TestTrue(TEXT("Opening the recognition session must not report an error."), OpenError.IsEmpty());
const FHyperTwistTrainingRecognitionSessionState SessionState =
TrainingSubsystem->GetActiveRecognitionSessionState();
const FHyperTwistVisionLocaleOption* ArabicLocale =
HyperTwistQbrPhase6RANTestInternal::FindLocaleOption(
SessionState.SessionConfig.SolveExplanationProfileDefinition.SupportedLocales,
TEXT("ar")
);
TestNotNull(TEXT("The Arabic locale option must be present."), ArabicLocale);
if (ArabicLocale != nullptr)
{
TestEqual(TEXT("Arabic must remain right-to-left."), ArabicLocale->ScriptDirectionId, TEXT("rtl"));
TestEqual(TEXT("Arabic must keep the RTL text-flow profile."), ArabicLocale->TextFlowProfileId, TEXT("rtl-word-space-delimited"));
TestEqual(TEXT("Arabic must use the bounded locale-presentation profile."), ArabicLocale->PresentationProfileId, TEXT("qbr-locale-presentation-v1"));
TestTrue(TEXT("Arabic must keep complex text shaping enabled."), ArabicLocale->bRequiresComplexTextShaping);
TestTrue(TEXT("Arabic must keep bundled donor font shipping deferred."), ArabicLocale->bBundledFontAssetDeferred);
}
const FHyperTwistVisionLocaleOption* FarsiLocale =
HyperTwistQbrPhase6RANTestInternal::FindLocaleOption(
SessionState.SessionConfig.SolveExplanationProfileDefinition.SupportedLocales,
TEXT("fa")
);
TestNotNull(TEXT("The Farsi locale option must be present."), FarsiLocale);
if (FarsiLocale != nullptr)
{
TestEqual(TEXT("Farsi must remain right-to-left."), FarsiLocale->ScriptDirectionId, TEXT("rtl"));
TestEqual(TEXT("Farsi must keep the RTL text-flow profile."), FarsiLocale->TextFlowProfileId, TEXT("rtl-word-space-delimited"));
TestTrue(TEXT("Farsi must keep complex text shaping enabled."), FarsiLocale->bRequiresComplexTextShaping);
TestTrue(TEXT("Farsi must keep bundled donor font shipping deferred."), FarsiLocale->bBundledFontAssetDeferred);
}
const FHyperTwistVisionLocaleOption* SimplifiedChineseLocale =
HyperTwistQbrPhase6RANTestInternal::FindLocaleOption(
SessionState.SessionConfig.SolveExplanationProfileDefinition.SupportedLocales,
TEXT("zh")
);
TestNotNull(TEXT("The Simplified Chinese locale option must be present."), SimplifiedChineseLocale);
if (SimplifiedChineseLocale != nullptr)
{
TestEqual(TEXT("Simplified Chinese must keep the CJK text-flow profile."), SimplifiedChineseLocale->TextFlowProfileId, TEXT("cjk-character-wrap"));
TestEqual(TEXT("Simplified Chinese must remain left-to-right in the bounded overlay contract."), SimplifiedChineseLocale->ScriptDirectionId, TEXT("ltr"));
TestFalse(TEXT("Simplified Chinese must not require complex Arabic-style shaping."), SimplifiedChineseLocale->bRequiresComplexTextShaping);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistQbrPhase6RANActiveStateTest,
"HyperTwist.Permissive.Qbr.Phase6R.AN.LocalePresentationActiveState",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistQbrPhase6RANActiveStateTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistQbrPhase6RANTestInternal::MakeRecognitionSubsystem(TEXT("phase6r-an-state-session"));
TestNotNull(TEXT("The recognition subsystem must be constructed for Phase 6R-AN."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
const FHyperTwistVisionCommitResult Result =
HyperTwistQbrPhase6RANTestInternal::CommitFace(TrainingSubsystem, TEXT("F"), 1);
TestTrue(TEXT("The webcam shell state must stay structurally valid."), Result.ShellState.IsStructurallyValid());
TestEqual(TEXT("The default shell locale must remain English."), Result.ShellState.LocaleCode, TEXT("en"));
TestEqual(TEXT("The active shell locale must remain left-to-right by default."), Result.ShellState.ActiveLocaleScriptDirectionId, TEXT("ltr"));
TestEqual(TEXT("The active shell locale must keep the word-space text-flow profile by default."), Result.ShellState.ActiveLocaleTextFlowProfileId, TEXT("word-space-delimited"));
TestEqual(TEXT("The shell must surface the bounded locale-presentation profile id."), Result.ShellState.ActiveLocalePresentationProfileId, TEXT("qbr-locale-presentation-v1"));
TestFalse(TEXT("The default English shell locale must not require complex text shaping."), Result.ShellState.bActiveLocaleRequiresComplexTextShaping);
TestTrue(TEXT("The shell must keep bundled donor font shipping deferred."), Result.ShellState.bBundledFontAssetDeferred);
TestTrue(TEXT("The solve-guidance state must stay structurally valid."), Result.SolveExplanationState.IsStructurallyValid());
TestEqual(TEXT("The active solve locale must remain English by default."), Result.SolveExplanationState.ActiveLocaleCode, TEXT("en"));
TestEqual(TEXT("The active solve locale must remain left-to-right by default."), Result.SolveExplanationState.ActiveLocaleScriptDirectionId, TEXT("ltr"));
TestEqual(TEXT("The active solve locale must keep the word-space text-flow profile by default."), Result.SolveExplanationState.ActiveLocaleTextFlowProfileId, TEXT("word-space-delimited"));
TestEqual(TEXT("The solve guidance state must surface the bounded locale-presentation profile id."), Result.SolveExplanationState.ActiveLocalePresentationProfileId, TEXT("qbr-locale-presentation-v1"));
TestFalse(TEXT("The default English solve locale must not require complex text shaping."), Result.SolveExplanationState.bActiveLocaleRequiresComplexTextShaping);
TestTrue(TEXT("The solve guidance state must keep bundled donor font shipping deferred."), Result.SolveExplanationState.bBundledFontAssetDeferred);
return true;
}
#endif

View file

@ -0,0 +1,287 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "Engine/GameInstance.h"
#include "HyperTwistTraining/HyperTwistTrainingSubsystem.h"
#include "UObject/UnrealType.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistQbrPhase6RASTestInternal
{
FHyperTwistTrainingDeck MakeRecognitionDeck()
{
FHyperTwistTrainingDeck Deck;
Deck.DeckId = TEXT("phase6r-as/qbr-font-review");
Deck.Title = TEXT("Phase 6R-AS Qbr Font Review");
Deck.DeliveryModes = {
EHyperTwistTrainingDeliveryMode::RecognitionAssisted,
EHyperTwistTrainingDeliveryMode::CoachReviewed
};
FHyperTwistTrainingCase TrainingCase;
TrainingCase.CaseId = TEXT("phase6r-as-case");
TrainingCase.PuzzleId = TEXT("cube/3x3x3");
TrainingCase.PromptKind = EHyperTwistTrainingPromptKind::Recognition;
TrainingCase.PromptLabel = TEXT("Phase 6R-AS Recognition");
TrainingCase.AllowedDeliveryModes = {
EHyperTwistTrainingDeliveryMode::RecognitionAssisted,
EHyperTwistTrainingDeliveryMode::CoachReviewed
};
Deck.Cases = {TrainingCase};
return Deck;
}
void ForceMockRecognitionClient(UHyperTwistTrainingSubsystem* TrainingSubsystem)
{
if (TrainingSubsystem == nullptr)
{
return;
}
if (FStrProperty* RecognitionClientKindProperty = FindFProperty<FStrProperty>(
UHyperTwistTrainingSubsystem::StaticClass(),
TEXT("RecognitionClientKind")
))
{
RecognitionClientKindProperty->SetPropertyValue_InContainer(TrainingSubsystem, TEXT("mock"));
}
}
UHyperTwistTrainingSubsystem* MakeRecognitionSubsystem(const FString& SessionId)
{
UGameInstance* GameInstance = NewObject<UGameInstance>(GetTransientPackage());
if (GameInstance == nullptr)
{
return nullptr;
}
UHyperTwistTrainingSubsystem* TrainingSubsystem = NewObject<UHyperTwistTrainingSubsystem>(GameInstance);
if (TrainingSubsystem == nullptr)
{
return nullptr;
}
ForceMockRecognitionClient(TrainingSubsystem);
const FHyperTwistTrainingRunState RunState = TrainingSubsystem->StartTrainingRunFromDeck(
MakeRecognitionDeck(),
TEXT("phase6r-as-user"),
SessionId,
EHyperTwistTrainingDeliveryMode::RecognitionAssisted
);
return RunState.IsStructurallyValid() ? TrainingSubsystem : nullptr;
}
void SubmitPreviewFrame(
UHyperTwistTrainingSubsystem* TrainingSubsystem,
const FString& FaceId,
const int32 FrameOrdinal
)
{
FHyperTwistVisionFrameEnvelope Frame;
Frame.FrameOrdinal = FrameOrdinal;
Frame.TargetFaceHint = FaceId;
TrainingSubsystem->SubmitActiveRecognitionFrame(Frame);
}
FHyperTwistVisionCommitResult CommitFace(
UHyperTwistTrainingSubsystem* TrainingSubsystem,
const FString& FaceId,
const int32 FrameOrdinal
)
{
SubmitPreviewFrame(TrainingSubsystem, FaceId, FrameOrdinal);
FHyperTwistVisionCommitRequest Request;
Request.TargetFace = FaceId;
return TrainingSubsystem->CommitActiveRecognitionObservation(Request);
}
const FHyperTwistVisionLocaleOption* FindLocaleOption(
const TArray<FHyperTwistVisionLocaleOption>& LocaleOptions,
const FString& ExpectedLocaleCode
)
{
return LocaleOptions.FindByPredicate(
[&ExpectedLocaleCode](const FHyperTwistVisionLocaleOption& Candidate)
{
return Candidate.LocaleCode == ExpectedLocaleCode;
}
);
}
const FHyperTwistVisionFontReviewDescriptor* FindFontReviewDescriptor(
const TArray<FHyperTwistVisionFontReviewDescriptor>& Reviews,
const FString& ExpectedDescriptorId
)
{
return Reviews.FindByPredicate(
[&ExpectedDescriptorId](const FHyperTwistVisionFontReviewDescriptor& Candidate)
{
return Candidate.FontReviewDescriptorId == ExpectedDescriptorId;
}
);
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistQbrPhase6RASSessionConfigTest,
"HyperTwist.Permissive.Qbr.Phase6R.AS.BundledFontReviewSessionConfig",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistQbrPhase6RASSessionConfigTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistQbrPhase6RASTestInternal::MakeRecognitionSubsystem(TEXT("phase6r-as-config-session"));
TestNotNull(TEXT("The recognition subsystem must be constructed for Phase 6R-AS."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
FString OpenError;
TestTrue(TEXT("The recognition session must open for the font-review route."), TrainingSubsystem->OpenActiveRecognitionSession(OpenError));
TestTrue(TEXT("Opening the recognition session must not report an error."), OpenError.IsEmpty());
const FHyperTwistTrainingRecognitionSessionState SessionState =
TrainingSubsystem->GetActiveRecognitionSessionState();
TestEqual(
TEXT("The webcam shell must expose the bounded font review profile id."),
SessionState.SessionConfig.ShellProfileDefinition.FontReviewProfileId,
TEXT("qbr-bundled-font-review-v1")
);
TestTrue(
TEXT("The webcam shell font review profile must stay structurally valid."),
SessionState.SessionConfig.ShellProfileDefinition.FontReviewProfileDefinition.IsStructurallyValid()
);
TestEqual(
TEXT("The webcam shell must expose five bounded font review descriptors."),
SessionState.SessionConfig.ShellProfileDefinition.SupportedFontReviews.Num(),
5
);
TestEqual(
TEXT("The solve explanation profile must expose the bounded font review profile id."),
SessionState.SessionConfig.SolveExplanationProfileDefinition.FontReviewProfileId,
TEXT("qbr-bundled-font-review-v1")
);
TestTrue(
TEXT("The solve explanation font review profile must stay structurally valid."),
SessionState.SessionConfig.SolveExplanationProfileDefinition.FontReviewProfileDefinition.IsStructurallyValid()
);
TestEqual(
TEXT("The solve explanation profile must expose five bounded font review descriptors."),
SessionState.SessionConfig.SolveExplanationProfileDefinition.SupportedFontReviews.Num(),
5
);
const FHyperTwistVisionLocaleOption* ArabicLocale =
HyperTwistQbrPhase6RASTestInternal::FindLocaleOption(
SessionState.SessionConfig.SolveExplanationProfileDefinition.SupportedLocales,
TEXT("ar")
);
TestNotNull(TEXT("The Arabic locale option must be present."), ArabicLocale);
if (ArabicLocale != nullptr)
{
TestEqual(
TEXT("Arabic must map to the bounded Arabic font review descriptor."),
ArabicLocale->FontReviewDescriptorId,
TEXT("font-review/qbr/arabic-core")
);
}
const FHyperTwistVisionLocaleOption* SimplifiedChineseLocale =
HyperTwistQbrPhase6RASTestInternal::FindLocaleOption(
SessionState.SessionConfig.SolveExplanationProfileDefinition.SupportedLocales,
TEXT("zh")
);
TestNotNull(TEXT("The Simplified Chinese locale option must be present."), SimplifiedChineseLocale);
if (SimplifiedChineseLocale != nullptr)
{
TestEqual(
TEXT("Simplified Chinese must map to the bounded CJK simplified font review descriptor."),
SimplifiedChineseLocale->FontReviewDescriptorId,
TEXT("font-review/qbr/cjk-simplified")
);
}
const FHyperTwistVisionFontReviewDescriptor* ArabicFontReview =
HyperTwistQbrPhase6RASTestInternal::FindFontReviewDescriptor(
SessionState.SessionConfig.SolveExplanationProfileDefinition.SupportedFontReviews,
TEXT("font-review/qbr/arabic-core")
);
TestNotNull(TEXT("The Arabic font review descriptor must be present."), ArabicFontReview);
if (ArabicFontReview != nullptr)
{
TestEqual(
TEXT("The Arabic descriptor must preserve the complex shaping review profile."),
ArabicFontReview->ScriptCoverageProfileId,
TEXT("rtl-arabic-complex-shaping")
);
TestFalse(
TEXT("The Arabic descriptor must not imply bundled font redistribution."),
ArabicFontReview->bBundledWithCodeDistribution
);
TestTrue(
TEXT("The Arabic descriptor must keep standalone donor rendering deferred."),
ArabicFontReview->bStandaloneDonorRenderingDeferred
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistQbrPhase6RASActiveStateTest,
"HyperTwist.Permissive.Qbr.Phase6R.AS.BundledFontReviewActiveState",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistQbrPhase6RASActiveStateTest::RunTest(const FString& Parameters)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistQbrPhase6RASTestInternal::MakeRecognitionSubsystem(TEXT("phase6r-as-state-session"));
TestNotNull(TEXT("The recognition subsystem must be constructed for Phase 6R-AS."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
const FHyperTwistVisionCommitResult Result =
HyperTwistQbrPhase6RASTestInternal::CommitFace(TrainingSubsystem, TEXT("F"), 1);
TestTrue(TEXT("The webcam shell state must stay structurally valid."), Result.ShellState.IsStructurallyValid());
TestEqual(TEXT("The default shell locale must remain English."), Result.ShellState.LocaleCode, TEXT("en"));
TestEqual(
TEXT("The shell state must preserve the bounded font review profile id."),
Result.ShellState.FontReviewProfileId,
TEXT("qbr-bundled-font-review-v1")
);
TestEqual(
TEXT("The default shell locale must map to the bounded Latin font review descriptor."),
Result.ShellState.ActiveFontReviewDescriptorId,
TEXT("font-review/qbr/latin-core")
);
TestTrue(TEXT("The shell must keep bundled donor font shipping deferred."), Result.ShellState.bBundledFontAssetDeferred);
TestTrue(TEXT("The solve-guidance state must stay structurally valid."), Result.SolveExplanationState.IsStructurallyValid());
TestEqual(TEXT("The default solve locale must remain English."), Result.SolveExplanationState.ActiveLocaleCode, TEXT("en"));
TestEqual(
TEXT("The solve state must preserve the bounded font review profile id."),
Result.SolveExplanationState.FontReviewProfileId,
TEXT("qbr-bundled-font-review-v1")
);
TestEqual(
TEXT("The default solve locale must map to the bounded Latin font review descriptor."),
Result.SolveExplanationState.ActiveFontReviewDescriptorId,
TEXT("font-review/qbr/latin-core")
);
TestTrue(TEXT("The solve guidance state must keep bundled donor font shipping deferred."), Result.SolveExplanationState.bBundledFontAssetDeferred);
return true;
}
#endif

View file

@ -0,0 +1,216 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "Engine/GameInstance.h"
#include "HyperTwistTraining/HyperTwistTrainingSubsystem.h"
#include "UObject/UnrealType.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistRubixCubeSolverPhase6RATTestInternal
{
FHyperTwistTrainingDeck MakeRecognitionDeck()
{
FHyperTwistTrainingDeck Deck;
Deck.DeckId = TEXT("phase6r-at/rubix-cube-solver-browser-asset-review");
Deck.Title = TEXT("Phase 6R-AT Rubix Cube Solver Browser Asset Review");
Deck.DeliveryModes = {
EHyperTwistTrainingDeliveryMode::RecognitionAssisted,
EHyperTwistTrainingDeliveryMode::CoachReviewed
};
FHyperTwistTrainingCase TrainingCase;
TrainingCase.CaseId = TEXT("phase6r-at-case");
TrainingCase.PuzzleId = TEXT("cube/3x3x3");
TrainingCase.PromptKind = EHyperTwistTrainingPromptKind::Recognition;
TrainingCase.PromptLabel = TEXT("Phase 6R-AT Recognition");
TrainingCase.AllowedDeliveryModes = {
EHyperTwistTrainingDeliveryMode::RecognitionAssisted,
EHyperTwistTrainingDeliveryMode::CoachReviewed
};
Deck.Cases = {TrainingCase};
return Deck;
}
void ForceMockRecognitionClient(UHyperTwistTrainingSubsystem* TrainingSubsystem)
{
if (TrainingSubsystem == nullptr)
{
return;
}
if (FStrProperty* RecognitionClientKindProperty = FindFProperty<FStrProperty>(
UHyperTwistTrainingSubsystem::StaticClass(),
TEXT("RecognitionClientKind")
))
{
RecognitionClientKindProperty->SetPropertyValue_InContainer(TrainingSubsystem, TEXT("mock"));
}
}
UHyperTwistTrainingSubsystem* MakeRecognitionSubsystem(const FString& SessionId)
{
UGameInstance* GameInstance = NewObject<UGameInstance>(GetTransientPackage());
if (GameInstance == nullptr)
{
return nullptr;
}
UHyperTwistTrainingSubsystem* TrainingSubsystem = NewObject<UHyperTwistTrainingSubsystem>(GameInstance);
if (TrainingSubsystem == nullptr)
{
return nullptr;
}
ForceMockRecognitionClient(TrainingSubsystem);
const FHyperTwistTrainingRunState RunState = TrainingSubsystem->StartTrainingRunFromDeck(
MakeRecognitionDeck(),
TEXT("phase6r-at-user"),
SessionId,
EHyperTwistTrainingDeliveryMode::RecognitionAssisted
);
return RunState.IsStructurallyValid() ? TrainingSubsystem : nullptr;
}
const FHyperTwistVisionBrowserAssetReviewDescriptor* FindBrowserAssetReviewDescriptor(
const TArray<FHyperTwistVisionBrowserAssetReviewDescriptor>& Descriptors,
const FString& ExpectedDescriptorId
)
{
return Descriptors.FindByPredicate(
[&ExpectedDescriptorId](const FHyperTwistVisionBrowserAssetReviewDescriptor& Candidate)
{
return Candidate.BrowserAssetReviewDescriptorId == ExpectedDescriptorId;
}
);
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistRubixCubeSolverPhase6RATBrowserAssetReviewSessionConfigTest,
"HyperTwist.Permissive.RubixCubeSolver.Phase6R.AT.BrowserAssetReviewSessionConfig",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistRubixCubeSolverPhase6RATBrowserAssetReviewSessionConfigTest::RunTest(
const FString& Parameters
)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistRubixCubeSolverPhase6RATTestInternal::MakeRecognitionSubsystem(
TEXT("phase6r-at-config-session")
);
TestNotNull(TEXT("The recognition subsystem must be constructed for Phase 6R-AT."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
FString OpenError;
TestTrue(
TEXT("The recognition session must open for the browser-asset review route."),
TrainingSubsystem->OpenActiveRecognitionSession(OpenError)
);
TestTrue(TEXT("Opening the recognition session must not report an error."), OpenError.IsEmpty());
const FHyperTwistTrainingRecognitionSessionState SessionState =
TrainingSubsystem->GetActiveRecognitionSessionState();
TestEqual(
TEXT("The browser shell must expose the bounded browser asset review profile id."),
SessionState.SessionConfig.BrowserShellProfileDefinition.BrowserAssetReviewProfileId,
TEXT("rubix-browser-asset-review-v1")
);
TestTrue(
TEXT("The browser asset review profile must stay structurally valid."),
SessionState.SessionConfig.BrowserShellProfileDefinition.BrowserAssetReviewProfileDefinition
.IsStructurallyValid()
);
TestEqual(
TEXT("The browser shell must expose one bounded visualization asset review descriptor."),
SessionState.SessionConfig.BrowserShellProfileDefinition.SupportedBrowserAssetReviews.Num(),
1
);
TestEqual(
TEXT("The browser shell must preserve the bounded default asset review descriptor id."),
SessionState.SessionConfig.BrowserShellProfileDefinition.DefaultBrowserAssetReviewDescriptorId,
TEXT("browser-asset-review/rubix-cube-solver/twistysim")
);
const FHyperTwistVisionBrowserAssetReviewDescriptor* Descriptor =
HyperTwistRubixCubeSolverPhase6RATTestInternal::FindBrowserAssetReviewDescriptor(
SessionState.SessionConfig.BrowserShellProfileDefinition.SupportedBrowserAssetReviews,
TEXT("browser-asset-review/rubix-cube-solver/twistysim")
);
TestNotNull(TEXT("The twistysim review descriptor must be present."), Descriptor);
if (Descriptor != nullptr)
{
TestEqual(
TEXT("The twistysim review descriptor must preserve the upstream asset path."),
Descriptor->AssetPathHint,
TEXT("frontend/lib/twistysim.min.js")
);
TestFalse(
TEXT("The twistysim review descriptor must not imply bundled redistribution."),
Descriptor->bBundledWithCodeDistribution
);
TestTrue(
TEXT("The twistysim review descriptor must keep playback visualization ownership deferred."),
Descriptor->bPlaybackVisualizationDeferred
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistRubixCubeSolverPhase6RATBrowserAssetReviewPreviewStateTest,
"HyperTwist.Permissive.RubixCubeSolver.Phase6R.AT.BrowserAssetReviewPreviewState",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistRubixCubeSolverPhase6RATBrowserAssetReviewPreviewStateTest::RunTest(
const FString& Parameters
)
{
UHyperTwistTrainingSubsystem* TrainingSubsystem =
HyperTwistRubixCubeSolverPhase6RATTestInternal::MakeRecognitionSubsystem(
TEXT("phase6r-at-preview-session")
);
TestNotNull(TEXT("The recognition subsystem must be constructed for Phase 6R-AT."), TrainingSubsystem);
if (TrainingSubsystem == nullptr)
{
return false;
}
FHyperTwistVisionFrameEnvelope Frame;
Frame.TargetFaceHint = TEXT("F");
const FHyperTwistVisionPreviewResult Result = TrainingSubsystem->SubmitActiveRecognitionFrame(Frame);
TestTrue(
TEXT("The preview result must carry a structurally valid browser shell state."),
Result.BrowserShellState.IsStructurallyValid()
);
TestEqual(
TEXT("The preview browser shell must preserve the bounded browser asset review profile id."),
Result.BrowserShellState.BrowserAssetReviewProfileId,
TEXT("rubix-browser-asset-review-v1")
);
TestEqual(
TEXT("The preview browser shell must preserve the bounded active asset review descriptor id."),
Result.BrowserShellState.ActiveBrowserAssetReviewDescriptorId,
TEXT("browser-asset-review/rubix-cube-solver/twistysim")
);
TestTrue(
TEXT("The preview browser shell must keep bundled browser asset shipping deferred."),
Result.BrowserShellState.bBundledBrowserAssetDeferred
);
TestTrue(
TEXT("The preview browser shell must still keep playback deferred in this packet."),
Result.BrowserShellState.bPlaybackDeferred
);
return true;
}
#endif

View file

@ -73,9 +73,9 @@ bool FHyperTwistSkillPhaseS1ARegistryManifestTest::RunTest(const FString& Parame
RegistryState.IsStructurallyValid() RegistryState.IsStructurallyValid()
); );
TestEqual( TestEqual(
TEXT("The sample S1-A registry must expose nineteen declared skills after S4-C lands."), TEXT("The sample S1-A registry must expose forty declared skills after S7-C lands."),
RegistryState.SkillCount, RegistryState.SkillCount,
19 40
); );
TestTrue( TestTrue(
TEXT("The S1-A registry must avoid ad hoc metadata."), TEXT("The S1-A registry must avoid ad hoc metadata."),
@ -86,12 +86,12 @@ bool FHyperTwistSkillPhaseS1ARegistryManifestTest::RunTest(const FString& Parame
RegistryState.bAllSkillsOptionalAssistive RegistryState.bAllSkillsOptionalAssistive
); );
TestEqual( TestEqual(
TEXT("The sample S1-A registry must keep sixteen implemented skill entries after S4-C lands."), TEXT("The sample S1-A registry must keep thirty-seven implemented skill entries after S7-C lands."),
HyperTwistSkillPhaseS1ATestInternal::FindStatusCount( HyperTwistSkillPhaseS1ATestInternal::FindStatusCount(
RegistryState, RegistryState,
EHyperTwistSkillStatus::ImplementedNow EHyperTwistSkillStatus::ImplementedNow
), ),
16 37
); );
TestEqual( TestEqual(
TEXT("The sample S1-A registry must keep one command-contract-pending entry for note capture."), TEXT("The sample S1-A registry must keep one command-contract-pending entry for note capture."),
@ -117,6 +117,14 @@ bool FHyperTwistSkillPhaseS1ARegistryManifestTest::RunTest(const FString& Parame
), ),
1 1
); );
TestEqual(
TEXT("The sample S1-A registry must expose eight analysis/review-family entries after S5-C lands."),
HyperTwistSkillPhaseS1ATestInternal::FindFamilyCount(
RegistryState,
EHyperTwistSkillFamily::AnalysisReview
),
8
);
TestEqual( TestEqual(
TEXT("The sample S1-A registry must expose eight memory-continuity-family entries after S3-C lands."), TEXT("The sample S1-A registry must expose eight memory-continuity-family entries after S3-C lands."),
HyperTwistSkillPhaseS1ATestInternal::FindFamilyCount( HyperTwistSkillPhaseS1ATestInternal::FindFamilyCount(
@ -133,6 +141,45 @@ bool FHyperTwistSkillPhaseS1ARegistryManifestTest::RunTest(const FString& Parame
), ),
6 6
); );
TestEqual(
TEXT("The sample S1-A registry must expose seven provider/operations-family entries after S6-B lands."),
HyperTwistSkillPhaseS1ATestInternal::FindFamilyCount(
RegistryState,
EHyperTwistSkillFamily::ProviderOperations
),
7
);
TestEqual(
TEXT("The sample S1-A registry must expose nine domain/creative-family entries after S7-C lands."),
HyperTwistSkillPhaseS1ATestInternal::FindFamilyCount(
RegistryState,
EHyperTwistSkillFamily::DomainCreative
),
9
);
const FHyperTwistSkillManifestEntry* ReplayExplainerSkill =
HyperTwistSkillPhaseS1ATestInternal::FindSkillById(
RegistryState,
TEXT("skill/compose-replay-explainer-pack")
);
TestNotNull(
TEXT("The compose-replay-explainer-pack skill entry must exist."),
ReplayExplainerSkill
);
if (ReplayExplainerSkill != nullptr)
{
TestEqual(
TEXT("The compose-replay-explainer-pack skill must be implemented now."),
ReplayExplainerSkill->Status,
EHyperTwistSkillStatus::ImplementedNow
);
TestEqual(
TEXT("The compose-replay-explainer-pack skill must bind to the first-party replay-explainer pack service."),
ReplayExplainerSkill->CommandBindings[0].ServiceBindingId,
FString(TEXT("service/skills/compose-replay-explainer-pack"))
);
}
const FHyperTwistSkillManifestEntry* GovernanceSkill = const FHyperTwistSkillManifestEntry* GovernanceSkill =
HyperTwistSkillPhaseS1ATestInternal::FindSkillById( HyperTwistSkillPhaseS1ATestInternal::FindSkillById(
@ -207,6 +254,144 @@ bool FHyperTwistSkillPhaseS1ARegistryManifestTest::RunTest(const FString& Parame
); );
} }
const FHyperTwistSkillManifestEntry* ImplementationReviewSkill =
HyperTwistSkillPhaseS1ATestInternal::FindSkillById(
RegistryState,
TEXT("skill/review-implementation")
);
TestNotNull(
TEXT("The review-implementation skill entry must exist."),
ImplementationReviewSkill
);
if (ImplementationReviewSkill != nullptr)
{
TestEqual(
TEXT("The review-implementation skill must be implemented now."),
ImplementationReviewSkill->Status,
EHyperTwistSkillStatus::ImplementedNow
);
TestEqual(
TEXT("The review-implementation skill must bind to the first-party implementation-review service."),
ImplementationReviewSkill->CommandBindings[0].ServiceBindingId,
FString(TEXT("service/specs/review-implementation"))
);
}
const FHyperTwistSkillManifestEntry* PlanSynthesisSkill =
HyperTwistSkillPhaseS1ATestInternal::FindSkillById(
RegistryState,
TEXT("skill/synthesize-plan")
);
TestNotNull(
TEXT("The synthesize-plan skill entry must exist."),
PlanSynthesisSkill
);
if (PlanSynthesisSkill != nullptr)
{
TestEqual(
TEXT("The synthesize-plan skill must be implemented now."),
PlanSynthesisSkill->Status,
EHyperTwistSkillStatus::ImplementedNow
);
TestEqual(
TEXT("The synthesize-plan skill must bind to the first-party plan-synthesis service."),
PlanSynthesisSkill->CommandBindings[0].ServiceBindingId,
FString(TEXT("service/skills/synthesize-plan"))
);
}
const FHyperTwistSkillManifestEntry* ProviderProfileSkill =
HyperTwistSkillPhaseS1ATestInternal::FindSkillById(
RegistryState,
TEXT("skill/inspect-provider-profile")
);
TestNotNull(
TEXT("The inspect-provider-profile skill entry must exist."),
ProviderProfileSkill
);
if (ProviderProfileSkill != nullptr)
{
TestEqual(
TEXT("The inspect-provider-profile skill must be implemented now."),
ProviderProfileSkill->Status,
EHyperTwistSkillStatus::ImplementedNow
);
TestEqual(
TEXT("The inspect-provider-profile skill must bind to the first-party provider-profile inspection service."),
ProviderProfileSkill->CommandBindings[0].ServiceBindingId,
FString(TEXT("service/skills/inspect-provider-profile"))
);
}
const FHyperTwistSkillManifestEntry* UsageAuditSkill =
HyperTwistSkillPhaseS1ATestInternal::FindSkillById(
RegistryState,
TEXT("skill/audit-provider-usage")
);
TestNotNull(
TEXT("The audit-provider-usage skill entry must exist."),
UsageAuditSkill
);
if (UsageAuditSkill != nullptr)
{
TestEqual(
TEXT("The audit-provider-usage skill must be implemented now."),
UsageAuditSkill->Status,
EHyperTwistSkillStatus::ImplementedNow
);
TestEqual(
TEXT("The audit-provider-usage skill must bind to the first-party provider-usage audit service."),
UsageAuditSkill->CommandBindings[0].ServiceBindingId,
FString(TEXT("service/skills/audit-provider-usage"))
);
}
const FHyperTwistSkillManifestEntry* DomainPackagingSkill =
HyperTwistSkillPhaseS1ATestInternal::FindSkillById(
RegistryState,
TEXT("skill/specify-domain-packaging")
);
TestNotNull(
TEXT("The specify-domain-packaging skill entry must exist."),
DomainPackagingSkill
);
if (DomainPackagingSkill != nullptr)
{
TestEqual(
TEXT("The specify-domain-packaging skill must be implemented now."),
DomainPackagingSkill->Status,
EHyperTwistSkillStatus::ImplementedNow
);
TestEqual(
TEXT("The specify-domain-packaging skill must bind to the first-party domain-packaging service."),
DomainPackagingSkill->CommandBindings[0].ServiceBindingId,
FString(TEXT("service/skills/specify-domain-packaging"))
);
}
const FHyperTwistSkillManifestEntry* TrainingReplayPackSkill =
HyperTwistSkillPhaseS1ATestInternal::FindSkillById(
RegistryState,
TEXT("skill/review-training-replay-pack")
);
TestNotNull(
TEXT("The review-training-replay-pack skill entry must exist."),
TrainingReplayPackSkill
);
if (TrainingReplayPackSkill != nullptr)
{
TestEqual(
TEXT("The review-training-replay-pack skill must be implemented now."),
TrainingReplayPackSkill->Status,
EHyperTwistSkillStatus::ImplementedNow
);
TestEqual(
TEXT("The review-training-replay-pack skill must bind to the first-party training-replay review pack service."),
TrainingReplayPackSkill->CommandBindings[0].ServiceBindingId,
FString(TEXT("service/skills/review-training-replay-pack"))
);
}
const FHyperTwistSkillManifestEntry* DocsExtractionSkill = const FHyperTwistSkillManifestEntry* DocsExtractionSkill =
HyperTwistSkillPhaseS1ATestInternal::FindSkillById( HyperTwistSkillPhaseS1ATestInternal::FindSkillById(
RegistryState, RegistryState,
@ -276,6 +461,29 @@ bool FHyperTwistSkillPhaseS1ARegistryManifestTest::RunTest(const FString& Parame
); );
} }
const FHyperTwistSkillManifestEntry* WorkflowReviewSkill =
HyperTwistSkillPhaseS1ATestInternal::FindSkillById(
RegistryState,
TEXT("skill/review-proposal")
);
TestNotNull(
TEXT("The review-proposal skill entry must exist."),
WorkflowReviewSkill
);
if (WorkflowReviewSkill != nullptr)
{
TestEqual(
TEXT("The review-proposal skill must be implemented now."),
WorkflowReviewSkill->Status,
EHyperTwistSkillStatus::ImplementedNow
);
TestEqual(
TEXT("The review-proposal skill must bind to the first-party proposal-review service."),
WorkflowReviewSkill->CommandBindings[0].ServiceBindingId,
FString(TEXT("service/skills/review-proposal"))
);
}
return true; return true;
} }

View file

@ -71,9 +71,9 @@ bool FHyperTwistSkillPhaseS1BSettingsVisibilityTest::RunTest(
ControlState.MasterSwitch.bImmediateMenuControlExposed ControlState.MasterSwitch.bImmediateMenuControlExposed
); );
TestEqual( TestEqual(
TEXT("The sample S1-B control state must preserve all nineteen installed skills after S4-C lands."), TEXT("The sample S1-B control state must preserve all forty installed skills after S7-C lands."),
ControlState.SkillCount, ControlState.SkillCount,
19 40
); );
TestEqual( TestEqual(
TEXT("The default S1-B control state must keep one effective enabled skill."), TEXT("The default S1-B control state must keep one effective enabled skill."),
@ -212,6 +212,214 @@ bool FHyperTwistSkillPhaseS1BSettingsVisibilityTest::RunTest(
); );
} }
const FHyperTwistSkillControlStateEntry* WorkflowReviewState =
HyperTwistSkillPhaseS1BTestInternal::FindSkillStateById(
ControlState,
TEXT("skill/review-proposal")
);
TestNotNull(
TEXT("The review-proposal skill state must exist."),
WorkflowReviewState
);
if (WorkflowReviewState != nullptr)
{
TestFalse(
TEXT("The review-proposal skill must remain opt-in by default."),
WorkflowReviewState->bEffectiveEnabled
);
TestTrue(
TEXT("The review-proposal skill must remain visible by default."),
WorkflowReviewState->bEffectiveVisible
);
TestEqual(
TEXT("The review-proposal skill must use the analysis/review visibility group."),
WorkflowReviewState->VisibilityGroupId,
TEXT("skill-group/analysis-review")
);
}
const FHyperTwistSkillControlStateEntry* ReplayExplainerState =
HyperTwistSkillPhaseS1BTestInternal::FindSkillStateById(
ControlState,
TEXT("skill/compose-replay-explainer-pack")
);
TestNotNull(
TEXT("The compose-replay-explainer-pack skill state must exist."),
ReplayExplainerState
);
if (ReplayExplainerState != nullptr)
{
TestFalse(
TEXT("The compose-replay-explainer-pack skill must remain opt-in by default."),
ReplayExplainerState->bEffectiveEnabled
);
TestTrue(
TEXT("The compose-replay-explainer-pack skill must remain visible by default."),
ReplayExplainerState->bEffectiveVisible
);
TestEqual(
TEXT("The compose-replay-explainer-pack skill must use the domain/creative visibility group."),
ReplayExplainerState->VisibilityGroupId,
TEXT("skill-group/domain-creative")
);
}
const FHyperTwistSkillControlStateEntry* ImplementationReviewState =
HyperTwistSkillPhaseS1BTestInternal::FindSkillStateById(
ControlState,
TEXT("skill/review-implementation")
);
TestNotNull(
TEXT("The review-implementation skill state must exist."),
ImplementationReviewState
);
if (ImplementationReviewState != nullptr)
{
TestFalse(
TEXT("The review-implementation skill must remain opt-in by default."),
ImplementationReviewState->bEffectiveEnabled
);
TestTrue(
TEXT("The review-implementation skill must remain visible by default."),
ImplementationReviewState->bEffectiveVisible
);
TestEqual(
TEXT("The review-implementation skill must use the analysis/review visibility group."),
ImplementationReviewState->VisibilityGroupId,
TEXT("skill-group/analysis-review")
);
}
const FHyperTwistSkillControlStateEntry* PlanSynthesisState =
HyperTwistSkillPhaseS1BTestInternal::FindSkillStateById(
ControlState,
TEXT("skill/synthesize-plan")
);
TestNotNull(
TEXT("The synthesize-plan skill state must exist."),
PlanSynthesisState
);
if (PlanSynthesisState != nullptr)
{
TestFalse(
TEXT("The synthesize-plan skill must remain opt-in by default."),
PlanSynthesisState->bEffectiveEnabled
);
TestTrue(
TEXT("The synthesize-plan skill must remain visible by default."),
PlanSynthesisState->bEffectiveVisible
);
TestEqual(
TEXT("The synthesize-plan skill must use the analysis/review visibility group."),
PlanSynthesisState->VisibilityGroupId,
TEXT("skill-group/analysis-review")
);
}
const FHyperTwistSkillControlStateEntry* ProviderProfileState =
HyperTwistSkillPhaseS1BTestInternal::FindSkillStateById(
ControlState,
TEXT("skill/inspect-provider-profile")
);
TestNotNull(
TEXT("The inspect-provider-profile skill state must exist."),
ProviderProfileState
);
if (ProviderProfileState != nullptr)
{
TestFalse(
TEXT("The inspect-provider-profile skill must remain opt-in by default."),
ProviderProfileState->bEffectiveEnabled
);
TestTrue(
TEXT("The inspect-provider-profile skill must remain visible by default."),
ProviderProfileState->bEffectiveVisible
);
TestEqual(
TEXT("The inspect-provider-profile skill must use the provider-operations visibility group."),
ProviderProfileState->VisibilityGroupId,
TEXT("skill-group/provider-operations")
);
}
const FHyperTwistSkillControlStateEntry* UsageAuditState =
HyperTwistSkillPhaseS1BTestInternal::FindSkillStateById(
ControlState,
TEXT("skill/audit-provider-usage")
);
TestNotNull(
TEXT("The audit-provider-usage skill state must exist."),
UsageAuditState
);
if (UsageAuditState != nullptr)
{
TestFalse(
TEXT("The audit-provider-usage skill must remain opt-in by default."),
UsageAuditState->bEffectiveEnabled
);
TestTrue(
TEXT("The audit-provider-usage skill must remain visible by default."),
UsageAuditState->bEffectiveVisible
);
TestEqual(
TEXT("The audit-provider-usage skill must use the provider-operations visibility group."),
UsageAuditState->VisibilityGroupId,
TEXT("skill-group/provider-operations")
);
}
const FHyperTwistSkillControlStateEntry* DomainPackagingState =
HyperTwistSkillPhaseS1BTestInternal::FindSkillStateById(
ControlState,
TEXT("skill/specify-domain-packaging")
);
TestNotNull(
TEXT("The specify-domain-packaging skill state must exist."),
DomainPackagingState
);
if (DomainPackagingState != nullptr)
{
TestFalse(
TEXT("The specify-domain-packaging skill must remain opt-in by default."),
DomainPackagingState->bEffectiveEnabled
);
TestTrue(
TEXT("The specify-domain-packaging skill must remain visible by default."),
DomainPackagingState->bEffectiveVisible
);
TestEqual(
TEXT("The specify-domain-packaging skill must use the domain-creative visibility group."),
DomainPackagingState->VisibilityGroupId,
TEXT("skill-group/domain-creative")
);
}
const FHyperTwistSkillControlStateEntry* TrainingReplayPackState =
HyperTwistSkillPhaseS1BTestInternal::FindSkillStateById(
ControlState,
TEXT("skill/review-training-replay-pack")
);
TestNotNull(
TEXT("The review-training-replay-pack skill state must exist."),
TrainingReplayPackState
);
if (TrainingReplayPackState != nullptr)
{
TestFalse(
TEXT("The review-training-replay-pack skill must remain opt-in by default."),
TrainingReplayPackState->bEffectiveEnabled
);
TestTrue(
TEXT("The review-training-replay-pack skill must remain visible by default."),
TrainingReplayPackState->bEffectiveVisible
);
TestEqual(
TEXT("The review-training-replay-pack skill must use the domain-creative visibility group."),
TrainingReplayPackState->VisibilityGroupId,
TEXT("skill-group/domain-creative")
);
}
return true; return true;
} }

View file

@ -37,9 +37,9 @@ bool FHyperTwistSkillPhaseS1CInvocationProvenanceTest::RunTest(const FString& Pa
AuditLedgerState.IsStructurallyValid() AuditLedgerState.IsStructurallyValid()
); );
TestEqual( TestEqual(
TEXT("Sample skill audit ledger should record one invocation per enabled sample skill after S4-C lands."), TEXT("Sample skill audit ledger should record one invocation per enabled sample skill after S7-C lands."),
AuditLedgerState.InvocationCount, AuditLedgerState.InvocationCount,
16 37
); );
TestEqual( TestEqual(
TEXT("All sample invocations should remain traceable."), TEXT("All sample invocations should remain traceable."),
@ -109,9 +109,9 @@ bool FHyperTwistSkillPhaseS1CFailureCancelRecordingTest::RunTest(const FString&
AuditLedgerState.bCancelRecordingSupported AuditLedgerState.bCancelRecordingSupported
); );
TestEqual( TestEqual(
TEXT("The sample audit ledger should contain the expected successful invocation count after S4-C lands."), TEXT("The sample audit ledger should contain the expected successful invocation count after S7-C lands."),
AuditLedgerState.SuccessfulInvocationCount, AuditLedgerState.SuccessfulInvocationCount,
14 35
); );
TestEqual( TestEqual(
TEXT("The sample audit ledger should contain the expected failed invocation count."), TEXT("The sample audit ledger should contain the expected failed invocation count."),
@ -241,6 +241,29 @@ bool FHyperTwistSkillPhaseS1CFailureCancelRecordingTest::RunTest(const FString&
); );
} }
const FHyperTwistSkillInvocationRecord* ReplayExplainerRecord =
HyperTwistSkillPhaseS1CTestInternal::FindInvocationRecordBySkillId(
AuditLedgerState,
TEXT("skill/compose-replay-explainer-pack")
);
TestNotNull(
TEXT("The compose-replay-explainer-pack invocation should be present in the sample audit ledger."),
ReplayExplainerRecord
);
if (ReplayExplainerRecord != nullptr)
{
TestEqual(
TEXT("The compose-replay-explainer-pack skill should record a success outcome."),
ReplayExplainerRecord->Outcome,
EHyperTwistSkillInvocationOutcome::Succeeded
);
TestEqual(
TEXT("The compose-replay-explainer-pack skill should emit the bounded replay-explainer artifact."),
ReplayExplainerRecord->ProducedArtifacts[0].ArtifactKind,
FString(TEXT("artifact/replay-explainer-pack-brief"))
);
}
const FHyperTwistSkillInvocationRecord* BrowserTraceRecord = const FHyperTwistSkillInvocationRecord* BrowserTraceRecord =
HyperTwistSkillPhaseS1CTestInternal::FindInvocationRecordBySkillId( HyperTwistSkillPhaseS1CTestInternal::FindInvocationRecordBySkillId(
AuditLedgerState, AuditLedgerState,
@ -264,6 +287,29 @@ bool FHyperTwistSkillPhaseS1CFailureCancelRecordingTest::RunTest(const FString&
); );
} }
const FHyperTwistSkillInvocationRecord* WorkflowWrapperRecord =
HyperTwistSkillPhaseS1CTestInternal::FindInvocationRecordBySkillId(
AuditLedgerState,
TEXT("skill/wrap-bounded-workflow")
);
TestNotNull(
TEXT("The bounded workflow-wrapper skill invocation should be present in the sample audit ledger."),
WorkflowWrapperRecord
);
if (WorkflowWrapperRecord != nullptr)
{
TestEqual(
TEXT("The bounded workflow-wrapper skill should record a success outcome."),
WorkflowWrapperRecord->Outcome,
EHyperTwistSkillInvocationOutcome::Succeeded
);
TestEqual(
TEXT("The bounded workflow-wrapper skill should emit the bounded workflow wrapper artifact."),
WorkflowWrapperRecord->ProducedArtifacts[0].ArtifactKind,
FString(TEXT("artifact/bounded-workflow-wrapper-brief"))
);
}
const FHyperTwistSkillInvocationRecord* DesignShellRecord = const FHyperTwistSkillInvocationRecord* DesignShellRecord =
HyperTwistSkillPhaseS1CTestInternal::FindInvocationRecordBySkillId( HyperTwistSkillPhaseS1CTestInternal::FindInvocationRecordBySkillId(
AuditLedgerState, AuditLedgerState,
@ -287,6 +333,144 @@ bool FHyperTwistSkillPhaseS1CFailureCancelRecordingTest::RunTest(const FString&
); );
} }
const FHyperTwistSkillInvocationRecord* DelegationSpecRecord =
HyperTwistSkillPhaseS1CTestInternal::FindInvocationRecordBySkillId(
AuditLedgerState,
TEXT("skill/specify-bounded-delegation")
);
TestNotNull(
TEXT("The bounded-delegation spec invocation should be present in the sample audit ledger."),
DelegationSpecRecord
);
if (DelegationSpecRecord != nullptr)
{
TestEqual(
TEXT("The bounded-delegation spec should record a success outcome."),
DelegationSpecRecord->Outcome,
EHyperTwistSkillInvocationOutcome::Succeeded
);
TestEqual(
TEXT("The bounded-delegation spec should emit the delegation-spec artifact."),
DelegationSpecRecord->ProducedArtifacts[0].ArtifactKind,
FString(TEXT("artifact/bounded-delegation-spec-brief"))
);
}
const FHyperTwistSkillInvocationRecord* WorkflowChainRecord =
HyperTwistSkillPhaseS1CTestInternal::FindInvocationRecordBySkillId(
AuditLedgerState,
TEXT("skill/chain-bounded-workflow")
);
TestNotNull(
TEXT("The bounded workflow-chain invocation should be present in the sample audit ledger."),
WorkflowChainRecord
);
if (WorkflowChainRecord != nullptr)
{
TestEqual(
TEXT("The bounded workflow-chain skill should record a success outcome."),
WorkflowChainRecord->Outcome,
EHyperTwistSkillInvocationOutcome::Succeeded
);
TestEqual(
TEXT("The bounded workflow-chain skill should emit the workflow-chain artifact."),
WorkflowChainRecord->ProducedArtifacts[0].ArtifactKind,
FString(TEXT("artifact/bounded-workflow-chain-brief"))
);
}
const FHyperTwistSkillInvocationRecord* ProviderProfileRecord =
HyperTwistSkillPhaseS1CTestInternal::FindInvocationRecordBySkillId(
AuditLedgerState,
TEXT("skill/diagnose-provider-routing")
);
TestNotNull(
TEXT("The diagnose-provider-routing skill invocation should be present in the sample audit ledger."),
ProviderProfileRecord
);
if (ProviderProfileRecord != nullptr)
{
TestEqual(
TEXT("The diagnose-provider-routing skill should record a success outcome."),
ProviderProfileRecord->Outcome,
EHyperTwistSkillInvocationOutcome::Succeeded
);
TestEqual(
TEXT("The diagnose-provider-routing skill should emit the bounded provider-routing diagnostic artifact."),
ProviderProfileRecord->ProducedArtifacts[0].ArtifactKind,
FString(TEXT("artifact/provider-routing-diagnostic-brief"))
);
}
const FHyperTwistSkillInvocationRecord* UsageAuditRecord =
HyperTwistSkillPhaseS1CTestInternal::FindInvocationRecordBySkillId(
AuditLedgerState,
TEXT("skill/audit-provider-usage")
);
TestNotNull(
TEXT("The audit-provider-usage skill invocation should be present in the sample audit ledger."),
UsageAuditRecord
);
if (UsageAuditRecord != nullptr)
{
TestEqual(
TEXT("The audit-provider-usage skill should record a success outcome."),
UsageAuditRecord->Outcome,
EHyperTwistSkillInvocationOutcome::Succeeded
);
TestEqual(
TEXT("The audit-provider-usage skill should emit the bounded provider-usage audit artifact."),
UsageAuditRecord->ProducedArtifacts[0].ArtifactKind,
FString(TEXT("artifact/provider-usage-audit-brief"))
);
}
const FHyperTwistSkillInvocationRecord* DomainPackagingRecord =
HyperTwistSkillPhaseS1CTestInternal::FindInvocationRecordBySkillId(
AuditLedgerState,
TEXT("skill/specify-domain-packaging")
);
TestNotNull(
TEXT("The specify-domain-packaging skill invocation should be present in the sample audit ledger."),
DomainPackagingRecord
);
if (DomainPackagingRecord != nullptr)
{
TestEqual(
TEXT("The specify-domain-packaging skill should record a success outcome."),
DomainPackagingRecord->Outcome,
EHyperTwistSkillInvocationOutcome::Succeeded
);
TestEqual(
TEXT("The specify-domain-packaging skill should emit the bounded domain-packaging artifact."),
DomainPackagingRecord->ProducedArtifacts[0].ArtifactKind,
FString(TEXT("artifact/domain-packaging-rules-brief"))
);
}
const FHyperTwistSkillInvocationRecord* TrainingReplayPackRecord =
HyperTwistSkillPhaseS1CTestInternal::FindInvocationRecordBySkillId(
AuditLedgerState,
TEXT("skill/review-training-replay-pack")
);
TestNotNull(
TEXT("The review-training-replay-pack skill invocation should be present in the sample audit ledger."),
TrainingReplayPackRecord
);
if (TrainingReplayPackRecord != nullptr)
{
TestEqual(
TEXT("The review-training-replay-pack skill should record a success outcome."),
TrainingReplayPackRecord->Outcome,
EHyperTwistSkillInvocationOutcome::Succeeded
);
TestEqual(
TEXT("The review-training-replay-pack skill should emit the bounded retained training-replay artifact."),
TrainingReplayPackRecord->ProducedArtifacts[0].ArtifactKind,
FString(TEXT("artifact/training-replay-review-pack-brief"))
);
}
return true; return true;
} }

View file

@ -325,6 +325,158 @@ bool FHyperTwistSkillPhaseS1DValidationHarnessCoverageTest::RunTest(const FStrin
); );
} }
const FHyperTwistSkillValidationContractCase* WorkflowReviewEval =
HyperTwistSkillPhaseS1DTestInternal::FindValidationCase(
HarnessState,
TEXT("skill/review-proposal"),
EHyperTwistSkillValidationContractKind::Eval
);
TestNotNull(
TEXT("The review-proposal skill should have an eval validation contract."),
WorkflowReviewEval
);
if (WorkflowReviewEval != nullptr)
{
TestEqual(
TEXT("The review-proposal skill eval contract should run live after S5-A lands."),
WorkflowReviewEval->ExecutionMode,
EHyperTwistSkillValidationExecutionMode::LiveContract
);
}
const FHyperTwistSkillValidationContractCase* ImplementationReviewEval =
HyperTwistSkillPhaseS1DTestInternal::FindValidationCase(
HarnessState,
TEXT("skill/review-implementation"),
EHyperTwistSkillValidationContractKind::Eval
);
TestNotNull(
TEXT("The review-implementation skill should have an eval validation contract."),
ImplementationReviewEval
);
if (ImplementationReviewEval != nullptr)
{
TestEqual(
TEXT("The review-implementation skill eval contract should run live after S5-B lands."),
ImplementationReviewEval->ExecutionMode,
EHyperTwistSkillValidationExecutionMode::LiveContract
);
}
const FHyperTwistSkillValidationContractCase* PlanSynthesisEval =
HyperTwistSkillPhaseS1DTestInternal::FindValidationCase(
HarnessState,
TEXT("skill/synthesize-plan"),
EHyperTwistSkillValidationContractKind::Eval
);
TestNotNull(
TEXT("The synthesize-plan skill should have an eval validation contract."),
PlanSynthesisEval
);
if (PlanSynthesisEval != nullptr)
{
TestEqual(
TEXT("The synthesize-plan skill eval contract should run live after S5-C lands."),
PlanSynthesisEval->ExecutionMode,
EHyperTwistSkillValidationExecutionMode::LiveContract
);
}
const FHyperTwistSkillValidationContractCase* ProviderProfileEval =
HyperTwistSkillPhaseS1DTestInternal::FindValidationCase(
HarnessState,
TEXT("skill/inspect-provider-profile"),
EHyperTwistSkillValidationContractKind::Eval
);
TestNotNull(
TEXT("The inspect-provider-profile skill should have an eval validation contract."),
ProviderProfileEval
);
if (ProviderProfileEval != nullptr)
{
TestEqual(
TEXT("The inspect-provider-profile skill eval contract should run live after S6-A lands."),
ProviderProfileEval->ExecutionMode,
EHyperTwistSkillValidationExecutionMode::LiveContract
);
}
const FHyperTwistSkillValidationContractCase* UsageAuditEval =
HyperTwistSkillPhaseS1DTestInternal::FindValidationCase(
HarnessState,
TEXT("skill/audit-provider-usage"),
EHyperTwistSkillValidationContractKind::Eval
);
TestNotNull(
TEXT("The audit-provider-usage skill should have an eval validation contract."),
UsageAuditEval
);
if (UsageAuditEval != nullptr)
{
TestEqual(
TEXT("The audit-provider-usage skill eval contract should run live after S6-B lands."),
UsageAuditEval->ExecutionMode,
EHyperTwistSkillValidationExecutionMode::LiveContract
);
}
const FHyperTwistSkillValidationContractCase* DomainPackagingEval =
HyperTwistSkillPhaseS1DTestInternal::FindValidationCase(
HarnessState,
TEXT("skill/specify-domain-packaging"),
EHyperTwistSkillValidationContractKind::Eval
);
TestNotNull(
TEXT("The specify-domain-packaging skill should have an eval validation contract."),
DomainPackagingEval
);
if (DomainPackagingEval != nullptr)
{
TestEqual(
TEXT("The specify-domain-packaging skill eval contract should run live after S7-A lands."),
DomainPackagingEval->ExecutionMode,
EHyperTwistSkillValidationExecutionMode::LiveContract
);
}
const FHyperTwistSkillValidationContractCase* TrainingReplayPackEval =
HyperTwistSkillPhaseS1DTestInternal::FindValidationCase(
HarnessState,
TEXT("skill/review-training-replay-pack"),
EHyperTwistSkillValidationContractKind::Eval
);
TestNotNull(
TEXT("The review-training-replay-pack skill should have an eval validation contract."),
TrainingReplayPackEval
);
if (TrainingReplayPackEval != nullptr)
{
TestEqual(
TEXT("The review-training-replay-pack skill eval contract should run live after S7-B lands."),
TrainingReplayPackEval->ExecutionMode,
EHyperTwistSkillValidationExecutionMode::LiveContract
);
}
const FHyperTwistSkillValidationContractCase* ReplayExplainerEval =
HyperTwistSkillPhaseS1DTestInternal::FindValidationCase(
HarnessState,
TEXT("skill/compose-replay-explainer-pack"),
EHyperTwistSkillValidationContractKind::Eval
);
TestNotNull(
TEXT("The compose-replay-explainer-pack skill should have an eval validation contract."),
ReplayExplainerEval
);
if (ReplayExplainerEval != nullptr)
{
TestEqual(
TEXT("The compose-replay-explainer-pack skill eval contract should run live after S7-C lands."),
ReplayExplainerEval->ExecutionMode,
EHyperTwistSkillValidationExecutionMode::LiveContract
);
}
const FHyperTwistSkillValidationContractCase* RouxEval = const FHyperTwistSkillValidationContractCase* RouxEval =
HyperTwistSkillPhaseS1DTestInternal::FindValidationCase( HyperTwistSkillPhaseS1DTestInternal::FindValidationCase(
HarnessState, HarnessState,

View file

@ -0,0 +1,228 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistBootstrap/HyperTwistContractLibrary.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistSkillPhaseS5ATestInternal
{
const FHyperTwistSkillWorkflowReviewSkill* FindSkillById(
const FHyperTwistSkillWorkflowReviewState& WorkflowReviewState,
const FString& SkillId
)
{
for (const FHyperTwistSkillWorkflowReviewSkill& Skill :
WorkflowReviewState.Skills)
{
if (Skill.SkillId == SkillId)
{
return &Skill;
}
}
return nullptr;
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS5AWorkflowReviewCoverageTest,
"HyperTwist.FirstParty.Skill.PhaseS5A.WorkflowReviewCoverage",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS5AWorkflowReviewCoverageTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillWorkflowReviewState WorkflowReviewState =
UHyperTwistContractLibrary::MakeSampleSkillWorkflowReviewState();
TestTrue(
TEXT("The sample S5-A workflow-review state should be structurally valid."),
WorkflowReviewState.IsStructurallyValid()
);
TestEqual(
TEXT("S5-A should expose three workflow/review skills."),
WorkflowReviewState.SkillCount,
3
);
TestEqual(
TEXT("S5-A should expose three live workflow/review skills."),
WorkflowReviewState.LiveSkillCount,
3
);
TestEqual(
TEXT("S5-A should expose one proposal-review skill."),
WorkflowReviewState.ProposalReviewSkillCount,
1
);
TestEqual(
TEXT("S5-A should expose one diff-review skill."),
WorkflowReviewState.DiffReviewSkillCount,
1
);
TestEqual(
TEXT("S5-A should expose one bounded workflow-wrapper skill."),
WorkflowReviewState.BoundedWorkflowWrapperSkillCount,
1
);
const FHyperTwistSkillWorkflowReviewSkill* ProposalReviewSkill =
HyperTwistSkillPhaseS5ATestInternal::FindSkillById(
WorkflowReviewState,
TEXT("skill/review-proposal")
);
TestNotNull(
TEXT("The review-proposal skill should exist."),
ProposalReviewSkill
);
if (ProposalReviewSkill != nullptr)
{
TestEqual(
TEXT("The review-proposal skill should bind to the bounded proposal-review artifact."),
ProposalReviewSkill->OutputArtifactKinds[0],
FString(TEXT("artifact/proposal-review-brief"))
);
TestTrue(
TEXT("The review-proposal skill should declare proposal-review mode."),
ProposalReviewSkill->bReviewsProposal
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS5ABoundedWorkflowReviewTest,
"HyperTwist.FirstParty.Skill.PhaseS5A.BoundedWorkflowReview",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS5ABoundedWorkflowReviewTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillWorkflowReviewState WorkflowReviewState =
UHyperTwistContractLibrary::MakeSampleSkillWorkflowReviewState();
TestTrue(
TEXT("The sample S5-A workflow-review state should be structurally valid."),
WorkflowReviewState.IsStructurallyValid()
);
TestTrue(
TEXT("Every live S5-A skill should read authoritative workflow and review surfaces."),
WorkflowReviewState.bEveryLiveSkillReadsAuthoritativeWorkflowAndReviewSurfaces
);
TestTrue(
TEXT("Every live S5-A skill should keep validation-harness coverage."),
WorkflowReviewState.bEveryLiveSkillHasValidationHarnessCoverage
);
TestTrue(
TEXT("S5-A workflow/review wrappers should remain structurally bounded."),
WorkflowReviewState.bWorkflowReviewRemainsBounded
);
TestTrue(
TEXT("S5-A workflow/review wrappers should require the landed extraction substrate."),
WorkflowReviewState.bEverySkillRequiresExtractionSubstrate
);
TestTrue(
TEXT("S5-A workflow/review wrappers should require the landed workflow-memory substrate."),
WorkflowReviewState.bEverySkillRequiresWorkflowMemorySubstrate
);
TestTrue(
TEXT("S5-A workflow/review wrappers should require the landed design-shell substrate."),
WorkflowReviewState.bEverySkillRequiresDesignShellSubstrate
);
TestTrue(
TEXT("S5-A should avoid implementation-review and delegation widening."),
WorkflowReviewState.bNoImplementationReviewDelegationWidening
);
TestTrue(
TEXT("S5-A should avoid plan-synthesis widening."),
WorkflowReviewState.bNoPlanSynthesisWidening
);
const FHyperTwistSkillWorkflowReviewSkill* WorkflowWrapperSkill =
HyperTwistSkillPhaseS5ATestInternal::FindSkillById(
WorkflowReviewState,
TEXT("skill/wrap-bounded-workflow")
);
TestNotNull(
TEXT("The wrap-bounded-workflow skill should exist."),
WorkflowWrapperSkill
);
if (WorkflowWrapperSkill != nullptr)
{
TestTrue(
TEXT("The wrap-bounded-workflow skill should declare bounded workflow-wrapper mode."),
WorkflowWrapperSkill->bWrapsBoundedWorkflow
);
TestTrue(
TEXT("The wrap-bounded-workflow skill should depend on the workflow-memory substrate."),
WorkflowWrapperSkill->bRequiresWorkflowMemorySubstrate
);
TestTrue(
TEXT("The wrap-bounded-workflow skill should explicitly avoid plan-synthesis widening."),
WorkflowWrapperSkill->bAvoidsPlanSynthesisWidening
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS5ASerializationRoundTripTest,
"HyperTwist.FirstParty.Skill.PhaseS5A.SerializationRoundTrip",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS5ASerializationRoundTripTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillWorkflowReviewState WorkflowReviewState =
UHyperTwistContractLibrary::MakeSampleSkillWorkflowReviewState();
TestTrue(
TEXT("The sample S5-A workflow-review state should be structurally valid before serialization."),
WorkflowReviewState.IsStructurallyValid()
);
const FString Json =
UHyperTwistContractLibrary::SerializeSkillWorkflowReviewStateToJson(
WorkflowReviewState
);
TestTrue(
TEXT("Serialized S5-A JSON should include the plan-synthesis guard field."),
Json.Contains(TEXT("bNoPlanSynthesisWidening"))
);
FHyperTwistSkillWorkflowReviewState RoundTrippedState;
TestTrue(
TEXT("Deserializing the S5-A workflow-review JSON should succeed."),
UHyperTwistContractLibrary::DeserializeSkillWorkflowReviewStateFromJson(
Json,
RoundTrippedState
)
);
TestTrue(
TEXT("Round-tripped S5-A workflow-review state should remain structurally valid."),
RoundTrippedState.IsStructurallyValid()
);
TestEqual(
TEXT("Round-tripped S5-A skill count should match the original sample."),
RoundTrippedState.SkillCount,
WorkflowReviewState.SkillCount
);
TestEqual(
TEXT("Round-tripped S5-A live-skill count should match the original sample."),
RoundTrippedState.LiveSkillCount,
WorkflowReviewState.LiveSkillCount
);
return true;
}
#endif

View file

@ -0,0 +1,220 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistBootstrap/HyperTwistContractLibrary.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistSkillPhaseS5BTestInternal
{
const FHyperTwistSkillImplementationDelegationSpec* FindSpecBySkillId(
const FHyperTwistSkillImplementationDelegationState& ImplementationDelegationState,
const FString& SkillId
)
{
for (const FHyperTwistSkillImplementationDelegationSpec& Spec :
ImplementationDelegationState.Specs)
{
if (Spec.SkillId == SkillId)
{
return &Spec;
}
}
return nullptr;
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS5BImplementationDelegationCoverageTest,
"HyperTwist.FirstParty.Skill.PhaseS5B.ImplementationDelegationCoverage",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS5BImplementationDelegationCoverageTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillImplementationDelegationState ImplementationDelegationState =
UHyperTwistContractLibrary::MakeSampleSkillImplementationDelegationState();
TestTrue(
TEXT("The sample S5-B implementation/delegation state should be structurally valid."),
ImplementationDelegationState.IsStructurallyValid()
);
TestEqual(
TEXT("S5-B should expose two bounded implementation/delegation specs."),
ImplementationDelegationState.SkillCount,
2
);
TestEqual(
TEXT("S5-B should expose one implementation-review spec."),
ImplementationDelegationState.ImplementationReviewSpecCount,
1
);
TestEqual(
TEXT("S5-B should expose one bounded delegation spec."),
ImplementationDelegationState.DelegationSpecCount,
1
);
const FHyperTwistSkillImplementationDelegationSpec* ImplementationReviewSpec =
HyperTwistSkillPhaseS5BTestInternal::FindSpecBySkillId(
ImplementationDelegationState,
TEXT("skill/review-implementation")
);
TestNotNull(
TEXT("The implementation-review spec should exist."),
ImplementationReviewSpec
);
if (ImplementationReviewSpec != nullptr)
{
TestEqual(
TEXT("The implementation-review spec should bind to the first-party implementation-review service."),
ImplementationReviewSpec->ServiceBindingId,
FString(TEXT("service/specs/review-implementation"))
);
TestTrue(
TEXT("The implementation-review spec should declare implementation-review mode."),
ImplementationReviewSpec->bCoversImplementationReview
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS5BBoundedDelegationSafetyTest,
"HyperTwist.FirstParty.Skill.PhaseS5B.BoundedDelegationSafety",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS5BBoundedDelegationSafetyTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillImplementationDelegationState ImplementationDelegationState =
UHyperTwistContractLibrary::MakeSampleSkillImplementationDelegationState();
TestTrue(
TEXT("The sample S5-B implementation/delegation state should be structurally valid."),
ImplementationDelegationState.IsStructurallyValid()
);
TestTrue(
TEXT("Every S5-B spec should stay in first-party terms."),
ImplementationDelegationState.bEverySpecUsesFirstPartyTerms
);
TestTrue(
TEXT("Every S5-B spec should preserve the optional-assistive off-state."),
ImplementationDelegationState.bEverySpecPreservesOptionalAssistiveOffState
);
TestTrue(
TEXT("Every S5-B spec should require provenance-ledger visibility."),
ImplementationDelegationState.bEverySpecRequiresProvenanceLedger
);
TestTrue(
TEXT("Every S5-B spec should remain bounded to implementation review and delegation only."),
ImplementationDelegationState.bEverySpecRemainsBounded
);
TestTrue(
TEXT("Every S5-B spec should require the landed workflow/review substrate."),
ImplementationDelegationState.bEverySpecRequiresWorkflowReviewSubstrate
);
TestTrue(
TEXT("Every S5-B spec should require the landed design-shell substrate."),
ImplementationDelegationState.bEverySpecRequiresDesignShellSubstrate
);
TestTrue(
TEXT("S5-B should avoid plan-synthesis widening."),
ImplementationDelegationState.bNoPlanSynthesisWidening
);
TestTrue(
TEXT("S5-B should avoid autonomous-execution claims."),
ImplementationDelegationState.bNoAutonomousExecutionClaims
);
const FHyperTwistSkillImplementationDelegationSpec* DelegationSpec =
HyperTwistSkillPhaseS5BTestInternal::FindSpecBySkillId(
ImplementationDelegationState,
TEXT("skill/specify-bounded-delegation")
);
TestNotNull(
TEXT("The bounded-delegation spec should exist."),
DelegationSpec
);
if (DelegationSpec != nullptr)
{
TestTrue(
TEXT("The bounded-delegation spec should declare bounded delegation mode."),
DelegationSpec->bDefinesBoundedDelegationSpec
);
TestEqual(
TEXT("The bounded-delegation spec should depend on three landed workflow/review inputs."),
DelegationSpec->RequiredWorkflowReviewSkillCount,
3
);
TestEqual(
TEXT("The bounded-delegation spec should depend on two landed design-shell inputs."),
DelegationSpec->RequiredDesignShellSkillCount,
2
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS5BSerializationRoundTripTest,
"HyperTwist.FirstParty.Skill.PhaseS5B.SerializationRoundTrip",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS5BSerializationRoundTripTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillImplementationDelegationState ImplementationDelegationState =
UHyperTwistContractLibrary::MakeSampleSkillImplementationDelegationState();
TestTrue(
TEXT("The sample S5-B implementation/delegation state should be structurally valid before serialization."),
ImplementationDelegationState.IsStructurallyValid()
);
const FString Json =
UHyperTwistContractLibrary::SerializeSkillImplementationDelegationStateToJson(
ImplementationDelegationState
);
TestTrue(
TEXT("Serialized S5-B JSON should include the autonomous-execution guard field."),
Json.Contains(TEXT("bNoAutonomousExecutionClaims"))
);
FHyperTwistSkillImplementationDelegationState RoundTrippedState;
TestTrue(
TEXT("Deserializing the S5-B implementation/delegation JSON should succeed."),
UHyperTwistContractLibrary::DeserializeSkillImplementationDelegationStateFromJson(
Json,
RoundTrippedState
)
);
TestTrue(
TEXT("Round-tripped S5-B implementation/delegation state should remain structurally valid."),
RoundTrippedState.IsStructurallyValid()
);
TestEqual(
TEXT("Round-tripped S5-B spec count should match the original sample."),
RoundTrippedState.SpecCount,
ImplementationDelegationState.SpecCount
);
TestEqual(
TEXT("Round-tripped S5-B safety-rule count should match the original sample."),
RoundTrippedState.SafetyRuleCount,
ImplementationDelegationState.SafetyRuleCount
);
return true;
}
#endif

View file

@ -0,0 +1,225 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistBootstrap/HyperTwistContractLibrary.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistSkillPhaseS5CTestInternal
{
const FHyperTwistSkillPlanOrchestrationSkill* FindSkillById(
const FHyperTwistSkillPlanOrchestrationState& PlanOrchestrationState,
const FString& SkillId
)
{
for (const FHyperTwistSkillPlanOrchestrationSkill& Skill :
PlanOrchestrationState.Skills)
{
if (Skill.SkillId == SkillId)
{
return &Skill;
}
}
return nullptr;
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS5CPlanOrchestrationCoverageTest,
"HyperTwist.FirstParty.Skill.PhaseS5C.PlanOrchestrationCoverage",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS5CPlanOrchestrationCoverageTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillPlanOrchestrationState PlanOrchestrationState =
UHyperTwistContractLibrary::MakeSampleSkillPlanOrchestrationState();
TestTrue(
TEXT("The sample S5-C plan/orchestration state should be structurally valid."),
PlanOrchestrationState.IsStructurallyValid()
);
TestEqual(
TEXT("S5-C should expose two bounded plan/orchestration skills."),
PlanOrchestrationState.SkillCount,
2
);
TestEqual(
TEXT("S5-C should expose one bounded plan-synthesis skill."),
PlanOrchestrationState.PlanSynthesisSkillCount,
1
);
TestEqual(
TEXT("S5-C should expose one bounded workflow-chaining skill."),
PlanOrchestrationState.WorkflowChainingSkillCount,
1
);
const FHyperTwistSkillPlanOrchestrationSkill* PlanSynthesisSkill =
HyperTwistSkillPhaseS5CTestInternal::FindSkillById(
PlanOrchestrationState,
TEXT("skill/synthesize-plan")
);
TestNotNull(
TEXT("The synthesize-plan skill should exist."),
PlanSynthesisSkill
);
if (PlanSynthesisSkill != nullptr)
{
TestEqual(
TEXT("The synthesize-plan skill should bind to the first-party plan-synthesis service."),
PlanSynthesisSkill->ServiceBindingId,
FString(TEXT("service/skills/synthesize-plan"))
);
TestTrue(
TEXT("The synthesize-plan skill should declare bounded plan-synthesis mode."),
PlanSynthesisSkill->bSynthesizesBoundedPlan
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS5CBoundedOrchestrationSafetyTest,
"HyperTwist.FirstParty.Skill.PhaseS5C.BoundedOrchestrationSafety",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS5CBoundedOrchestrationSafetyTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillPlanOrchestrationState PlanOrchestrationState =
UHyperTwistContractLibrary::MakeSampleSkillPlanOrchestrationState();
TestTrue(
TEXT("The sample S5-C plan/orchestration state should be structurally valid."),
PlanOrchestrationState.IsStructurallyValid()
);
TestTrue(
TEXT("Every live S5-C skill should read authoritative workflow, implementation, and memory surfaces."),
PlanOrchestrationState
.bEveryLiveSkillReadsAuthoritativeWorkflowImplementationAndMemorySurfaces
);
TestTrue(
TEXT("Every live S5-C skill should keep validation-harness coverage."),
PlanOrchestrationState.bEveryLiveSkillHasValidationHarnessCoverage
);
TestTrue(
TEXT("S5-C plan/orchestration skills should remain structurally bounded."),
PlanOrchestrationState.bPlanOrchestrationRemainsBounded
);
TestTrue(
TEXT("S5-C plan/orchestration skills should require the landed implementation/delegation substrate."),
PlanOrchestrationState.bEverySkillRequiresImplementationDelegationSubstrate
);
TestTrue(
TEXT("S5-C plan/orchestration skills should require the landed workflow-memory substrate."),
PlanOrchestrationState.bEverySkillRequiresWorkflowMemorySubstrate
);
TestTrue(
TEXT("S5-C plan/orchestration skills should require the landed workflow/review substrate."),
PlanOrchestrationState.bEverySkillRequiresWorkflowReviewSubstrate
);
TestTrue(
TEXT("S5-C should avoid provider widening."),
PlanOrchestrationState.bNoProviderWidening
);
TestTrue(
TEXT("S5-C should avoid domain skill-pack widening."),
PlanOrchestrationState.bNoDomainSkillPackWidening
);
TestTrue(
TEXT("S5-C should avoid autonomous-execution claims."),
PlanOrchestrationState.bNoAutonomousExecutionClaims
);
const FHyperTwistSkillPlanOrchestrationSkill* WorkflowChainSkill =
HyperTwistSkillPhaseS5CTestInternal::FindSkillById(
PlanOrchestrationState,
TEXT("skill/chain-bounded-workflow")
);
TestNotNull(
TEXT("The chain-bounded-workflow skill should exist."),
WorkflowChainSkill
);
if (WorkflowChainSkill != nullptr)
{
TestTrue(
TEXT("The chain-bounded-workflow skill should declare bounded workflow-chaining mode."),
WorkflowChainSkill->bChainsBoundedWorkflow
);
TestEqual(
TEXT("The chain-bounded-workflow skill should depend on two landed implementation/delegation inputs."),
WorkflowChainSkill->RequiredImplementationDelegationSkillCount,
2
);
TestEqual(
TEXT("The chain-bounded-workflow skill should depend on two landed workflow-memory inputs."),
WorkflowChainSkill->RequiredWorkflowMemorySkillCount,
2
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS5CSerializationRoundTripTest,
"HyperTwist.FirstParty.Skill.PhaseS5C.SerializationRoundTrip",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS5CSerializationRoundTripTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillPlanOrchestrationState PlanOrchestrationState =
UHyperTwistContractLibrary::MakeSampleSkillPlanOrchestrationState();
TestTrue(
TEXT("The sample S5-C plan/orchestration state should be structurally valid before serialization."),
PlanOrchestrationState.IsStructurallyValid()
);
const FString Json =
UHyperTwistContractLibrary::SerializeSkillPlanOrchestrationStateToJson(
PlanOrchestrationState
);
TestTrue(
TEXT("Serialized S5-C JSON should include the provider-widening guard field."),
Json.Contains(TEXT("bNoProviderWidening"))
);
FHyperTwistSkillPlanOrchestrationState RoundTrippedState;
TestTrue(
TEXT("Deserializing the S5-C plan/orchestration JSON should succeed."),
UHyperTwistContractLibrary::DeserializeSkillPlanOrchestrationStateFromJson(
Json,
RoundTrippedState
)
);
TestTrue(
TEXT("Round-tripped S5-C plan/orchestration state should remain structurally valid."),
RoundTrippedState.IsStructurallyValid()
);
TestEqual(
TEXT("Round-tripped S5-C skill count should match the original sample."),
RoundTrippedState.SkillCount,
PlanOrchestrationState.SkillCount
);
TestEqual(
TEXT("Round-tripped S5-C workflow-chaining count should match the original sample."),
RoundTrippedState.WorkflowChainingSkillCount,
PlanOrchestrationState.WorkflowChainingSkillCount
);
return true;
}
#endif

View file

@ -0,0 +1,208 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistBootstrap/HyperTwistContractLibrary.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistSkillPhaseS6ATestInternal
{
const FHyperTwistSkillProviderProfileRoutingSkill* FindSkillById(
const FHyperTwistSkillProviderProfileRoutingState& ProviderProfileRoutingState,
const FString& SkillId
)
{
for (const FHyperTwistSkillProviderProfileRoutingSkill& Skill :
ProviderProfileRoutingState.Skills)
{
if (Skill.SkillId == SkillId)
{
return &Skill;
}
}
return nullptr;
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS6AProviderProfileRoutingCoverageTest,
"HyperTwist.FirstParty.Skill.PhaseS6A.ProviderProfileRoutingCoverage",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS6AProviderProfileRoutingCoverageTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillProviderProfileRoutingState ProviderProfileRoutingState =
UHyperTwistContractLibrary::MakeSampleSkillProviderProfileRoutingState();
TestTrue(
TEXT("The sample S6-A provider-profile/routing state should be structurally valid."),
ProviderProfileRoutingState.IsStructurallyValid()
);
TestEqual(
TEXT("S6-A should expose three bounded provider-profile/routing skills."),
ProviderProfileRoutingState.SkillCount,
3
);
TestEqual(
TEXT("S6-A should expose one provider-profile inspection skill."),
ProviderProfileRoutingState.ProviderProfileInspectionSkillCount,
1
);
TestEqual(
TEXT("S6-A should expose one BYOK-profile setup skill."),
ProviderProfileRoutingState.ByokProfileSetupSkillCount,
1
);
TestEqual(
TEXT("S6-A should expose one provider-routing diagnostic skill."),
ProviderProfileRoutingState.RoutingDiagnosticSkillCount,
1
);
const FHyperTwistSkillProviderProfileRoutingSkill* InspectSkill =
HyperTwistSkillPhaseS6ATestInternal::FindSkillById(
ProviderProfileRoutingState,
TEXT("skill/inspect-provider-profile")
);
TestNotNull(
TEXT("The inspect-provider-profile skill should exist."),
InspectSkill
);
if (InspectSkill != nullptr)
{
TestEqual(
TEXT("The inspect-provider-profile skill should bind to the first-party provider-profile inspection service."),
InspectSkill->ServiceBindingId,
FString(TEXT("service/skills/inspect-provider-profile"))
);
TestTrue(
TEXT("The inspect-provider-profile skill should declare provider-profile inspection mode."),
InspectSkill->bInspectsProviderProfile
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS6ACustomEndpointAcceptanceGateTest,
"HyperTwist.FirstParty.Skill.PhaseS6A.CustomEndpointAcceptanceGate",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS6ACustomEndpointAcceptanceGateTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillProviderProfileRoutingState ProviderProfileRoutingState =
UHyperTwistContractLibrary::MakeSampleSkillProviderProfileRoutingState();
TestTrue(
TEXT("The sample S6-A provider-profile/routing state should be structurally valid."),
ProviderProfileRoutingState.IsStructurallyValid()
);
TestTrue(
TEXT("S6-A should keep OpenAI-compatible custom endpoints first-class."),
ProviderProfileRoutingState.bOpenAiCompatibleCustomEndpointsRemainFirstClass
);
TestTrue(
TEXT("S6-A should preserve user-labeled BYOK profile support."),
ProviderProfileRoutingState.bUserLabeledByokProfilesRemainSupported
);
TestTrue(
TEXT("S6-A should preserve provider neutrality."),
ProviderProfileRoutingState.bProviderNeutralityRemainsPreserved
);
TestTrue(
TEXT("S6-A should avoid provider-specific overlay widening."),
ProviderProfileRoutingState.bNoProviderSpecificOverlayWidening
);
const FHyperTwistSkillProviderProfileRoutingSkill* DiagnoseSkill =
HyperTwistSkillPhaseS6ATestInternal::FindSkillById(
ProviderProfileRoutingState,
TEXT("skill/diagnose-provider-routing")
);
TestNotNull(
TEXT("The diagnose-provider-routing skill should exist."),
DiagnoseSkill
);
if (DiagnoseSkill != nullptr)
{
TestEqual(
TEXT("The diagnose-provider-routing skill should depend on the landed provider wrapper."),
DiagnoseSkill->RequiredAnalyzerWrapperSkillCount,
1
);
TestTrue(
TEXT("The diagnose-provider-routing skill should declare routing-diagnostic mode."),
DiagnoseSkill->bDiagnosesRouting
);
TestTrue(
TEXT("The diagnose-provider-routing skill should preserve the custom-endpoint acceptance gate."),
DiagnoseSkill->bPreservesOpenAiCompatibleCustomEndpointFirstClass
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS6ASerializationRoundTripTest,
"HyperTwist.FirstParty.Skill.PhaseS6A.SerializationRoundTrip",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS6ASerializationRoundTripTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillProviderProfileRoutingState ProviderProfileRoutingState =
UHyperTwistContractLibrary::MakeSampleSkillProviderProfileRoutingState();
TestTrue(
TEXT("The sample S6-A provider-profile/routing state should be structurally valid before serialization."),
ProviderProfileRoutingState.IsStructurallyValid()
);
const FString Json =
UHyperTwistContractLibrary::SerializeSkillProviderProfileRoutingStateToJson(
ProviderProfileRoutingState
);
TestTrue(
TEXT("Serialized S6-A JSON should include the custom-endpoint acceptance field."),
Json.Contains(TEXT("bOpenAiCompatibleCustomEndpointsRemainFirstClass"))
);
FHyperTwistSkillProviderProfileRoutingState RoundTrippedState;
TestTrue(
TEXT("Deserializing the S6-A provider-profile/routing JSON should succeed."),
UHyperTwistContractLibrary::DeserializeSkillProviderProfileRoutingStateFromJson(
Json,
RoundTrippedState
)
);
TestTrue(
TEXT("Round-tripped S6-A provider-profile/routing state should remain structurally valid."),
RoundTrippedState.IsStructurallyValid()
);
TestEqual(
TEXT("Round-tripped S6-A skill count should match the original sample."),
RoundTrippedState.SkillCount,
ProviderProfileRoutingState.SkillCount
);
TestEqual(
TEXT("Round-tripped S6-A routing-diagnostic count should match the original sample."),
RoundTrippedState.RoutingDiagnosticSkillCount,
ProviderProfileRoutingState.RoutingDiagnosticSkillCount
);
return true;
}
#endif

View file

@ -0,0 +1,204 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistBootstrap/HyperTwistContractLibrary.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistSkillPhaseS6BTestInternal
{
const FHyperTwistSkillProviderUsageOperationsAuditSkill* FindSkillById(
const FHyperTwistSkillProviderUsageOperationsAuditState& AuditState,
const FString& SkillId
)
{
for (const FHyperTwistSkillProviderUsageOperationsAuditSkill& Skill :
AuditState.Skills)
{
if (Skill.SkillId == SkillId)
{
return &Skill;
}
}
return nullptr;
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS6BUsageOperationsAuditCoverageTest,
"HyperTwist.FirstParty.Skill.PhaseS6B.UsageOperationsAuditCoverage",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS6BUsageOperationsAuditCoverageTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillProviderUsageOperationsAuditState AuditState =
UHyperTwistContractLibrary::MakeSampleSkillProviderUsageOperationsAuditState();
TestTrue(
TEXT("The sample S6-B usage/operations audit state should be structurally valid."),
AuditState.IsStructurallyValid()
);
TestEqual(
TEXT("S6-B should expose three bounded provider usage/operations audit skills."),
AuditState.SkillCount,
3
);
TestEqual(
TEXT("S6-B should expose one usage-audit skill."),
AuditState.UsageAuditSkillCount,
1
);
TestEqual(
TEXT("S6-B should expose one topology-inspection skill."),
AuditState.TopologyInspectionSkillCount,
1
);
TestEqual(
TEXT("S6-B should expose one route/service diagnostic skill."),
AuditState.RouteServiceDiagnosticSkillCount,
1
);
const FHyperTwistSkillProviderUsageOperationsAuditSkill* UsageAuditSkill =
HyperTwistSkillPhaseS6BTestInternal::FindSkillById(
AuditState,
TEXT("skill/audit-provider-usage")
);
TestNotNull(
TEXT("The audit-provider-usage skill should exist."),
UsageAuditSkill
);
if (UsageAuditSkill != nullptr)
{
TestEqual(
TEXT("The audit-provider-usage skill should bind to the first-party provider-usage audit service."),
UsageAuditSkill->ServiceBindingId,
FString(TEXT("service/skills/audit-provider-usage"))
);
TestTrue(
TEXT("The audit-provider-usage skill should declare usage-audit mode."),
UsageAuditSkill->bAuditsUsage
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS6BNormalizedStateAcceptanceGateTest,
"HyperTwist.FirstParty.Skill.PhaseS6B.NormalizedStateAcceptanceGate",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS6BNormalizedStateAcceptanceGateTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillProviderUsageOperationsAuditState AuditState =
UHyperTwistContractLibrary::MakeSampleSkillProviderUsageOperationsAuditState();
TestTrue(
TEXT("The sample S6-B usage/operations audit state should be structurally valid."),
AuditState.IsStructurallyValid()
);
TestTrue(
TEXT("S6-B should ensure every live skill reads normalized first-party state."),
AuditState.bEveryLiveSkillReadsNormalizedFirstPartyState
);
TestTrue(
TEXT("S6-B should preserve normalized first-party accounting ownership."),
AuditState.bNormalizedFirstPartyAccountingOwnershipPreserved
);
TestTrue(
TEXT("S6-B should avoid settlement-execution widening."),
AuditState.bNoSettlementExecutionWidening
);
TestTrue(
TEXT("S6-B should avoid provider-portal widening."),
AuditState.bNoProviderPortalWidening
);
const FHyperTwistSkillProviderUsageOperationsAuditSkill* RouteServiceSkill =
HyperTwistSkillPhaseS6BTestInternal::FindSkillById(
AuditState,
TEXT("skill/diagnose-route-service")
);
TestNotNull(
TEXT("The diagnose-route-service skill should exist."),
RouteServiceSkill
);
if (RouteServiceSkill != nullptr)
{
TestEqual(
TEXT("The diagnose-route-service skill should depend on the three landed S6-A provider-profile/routing skills."),
RouteServiceSkill->RequiredProviderProfileRoutingSkillCount,
3
);
TestTrue(
TEXT("The diagnose-route-service skill should declare route/service diagnostic mode."),
RouteServiceSkill->bDiagnosesRouteService
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS6BSerializationRoundTripTest,
"HyperTwist.FirstParty.Skill.PhaseS6B.SerializationRoundTrip",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS6BSerializationRoundTripTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillProviderUsageOperationsAuditState AuditState =
UHyperTwistContractLibrary::MakeSampleSkillProviderUsageOperationsAuditState();
TestTrue(
TEXT("The sample S6-B usage/operations audit state should be structurally valid before serialization."),
AuditState.IsStructurallyValid()
);
const FString Json =
UHyperTwistContractLibrary::SerializeSkillProviderUsageOperationsAuditStateToJson(
AuditState
);
TestTrue(
TEXT("Serialized S6-B JSON should include the normalized-first-party-state field."),
Json.Contains(TEXT("bEveryLiveSkillReadsNormalizedFirstPartyState"))
);
FHyperTwistSkillProviderUsageOperationsAuditState RoundTrippedState;
TestTrue(
TEXT("Deserializing the S6-B usage/operations audit JSON should succeed."),
UHyperTwistContractLibrary::DeserializeSkillProviderUsageOperationsAuditStateFromJson(
Json,
RoundTrippedState
)
);
TestTrue(
TEXT("Round-tripped S6-B usage/operations audit state should remain structurally valid."),
RoundTrippedState.IsStructurallyValid()
);
TestEqual(
TEXT("Round-tripped S6-B skill count should match the original sample."),
RoundTrippedState.SkillCount,
AuditState.SkillCount
);
TestEqual(
TEXT("Round-tripped S6-B route/service diagnostic count should match the original sample."),
RoundTrippedState.RouteServiceDiagnosticSkillCount,
AuditState.RouteServiceDiagnosticSkillCount
);
return true;
}
#endif

View file

@ -0,0 +1,220 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistBootstrap/HyperTwistContractLibrary.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistSkillPhaseS7ATestInternal
{
const FHyperTwistSkillDomainPackFrameworkSkill* FindSkillById(
const FHyperTwistSkillDomainPackFrameworkState& FrameworkState,
const FString& SkillId
)
{
for (const FHyperTwistSkillDomainPackFrameworkSkill& Skill :
FrameworkState.Skills)
{
if (Skill.SkillId == SkillId)
{
return &Skill;
}
}
return nullptr;
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS7ADomainPackFrameworkCoverageTest,
"HyperTwist.FirstParty.Skill.PhaseS7A.DomainPackFrameworkCoverage",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS7ADomainPackFrameworkCoverageTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillDomainPackFrameworkState FrameworkState =
UHyperTwistContractLibrary::MakeSampleSkillDomainPackFrameworkState();
TestTrue(
TEXT("The sample S7-A domain-pack framework state should be structurally valid."),
FrameworkState.IsStructurallyValid()
);
TestEqual(
TEXT("S7-A should expose two bounded domain-pack framework skills."),
FrameworkState.SkillCount,
2
);
TestEqual(
TEXT("S7-A should expose one packaging-rules skill."),
FrameworkState.PackagingRuleSkillCount,
1
);
TestEqual(
TEXT("S7-A should expose one enable/disable-grouping skill."),
FrameworkState.EnableDisableGroupingSkillCount,
1
);
const FHyperTwistSkillDomainPackFrameworkSkill* PackagingSkill =
HyperTwistSkillPhaseS7ATestInternal::FindSkillById(
FrameworkState,
TEXT("skill/specify-domain-packaging")
);
TestNotNull(
TEXT("The specify-domain-packaging skill should exist."),
PackagingSkill
);
if (PackagingSkill != nullptr)
{
TestEqual(
TEXT("The specify-domain-packaging skill should bind to the first-party domain-packaging service."),
PackagingSkill->ServiceBindingId,
FString(TEXT("service/skills/specify-domain-packaging"))
);
TestTrue(
TEXT("The specify-domain-packaging skill should declare packaging-rules mode."),
PackagingSkill->bSpecifiesPackagingRules
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS7ABoundedFrameworkSafetyTest,
"HyperTwist.FirstParty.Skill.PhaseS7A.BoundedFrameworkSafety",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS7ABoundedFrameworkSafetyTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillDomainPackFrameworkState FrameworkState =
UHyperTwistContractLibrary::MakeSampleSkillDomainPackFrameworkState();
TestTrue(
TEXT("The sample S7-A domain-pack framework state should be structurally valid."),
FrameworkState.IsStructurallyValid()
);
TestTrue(
TEXT("Every live S7-A skill should read authoritative skill and framework state."),
FrameworkState.bEveryLiveSkillReadsAuthoritativeSkillAndFrameworkState
);
TestTrue(
TEXT("Every live S7-A skill should keep validation-harness coverage."),
FrameworkState.bEveryLiveSkillHasValidationHarnessCoverage
);
TestTrue(
TEXT("S7-A domain-pack framework skills should remain structurally bounded."),
FrameworkState.bDomainPackFrameworkRemainsBounded
);
TestTrue(
TEXT("S7-A domain-pack framework skills should require the landed plan/orchestration substrate."),
FrameworkState.bEverySkillRequiresPlanOrchestrationSubstrate
);
TestTrue(
TEXT("S7-A domain-pack framework skills should require the landed provider usage/ops audit substrate."),
FrameworkState.bEverySkillRequiresProviderUsageOperationsAuditSubstrate
);
TestTrue(
TEXT("S7-A should preserve placeholder domain-pack deferral."),
FrameworkState.bPlaceholderDomainPackDeferralRemainsPreserved
);
TestTrue(
TEXT("S7-A should avoid retained domain-pack claims."),
FrameworkState.bNoRetainedDomainPackClaims
);
TestTrue(
TEXT("S7-A should avoid creative/media widening."),
FrameworkState.bNoCreativeMediaWidening
);
const FHyperTwistSkillDomainPackFrameworkSkill* GroupingSkill =
HyperTwistSkillPhaseS7ATestInternal::FindSkillById(
FrameworkState,
TEXT("skill/specify-domain-pack-grouping")
);
TestNotNull(
TEXT("The specify-domain-pack-grouping skill should exist."),
GroupingSkill
);
if (GroupingSkill != nullptr)
{
TestTrue(
TEXT("The specify-domain-pack-grouping skill should declare enable/disable-grouping mode."),
GroupingSkill->bSpecifiesEnableDisableGrouping
);
TestEqual(
TEXT("The specify-domain-pack-grouping skill should depend on two landed plan/orchestration inputs."),
GroupingSkill->RequiredPlanOrchestrationSkillCount,
2
);
TestEqual(
TEXT("The specify-domain-pack-grouping skill should depend on three landed provider usage/ops audit inputs."),
GroupingSkill->RequiredProviderUsageAuditSkillCount,
3
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS7ASerializationRoundTripTest,
"HyperTwist.FirstParty.Skill.PhaseS7A.SerializationRoundTrip",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS7ASerializationRoundTripTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillDomainPackFrameworkState FrameworkState =
UHyperTwistContractLibrary::MakeSampleSkillDomainPackFrameworkState();
TestTrue(
TEXT("The sample S7-A domain-pack framework state should be structurally valid before serialization."),
FrameworkState.IsStructurallyValid()
);
const FString Json =
UHyperTwistContractLibrary::SerializeSkillDomainPackFrameworkStateToJson(
FrameworkState
);
TestTrue(
TEXT("Serialized S7-A JSON should include the retained-domain-pack guard field."),
Json.Contains(TEXT("bNoRetainedDomainPackClaims"))
);
FHyperTwistSkillDomainPackFrameworkState RoundTrippedState;
TestTrue(
TEXT("Deserializing the S7-A domain-pack framework JSON should succeed."),
UHyperTwistContractLibrary::DeserializeSkillDomainPackFrameworkStateFromJson(
Json,
RoundTrippedState
)
);
TestTrue(
TEXT("Round-tripped S7-A domain-pack framework state should remain structurally valid."),
RoundTrippedState.IsStructurallyValid()
);
TestEqual(
TEXT("Round-tripped S7-A skill count should match the original sample."),
RoundTrippedState.SkillCount,
FrameworkState.SkillCount
);
TestEqual(
TEXT("Round-tripped S7-A enable/disable-grouping count should match the original sample."),
RoundTrippedState.EnableDisableGroupingSkillCount,
FrameworkState.EnableDisableGroupingSkillCount
);
return true;
}
#endif

View file

@ -0,0 +1,216 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistBootstrap/HyperTwistContractLibrary.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistSkillPhaseS7BTestInternal
{
const FHyperTwistSkillRetainedDomainPackSkill* FindSkillById(
const FHyperTwistSkillRetainedDomainPackState& PackState,
const FString& SkillId
)
{
for (const FHyperTwistSkillRetainedDomainPackSkill& Skill :
PackState.Skills)
{
if (Skill.SkillId == SkillId)
{
return &Skill;
}
}
return nullptr;
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS7BRetainedDomainPackCoverageTest,
"HyperTwist.FirstParty.Skill.PhaseS7B.RetainedDomainPackCoverage",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS7BRetainedDomainPackCoverageTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillRetainedDomainPackState PackState =
UHyperTwistContractLibrary::MakeSampleSkillRetainedDomainPackState();
TestTrue(
TEXT("The sample S7-B retained-domain-pack state should be structurally valid."),
PackState.IsStructurallyValid()
);
TestEqual(
TEXT("S7-B should expose three bounded retained domain-pack skills."),
PackState.SkillCount,
3
);
TestEqual(
TEXT("S7-B should expose one training/replay review pack skill."),
PackState.TrainingReplayPackSkillCount,
1
);
TestEqual(
TEXT("S7-B should expose one curriculum/content pack skill."),
PackState.CurriculumContentPackSkillCount,
1
);
TestEqual(
TEXT("S7-B should expose one media/export pack skill."),
PackState.MediaExportPackSkillCount,
1
);
const FHyperTwistSkillRetainedDomainPackSkill* TrainingReplayPackSkill =
HyperTwistSkillPhaseS7BTestInternal::FindSkillById(
PackState,
TEXT("skill/review-training-replay-pack")
);
TestNotNull(
TEXT("The review-training-replay-pack skill should exist."),
TrainingReplayPackSkill
);
if (TrainingReplayPackSkill != nullptr)
{
TestEqual(
TEXT("The review-training-replay-pack skill should bind to the first-party retained training/replay pack service."),
TrainingReplayPackSkill->ServiceBindingId,
FString(TEXT("service/skills/review-training-replay-pack"))
);
TestTrue(
TEXT("The review-training-replay-pack skill should declare training/replay pack mode."),
TrainingReplayPackSkill->bReadsTrainingReplayState
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS7BBoundedRetainedPackSafetyTest,
"HyperTwist.FirstParty.Skill.PhaseS7B.BoundedRetainedPackSafety",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS7BBoundedRetainedPackSafetyTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillRetainedDomainPackState PackState =
UHyperTwistContractLibrary::MakeSampleSkillRetainedDomainPackState();
TestTrue(
TEXT("The sample S7-B retained-domain-pack state should be structurally valid."),
PackState.IsStructurallyValid()
);
TestTrue(
TEXT("Every live S7-B skill should read authoritative first-party domain state."),
PackState.bEveryLiveSkillReadsAuthoritativeFirstPartyDomainState
);
TestTrue(
TEXT("Every live S7-B skill should keep validation-harness coverage."),
PackState.bEveryLiveSkillHasValidationHarnessCoverage
);
TestTrue(
TEXT("S7-B retained domain packs should remain structurally bounded."),
PackState.bRetainedDomainPackLayerRemainsBounded
);
TestTrue(
TEXT("S7-B retained domain packs should require the landed domain-pack framework substrate."),
PackState.bEverySkillRequiresDomainPackFrameworkSubstrate
);
TestTrue(
TEXT("S7-B retained pack claims should remain first-party grounded."),
PackState.bRetainedPackClaimsRemainFirstPartyGrounded
);
TestTrue(
TEXT("S7-B should preserve deferral for unlanded packs."),
PackState.bUnlandedPackDeferralRemainsPreserved
);
TestTrue(
TEXT("S7-B should avoid creative adjunct widening."),
PackState.bNoCreativeAdjunctWidening
);
const FHyperTwistSkillRetainedDomainPackSkill* MediaExportPackSkill =
HyperTwistSkillPhaseS7BTestInternal::FindSkillById(
PackState,
TEXT("skill/prepare-media-export-pack")
);
TestNotNull(
TEXT("The prepare-media-export-pack skill should exist."),
MediaExportPackSkill
);
if (MediaExportPackSkill != nullptr)
{
TestTrue(
TEXT("The prepare-media-export-pack skill should declare media/export pack mode."),
MediaExportPackSkill->bReadsMediaExportState
);
TestEqual(
TEXT("The prepare-media-export-pack skill should depend on two landed domain-pack framework inputs."),
MediaExportPackSkill->RequiredDomainPackFrameworkSkillCount,
2
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS7BSerializationRoundTripTest,
"HyperTwist.FirstParty.Skill.PhaseS7B.SerializationRoundTrip",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS7BSerializationRoundTripTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillRetainedDomainPackState PackState =
UHyperTwistContractLibrary::MakeSampleSkillRetainedDomainPackState();
TestTrue(
TEXT("The sample S7-B retained-domain-pack state should be structurally valid before serialization."),
PackState.IsStructurallyValid()
);
const FString Json =
UHyperTwistContractLibrary::SerializeSkillRetainedDomainPackStateToJson(
PackState
);
TestTrue(
TEXT("Serialized S7-B JSON should include the creative-adjunct guard field."),
Json.Contains(TEXT("bNoCreativeAdjunctWidening"))
);
FHyperTwistSkillRetainedDomainPackState RoundTrippedState;
TestTrue(
TEXT("Deserializing the S7-B retained-domain-pack JSON should succeed."),
UHyperTwistContractLibrary::DeserializeSkillRetainedDomainPackStateFromJson(
Json,
RoundTrippedState
)
);
TestTrue(
TEXT("Round-tripped S7-B retained-domain-pack state should remain structurally valid."),
RoundTrippedState.IsStructurallyValid()
);
TestEqual(
TEXT("Round-tripped S7-B skill count should match the original sample."),
RoundTrippedState.SkillCount,
PackState.SkillCount
);
TestEqual(
TEXT("Round-tripped S7-B media/export pack count should match the original sample."),
RoundTrippedState.MediaExportPackSkillCount,
PackState.MediaExportPackSkillCount
);
return true;
}
#endif

View file

@ -0,0 +1,216 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistBootstrap/HyperTwistContractLibrary.h"
#if WITH_AUTOMATION_TESTS
namespace HyperTwistSkillPhaseS7CTestInternal
{
const FHyperTwistSkillCreativeMediaPackSkill* FindSkillById(
const FHyperTwistSkillCreativeMediaPackState& PackState,
const FString& SkillId
)
{
for (const FHyperTwistSkillCreativeMediaPackSkill& Skill :
PackState.Skills)
{
if (Skill.SkillId == SkillId)
{
return &Skill;
}
}
return nullptr;
}
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS7CCreativeMediaPackCoverageTest,
"HyperTwist.FirstParty.Skill.PhaseS7C.CreativeMediaPackCoverage",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS7CCreativeMediaPackCoverageTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillCreativeMediaPackState PackState =
UHyperTwistContractLibrary::MakeSampleSkillCreativeMediaPackState();
TestTrue(
TEXT("The sample S7-C creative/media-pack state should be structurally valid."),
PackState.IsStructurallyValid()
);
TestEqual(
TEXT("S7-C should expose three bounded optional creative/media pack skills."),
PackState.SkillCount,
3
);
TestEqual(
TEXT("S7-C should expose one replay-explainer pack skill."),
PackState.ReplayExplainerPackSkillCount,
1
);
TestEqual(
TEXT("S7-C should expose one media-parser pack skill."),
PackState.MediaParserPackSkillCount,
1
);
TestEqual(
TEXT("S7-C should expose one shared-fixture pack skill."),
PackState.SharedFixturePackSkillCount,
1
);
const FHyperTwistSkillCreativeMediaPackSkill* ReplayExplainerPackSkill =
HyperTwistSkillPhaseS7CTestInternal::FindSkillById(
PackState,
TEXT("skill/compose-replay-explainer-pack")
);
TestNotNull(
TEXT("The compose-replay-explainer-pack skill should exist."),
ReplayExplainerPackSkill
);
if (ReplayExplainerPackSkill != nullptr)
{
TestEqual(
TEXT("The compose-replay-explainer-pack skill should bind to the first-party replay-explainer pack service."),
ReplayExplainerPackSkill->ServiceBindingId,
FString(TEXT("service/skills/compose-replay-explainer-pack"))
);
TestTrue(
TEXT("The compose-replay-explainer-pack skill should declare replay-explainer mode."),
ReplayExplainerPackSkill->bReadsReplayExplainerState
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS7CCreativeMediaPackSafetyTest,
"HyperTwist.FirstParty.Skill.PhaseS7C.CreativeMediaPackSafety",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS7CCreativeMediaPackSafetyTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillCreativeMediaPackState PackState =
UHyperTwistContractLibrary::MakeSampleSkillCreativeMediaPackState();
TestTrue(
TEXT("The sample S7-C creative/media-pack state should be structurally valid."),
PackState.IsStructurallyValid()
);
TestTrue(
TEXT("Every live S7-C skill should read authoritative first-party creative/media state."),
PackState.bEveryLiveSkillReadsAuthoritativeFirstPartyCreativeMediaState
);
TestTrue(
TEXT("Every live S7-C skill should keep validation-harness coverage."),
PackState.bEveryLiveSkillHasValidationHarnessCoverage
);
TestTrue(
TEXT("S7-C creative/media packs should remain structurally bounded."),
PackState.bCreativeMediaPackLayerRemainsBounded
);
TestTrue(
TEXT("S7-C creative/media packs should require the landed retained-domain-pack substrate."),
PackState.bEverySkillRequiresRetainedDomainPackSubstrate
);
TestTrue(
TEXT("S7-C should keep creative/media adjuncts optional."),
PackState.bCreativeMediaAdjunctsRemainOptional
);
TestTrue(
TEXT("S7-C should avoid core runtime promotion."),
PackState.bNoCoreRuntimePromotion
);
TestTrue(
TEXT("S7-C should keep boundary-sensitive licensing explicit."),
PackState.bBoundarySensitiveLicensingRemainsExplicit
);
const FHyperTwistSkillCreativeMediaPackSkill* SharedFixturePackSkill =
HyperTwistSkillPhaseS7CTestInternal::FindSkillById(
PackState,
TEXT("skill/curate-shared-fixture-pack")
);
TestNotNull(
TEXT("The curate-shared-fixture-pack skill should exist."),
SharedFixturePackSkill
);
if (SharedFixturePackSkill != nullptr)
{
TestTrue(
TEXT("The curate-shared-fixture-pack skill should declare shared-fixture mode."),
SharedFixturePackSkill->bReadsSharedFixtureState
);
TestEqual(
TEXT("The curate-shared-fixture-pack skill should depend on one landed retained-domain-pack input."),
SharedFixturePackSkill->RequiredRetainedDomainPackSkillCount,
1
);
}
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistSkillPhaseS7CSerializationRoundTripTest,
"HyperTwist.FirstParty.Skill.PhaseS7C.SerializationRoundTrip",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistSkillPhaseS7CSerializationRoundTripTest::RunTest(
const FString& Parameters
)
{
const FHyperTwistSkillCreativeMediaPackState PackState =
UHyperTwistContractLibrary::MakeSampleSkillCreativeMediaPackState();
TestTrue(
TEXT("The sample S7-C creative/media-pack state should be structurally valid before serialization."),
PackState.IsStructurallyValid()
);
const FString Json =
UHyperTwistContractLibrary::SerializeSkillCreativeMediaPackStateToJson(
PackState
);
TestTrue(
TEXT("Serialized S7-C JSON should include the core-runtime guard field."),
Json.Contains(TEXT("bNoCoreRuntimePromotion"))
);
FHyperTwistSkillCreativeMediaPackState RoundTrippedState;
TestTrue(
TEXT("Deserializing the S7-C creative/media-pack JSON should succeed."),
UHyperTwistContractLibrary::DeserializeSkillCreativeMediaPackStateFromJson(
Json,
RoundTrippedState
)
);
TestTrue(
TEXT("Round-tripped S7-C creative/media-pack state should remain structurally valid."),
RoundTrippedState.IsStructurallyValid()
);
TestEqual(
TEXT("Round-tripped S7-C skill count should match the original sample."),
RoundTrippedState.SkillCount,
PackState.SkillCount
);
TestEqual(
TEXT("Round-tripped S7-C shared-fixture pack count should match the original sample."),
RoundTrippedState.SharedFixturePackSkillCount,
PackState.SharedFixturePackSkillCount
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAACompositeStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAA.CompositeStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAACompositeStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationCompositeStatePacketContract Contract;
TestTrue(
TEXT("The validation composite-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationCompositeStatePacketContract(
TEXT("validation-composite-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation composite-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-composite-state-packet-contract")
);
TestTrue(
TEXT("The validation composite-state packet contract must preserve benchmark-drift composite packets."),
Contract.PacketIds.Contains(TEXT("composite-state-packet/benchmark-drift-composite"))
);
TestTrue(
TEXT("The validation composite-state packet contract must preserve the bounded composite-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded composite-state packet"))
);
TestTrue(
TEXT("The validation composite-state packet contract must preserve the no-generic-composite-state-platform guard."),
Contract.CompositeGuardTags.Contains(TEXT("no-generic-composite-state-platform guard"))
);
TestTrue(
TEXT("The validation composite-state packet contract must keep generic composite-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic composite-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAAOngoingStateSynthesisBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAA.OngoingStateSyntheses",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAAOngoingStateSynthesisBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateSynthesisBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state synthesis boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateSynthesisBoundary(
TEXT("validation-ongoing-state-synthesis-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state synthesis boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-synthesis-boundary")
);
TestTrue(
TEXT("The validation ongoing-state synthesis boundary must preserve manual-waiver syntheses."),
Boundary.SynthesisIds.Contains(TEXT("ongoing-synthesis/manual-waiver-synthesized"))
);
TestTrue(
TEXT("The validation ongoing-state synthesis boundary must preserve the bounded ongoing-state synthesis surface."),
Boundary.SynthesisSurfaceTags.Contains(TEXT("bounded ongoing-state synthesis"))
);
TestTrue(
TEXT("The validation ongoing-state synthesis boundary must preserve the no-generic-ongoing-synthesis-platform guard."),
Boundary.SynthesisGuardTags.Contains(TEXT("no-generic-ongoing-synthesis-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state synthesis boundary must keep generic ongoing synthesis platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing synthesis platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJABAggregatedStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAB.AggregatedStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJABAggregatedStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationAggregatedStateLedgerContract Contract;
TestTrue(
TEXT("The validation aggregated-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationAggregatedStateLedgerContract(
TEXT("validation-aggregated-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation aggregated-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-aggregated-state-ledger-contract")
);
TestTrue(
TEXT("The validation aggregated-state ledger contract must preserve benchmark-drift aggregated entries."),
Contract.LedgerEntryIds.Contains(TEXT("aggregated-state-ledger/benchmark-drift-aggregated"))
);
TestTrue(
TEXT("The validation aggregated-state ledger contract must preserve the bounded aggregated-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded aggregated-state ledger"))
);
TestTrue(
TEXT("The validation aggregated-state ledger contract must preserve the no-generic-aggregated-state-platform guard."),
Contract.AggregatedGuardTags.Contains(TEXT("no-generic-aggregated-state-platform guard"))
);
TestTrue(
TEXT("The validation aggregated-state ledger contract must keep generic aggregated-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic aggregated-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJABOngoingStateConsolidationBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAB.OngoingStateConsolidations",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJABOngoingStateConsolidationBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateConsolidationBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state consolidation boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateConsolidationBoundary(
TEXT("validation-ongoing-state-consolidation-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state consolidation boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-consolidation-boundary")
);
TestTrue(
TEXT("The validation ongoing-state consolidation boundary must preserve manual-waiver consolidations."),
Boundary.ConsolidationIds.Contains(TEXT("ongoing-consolidation/manual-waiver-consolidated"))
);
TestTrue(
TEXT("The validation ongoing-state consolidation boundary must preserve the bounded ongoing-state consolidation surface."),
Boundary.ConsolidationSurfaceTags.Contains(TEXT("bounded ongoing-state consolidation"))
);
TestTrue(
TEXT("The validation ongoing-state consolidation boundary must preserve the no-generic-ongoing-consolidation-platform guard."),
Boundary.ConsolidationGuardTags.Contains(TEXT("no-generic-ongoing-consolidation-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state consolidation boundary must keep generic ongoing consolidation platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing consolidation platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,141 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAReplayIntegrityContractTest,
"HyperTwist.FirstParty.Validation.PhaseJA.ReplayIntegrity",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAReplayIntegrityContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingReplayIntegrityContract Contract;
TestTrue(
TEXT("The replay-integrity contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledReplayIntegrityContract(
TEXT("validation-replay-integrity-contract"),
Contract
)
);
TestEqual(
TEXT("The replay-integrity contract id must stay stable."),
Contract.ContractId,
TEXT("validation-replay-integrity-contract")
);
TestTrue(
TEXT("The replay-integrity contract must preserve the timer-start anchor."),
Contract.RequiredAnchorIds.Contains(TEXT("replay-anchor/timer-start"))
);
TestTrue(
TEXT("The replay-integrity contract must preserve the timer-start before solve-end guard."),
Contract.IntegrityGuardTags.Contains(TEXT("timer-start before solve-end guard"))
);
TestTrue(
TEXT("The replay-integrity contract must preserve imported-source sparse-anchor tolerance."),
Contract.ImportedReplayToleranceTags.Contains(TEXT("imported-source sparse-anchor tolerance"))
);
TestTrue(
TEXT("The replay-integrity contract must keep generic media timeline ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic media timeline ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAPuzzleValidationAndBenchmarkProfileTest,
"HyperTwist.FirstParty.Validation.PhaseJA.PuzzleValidationAndBenchmarkProfiles",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAPuzzleValidationAndBenchmarkProfileTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingPuzzleValidationContract PuzzleContract;
TestTrue(
TEXT("The puzzle-validation contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledPuzzleValidationContract(
TEXT("validation-puzzle-state-contract"),
PuzzleContract
)
);
TestTrue(
TEXT("The puzzle-validation contract must preserve solvability verification."),
PuzzleContract.ValidationSurfaceTags.Contains(TEXT("solvability verification"))
);
TestTrue(
TEXT("The puzzle-validation contract must preserve the is-solvable validation flag."),
PuzzleContract.RequiredResultFlags.Contains(TEXT("validation-flag/is-solvable"))
);
TestTrue(
TEXT("The puzzle-validation contract must keep external oracle replacement ownership excluded."),
PuzzleContract.ExplicitExclusions.Contains(TEXT("external oracle replacement ownership"))
);
FHyperTwistTrainingBenchmarkProfileBoundary Boundary;
TestTrue(
TEXT("The benchmark-profile boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledBenchmarkProfileBoundary(
TEXT("validation-benchmark-profile-boundary"),
Boundary
)
);
TestTrue(
TEXT("The benchmark-profile boundary must preserve the replay-review-integrity profile."),
Boundary.BenchmarkProfileIds.Contains(TEXT("benchmark-profile/replay-review-integrity"))
);
TestTrue(
TEXT("The benchmark-profile boundary must preserve comparison repeatability posture."),
Boundary.MetricSurfaceTags.Contains(TEXT("comparison repeatability posture"))
);
TestTrue(
TEXT("The benchmark-profile boundary must keep public benchmark ladder ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("public benchmark ladder ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAScorecardContractTest,
"HyperTwist.FirstParty.Validation.PhaseJA.Scorecards",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAScorecardContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationScorecardContract Contract;
TestTrue(
TEXT("The validation-scorecard contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationScorecardContract(
TEXT("validation-scorecard-contract"),
Contract
)
);
TestEqual(
TEXT("The validation-scorecard contract id must stay stable."),
Contract.ContractId,
TEXT("validation-scorecard-contract")
);
TestTrue(
TEXT("The validation-scorecard contract must preserve the regression-watch section."),
Contract.ScorecardSectionIds.Contains(TEXT("scorecard/regression-watch"))
);
TestTrue(
TEXT("The validation-scorecard contract must preserve benchmark drift note framing."),
Contract.OutcomeSurfaceTags.Contains(TEXT("benchmark drift note"))
);
TestTrue(
TEXT("The validation-scorecard contract must preserve anchor coverage regression."),
Contract.RegressionSignalTags.Contains(TEXT("anchor coverage regression"))
);
TestTrue(
TEXT("The validation-scorecard contract must keep cross-product release gate authority excluded."),
Contract.ExplicitExclusions.Contains(TEXT("cross-product release gate authority"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJACIntegratedStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAC.IntegratedStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJACIntegratedStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationIntegratedStatePacketContract Contract;
TestTrue(
TEXT("The validation integrated-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationIntegratedStatePacketContract(
TEXT("validation-integrated-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation integrated-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-integrated-state-packet-contract")
);
TestTrue(
TEXT("The validation integrated-state packet contract must preserve benchmark-drift integrated packets."),
Contract.PacketIds.Contains(TEXT("integrated-state-packet/benchmark-drift-integrated"))
);
TestTrue(
TEXT("The validation integrated-state packet contract must preserve the bounded integrated-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded integrated-state packet"))
);
TestTrue(
TEXT("The validation integrated-state packet contract must preserve the no-generic-integrated-state-platform guard."),
Contract.IntegratedGuardTags.Contains(TEXT("no-generic-integrated-state-platform guard"))
);
TestTrue(
TEXT("The validation integrated-state packet contract must keep generic integrated-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic integrated-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJACOngoingStateUnificationBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAC.OngoingStateUnifications",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJACOngoingStateUnificationBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateUnificationBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state unification boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateUnificationBoundary(
TEXT("validation-ongoing-state-unification-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state unification boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-unification-boundary")
);
TestTrue(
TEXT("The validation ongoing-state unification boundary must preserve manual-waiver unifications."),
Boundary.UnificationIds.Contains(TEXT("ongoing-unification/manual-waiver-unified"))
);
TestTrue(
TEXT("The validation ongoing-state unification boundary must preserve the bounded ongoing-state unification surface."),
Boundary.UnificationSurfaceTags.Contains(TEXT("bounded ongoing-state unification"))
);
TestTrue(
TEXT("The validation ongoing-state unification boundary must preserve the no-generic-ongoing-unification-platform guard."),
Boundary.UnificationGuardTags.Contains(TEXT("no-generic-ongoing-unification-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state unification boundary must keep generic ongoing unification platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing unification platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJADFusedStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAD.FusedStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJADFusedStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationFusedStateLedgerContract Contract;
TestTrue(
TEXT("The validation fused-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationFusedStateLedgerContract(
TEXT("validation-fused-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation fused-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-fused-state-ledger-contract")
);
TestTrue(
TEXT("The validation fused-state ledger contract must preserve benchmark-drift fused entries."),
Contract.LedgerEntryIds.Contains(TEXT("fused-state-ledger/benchmark-drift-fused"))
);
TestTrue(
TEXT("The validation fused-state ledger contract must preserve the bounded fused-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded fused-state ledger"))
);
TestTrue(
TEXT("The validation fused-state ledger contract must preserve the no-generic-fused-state-platform guard."),
Contract.FusedGuardTags.Contains(TEXT("no-generic-fused-state-platform guard"))
);
TestTrue(
TEXT("The validation fused-state ledger contract must keep generic fused-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic fused-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJADOngoingStateCoherenceBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAD.OngoingStateCoherences",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJADOngoingStateCoherenceBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateCoherenceBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state coherence boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateCoherenceBoundary(
TEXT("validation-ongoing-state-coherence-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state coherence boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-coherence-boundary")
);
TestTrue(
TEXT("The validation ongoing-state coherence boundary must preserve manual-waiver coherences."),
Boundary.CoherenceIds.Contains(TEXT("ongoing-coherence/manual-waiver-coherent"))
);
TestTrue(
TEXT("The validation ongoing-state coherence boundary must preserve the bounded ongoing-state coherence surface."),
Boundary.CoherenceSurfaceTags.Contains(TEXT("bounded ongoing-state coherence"))
);
TestTrue(
TEXT("The validation ongoing-state coherence boundary must preserve the no-generic-ongoing-coherence-platform guard."),
Boundary.CoherenceGuardTags.Contains(TEXT("no-generic-ongoing-coherence-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state coherence boundary must keep generic ongoing coherence platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing coherence platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAEMergedStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAE.MergedStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAEMergedStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationMergedStatePacketContract Contract;
TestTrue(
TEXT("The validation merged-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationMergedStatePacketContract(
TEXT("validation-merged-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation merged-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-merged-state-packet-contract")
);
TestTrue(
TEXT("The validation merged-state packet contract must preserve benchmark-drift merged packets."),
Contract.PacketIds.Contains(TEXT("merged-state-packet/benchmark-drift-merged"))
);
TestTrue(
TEXT("The validation merged-state packet contract must preserve the bounded merged-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded merged-state packet"))
);
TestTrue(
TEXT("The validation merged-state packet contract must preserve the no-generic-merged-state-platform guard."),
Contract.MergedGuardTags.Contains(TEXT("no-generic-merged-state-platform guard"))
);
TestTrue(
TEXT("The validation merged-state packet contract must keep generic merged-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic merged-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAEOngoingStateConcordanceBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAE.OngoingStateConcordances",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAEOngoingStateConcordanceBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateConcordanceBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state concordance boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateConcordanceBoundary(
TEXT("validation-ongoing-state-concordance-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state concordance boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-concordance-boundary")
);
TestTrue(
TEXT("The validation ongoing-state concordance boundary must preserve manual-waiver concordances."),
Boundary.ConcordanceIds.Contains(TEXT("ongoing-concordance/manual-waiver-concordant"))
);
TestTrue(
TEXT("The validation ongoing-state concordance boundary must preserve the bounded ongoing-state concordance surface."),
Boundary.ConcordanceSurfaceTags.Contains(TEXT("bounded ongoing-state concordance"))
);
TestTrue(
TEXT("The validation ongoing-state concordance boundary must preserve the no-generic-ongoing-concordance-platform guard."),
Boundary.ConcordanceGuardTags.Contains(TEXT("no-generic-ongoing-concordance-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state concordance boundary must keep generic ongoing concordance platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing concordance platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAFBlendedStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAF.BlendedStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAFBlendedStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationBlendedStateLedgerContract Contract;
TestTrue(
TEXT("The validation blended-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationBlendedStateLedgerContract(
TEXT("validation-blended-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation blended-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-blended-state-ledger-contract")
);
TestTrue(
TEXT("The validation blended-state ledger contract must preserve benchmark-drift blended entries."),
Contract.LedgerEntryIds.Contains(TEXT("blended-state-ledger/benchmark-drift-blended"))
);
TestTrue(
TEXT("The validation blended-state ledger contract must preserve the bounded blended-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded blended-state ledger"))
);
TestTrue(
TEXT("The validation blended-state ledger contract must preserve the no-generic-blended-state-platform guard."),
Contract.BlendedGuardTags.Contains(TEXT("no-generic-blended-state-platform guard"))
);
TestTrue(
TEXT("The validation blended-state ledger contract must keep generic blended-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic blended-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAFOngoingStateCorrespondenceBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAF.OngoingStateCorrespondences",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAFOngoingStateCorrespondenceBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateCorrespondenceBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state correspondence boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateCorrespondenceBoundary(
TEXT("validation-ongoing-state-correspondence-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state correspondence boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-correspondence-boundary")
);
TestTrue(
TEXT("The validation ongoing-state correspondence boundary must preserve manual-waiver correspondences."),
Boundary.CorrespondenceIds.Contains(TEXT("ongoing-correspondence/manual-waiver-correspondent"))
);
TestTrue(
TEXT("The validation ongoing-state correspondence boundary must preserve the bounded ongoing-state correspondence surface."),
Boundary.CorrespondenceSurfaceTags.Contains(TEXT("bounded ongoing-state correspondence"))
);
TestTrue(
TEXT("The validation ongoing-state correspondence boundary must preserve the no-generic-ongoing-correspondence-platform guard."),
Boundary.CorrespondenceGuardTags.Contains(TEXT("no-generic-ongoing-correspondence-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state correspondence boundary must keep generic ongoing correspondence platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing correspondence platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAGInterlacedStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAG.InterlacedStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAGInterlacedStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationInterlacedStatePacketContract Contract;
TestTrue(
TEXT("The validation interlaced-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationInterlacedStatePacketContract(
TEXT("validation-interlaced-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation interlaced-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-interlaced-state-packet-contract")
);
TestTrue(
TEXT("The validation interlaced-state packet contract must preserve benchmark-drift interlaced packets."),
Contract.PacketIds.Contains(TEXT("interlaced-state-packet/benchmark-drift-interlaced"))
);
TestTrue(
TEXT("The validation interlaced-state packet contract must preserve the bounded interlaced-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded interlaced-state packet"))
);
TestTrue(
TEXT("The validation interlaced-state packet contract must preserve the no-generic-interlaced-state-platform guard."),
Contract.InterlacedGuardTags.Contains(TEXT("no-generic-interlaced-state-platform guard"))
);
TestTrue(
TEXT("The validation interlaced-state packet contract must keep generic interlaced-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic interlaced-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAGOngoingStateAffinityBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAG.OngoingStateAffinities",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAGOngoingStateAffinityBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateAffinityBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state affinity boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateAffinityBoundary(
TEXT("validation-ongoing-state-affinity-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state affinity boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-affinity-boundary")
);
TestTrue(
TEXT("The validation ongoing-state affinity boundary must preserve manual-waiver affinities."),
Boundary.AffinityIds.Contains(TEXT("ongoing-affinity/manual-waiver-affined"))
);
TestTrue(
TEXT("The validation ongoing-state affinity boundary must preserve the bounded ongoing-state affinity surface."),
Boundary.AffinitySurfaceTags.Contains(TEXT("bounded ongoing-state affinity"))
);
TestTrue(
TEXT("The validation ongoing-state affinity boundary must preserve the no-generic-ongoing-affinity-platform guard."),
Boundary.AffinityGuardTags.Contains(TEXT("no-generic-ongoing-affinity-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state affinity boundary must keep generic ongoing affinity platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing affinity platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAHWovenStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAH.WovenStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAHWovenStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationWovenStateLedgerContract Contract;
TestTrue(
TEXT("The validation woven-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationWovenStateLedgerContract(
TEXT("validation-woven-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation woven-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-woven-state-ledger-contract")
);
TestTrue(
TEXT("The validation woven-state ledger contract must preserve benchmark-drift woven entries."),
Contract.LedgerEntryIds.Contains(TEXT("woven-state-ledger/benchmark-drift-woven"))
);
TestTrue(
TEXT("The validation woven-state ledger contract must preserve the bounded woven-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded woven-state ledger"))
);
TestTrue(
TEXT("The validation woven-state ledger contract must preserve the no-generic-woven-state-platform guard."),
Contract.WovenGuardTags.Contains(TEXT("no-generic-woven-state-platform guard"))
);
TestTrue(
TEXT("The validation woven-state ledger contract must keep generic woven-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic woven-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAHOngoingStateResonanceBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAH.OngoingStateResonances",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAHOngoingStateResonanceBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateResonanceBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state resonance boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateResonanceBoundary(
TEXT("validation-ongoing-state-resonance-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state resonance boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-resonance-boundary")
);
TestTrue(
TEXT("The validation ongoing-state resonance boundary must preserve manual-waiver resonances."),
Boundary.ResonanceIds.Contains(TEXT("ongoing-resonance/manual-waiver-resonant"))
);
TestTrue(
TEXT("The validation ongoing-state resonance boundary must preserve the bounded ongoing-state resonance surface."),
Boundary.ResonanceSurfaceTags.Contains(TEXT("bounded ongoing-state resonance"))
);
TestTrue(
TEXT("The validation ongoing-state resonance boundary must preserve the no-generic-ongoing-resonance-platform guard."),
Boundary.ResonanceGuardTags.Contains(TEXT("no-generic-ongoing-resonance-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state resonance boundary must keep generic ongoing resonance platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing resonance platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAIKnottedStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAI.KnottedStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAIKnottedStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationKnottedStatePacketContract Contract;
TestTrue(
TEXT("The validation knotted-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationKnottedStatePacketContract(
TEXT("validation-knotted-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation knotted-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-knotted-state-packet-contract")
);
TestTrue(
TEXT("The validation knotted-state packet contract must preserve benchmark-drift knotted packets."),
Contract.PacketIds.Contains(TEXT("knotted-state-packet/benchmark-drift-knotted"))
);
TestTrue(
TEXT("The validation knotted-state packet contract must preserve the bounded knotted-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded knotted-state packet"))
);
TestTrue(
TEXT("The validation knotted-state packet contract must preserve the no-generic-knotted-state-platform guard."),
Contract.KnottedGuardTags.Contains(TEXT("no-generic-knotted-state-platform guard"))
);
TestTrue(
TEXT("The validation knotted-state packet contract must keep generic knotted-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic knotted-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAIOngoingStateHarmonicBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAI.OngoingStateHarmonics",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAIOngoingStateHarmonicBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateHarmonicBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state harmonic boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateHarmonicBoundary(
TEXT("validation-ongoing-state-harmonic-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state harmonic boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-harmonic-boundary")
);
TestTrue(
TEXT("The validation ongoing-state harmonic boundary must preserve manual-waiver harmonics."),
Boundary.HarmonicIds.Contains(TEXT("ongoing-harmonic/manual-waiver-harmonic"))
);
TestTrue(
TEXT("The validation ongoing-state harmonic boundary must preserve the bounded ongoing-state harmonic surface."),
Boundary.HarmonicSurfaceTags.Contains(TEXT("bounded ongoing-state harmonic"))
);
TestTrue(
TEXT("The validation ongoing-state harmonic boundary must preserve the no-generic-ongoing-harmonic-platform guard."),
Boundary.HarmonicGuardTags.Contains(TEXT("no-generic-ongoing-harmonic-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state harmonic boundary must keep generic ongoing harmonic platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing harmonic platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAJBraidedStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAJ.BraidedStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAJBraidedStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationBraidedStateLedgerContract Contract;
TestTrue(
TEXT("The validation braided-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationBraidedStateLedgerContract(
TEXT("validation-braided-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation braided-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-braided-state-ledger-contract")
);
TestTrue(
TEXT("The validation braided-state ledger contract must preserve benchmark-drift braided entries."),
Contract.LedgerEntryIds.Contains(TEXT("braided-state-ledger/benchmark-drift-braided"))
);
TestTrue(
TEXT("The validation braided-state ledger contract must preserve the bounded braided-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded braided-state ledger"))
);
TestTrue(
TEXT("The validation braided-state ledger contract must preserve the no-generic-braided-state-platform guard."),
Contract.BraidedGuardTags.Contains(TEXT("no-generic-braided-state-platform guard"))
);
TestTrue(
TEXT("The validation braided-state ledger contract must keep generic braided-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic braided-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAJOngoingStateCadenceBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAJ.OngoingStateCadences",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAJOngoingStateCadenceBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateCadenceBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state cadence boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateCadenceBoundary(
TEXT("validation-ongoing-state-cadence-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state cadence boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-cadence-boundary")
);
TestTrue(
TEXT("The validation ongoing-state cadence boundary must preserve manual-waiver cadences."),
Boundary.CadenceIds.Contains(TEXT("ongoing-cadence/manual-waiver-cadenced"))
);
TestTrue(
TEXT("The validation ongoing-state cadence boundary must preserve the bounded ongoing-state cadence surface."),
Boundary.CadenceSurfaceTags.Contains(TEXT("bounded ongoing-state cadence"))
);
TestTrue(
TEXT("The validation ongoing-state cadence boundary must preserve the no-generic-ongoing-cadence-platform guard."),
Boundary.CadenceGuardTags.Contains(TEXT("no-generic-ongoing-cadence-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state cadence boundary must keep generic ongoing cadence platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing cadence platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAKLoopedStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAK.LoopedStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAKLoopedStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationLoopedStatePacketContract Contract;
TestTrue(
TEXT("The validation looped-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationLoopedStatePacketContract(
TEXT("validation-looped-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation looped-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-looped-state-packet-contract")
);
TestTrue(
TEXT("The validation looped-state packet contract must preserve benchmark-drift looped packets."),
Contract.PacketIds.Contains(TEXT("looped-state-packet/benchmark-drift-looped"))
);
TestTrue(
TEXT("The validation looped-state packet contract must preserve the bounded looped-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded looped-state packet"))
);
TestTrue(
TEXT("The validation looped-state packet contract must preserve the no-generic-looped-state-platform guard."),
Contract.LoopedGuardTags.Contains(TEXT("no-generic-looped-state-platform guard"))
);
TestTrue(
TEXT("The validation looped-state packet contract must keep generic looped-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic looped-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAKOngoingStateRefrainBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAK.OngoingStateRefrains",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAKOngoingStateRefrainBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateRefrainBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state refrain boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateRefrainBoundary(
TEXT("validation-ongoing-state-refrain-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state refrain boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-refrain-boundary")
);
TestTrue(
TEXT("The validation ongoing-state refrain boundary must preserve manual-waiver refrains."),
Boundary.RefrainIds.Contains(TEXT("ongoing-refrain/manual-waiver-refrained"))
);
TestTrue(
TEXT("The validation ongoing-state refrain boundary must preserve the bounded ongoing-state refrain surface."),
Boundary.RefrainSurfaceTags.Contains(TEXT("bounded ongoing-state refrain"))
);
TestTrue(
TEXT("The validation ongoing-state refrain boundary must preserve the no-generic-ongoing-refrain-platform guard."),
Boundary.RefrainGuardTags.Contains(TEXT("no-generic-ongoing-refrain-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state refrain boundary must keep generic ongoing refrain platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing refrain platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJALSpiraledStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAL.SpiraledStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJALSpiraledStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationSpiraledStateLedgerContract Contract;
TestTrue(
TEXT("The validation spiraled-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationSpiraledStateLedgerContract(
TEXT("validation-spiraled-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation spiraled-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-spiraled-state-ledger-contract")
);
TestTrue(
TEXT("The validation spiraled-state ledger contract must preserve benchmark-drift spiraled entries."),
Contract.LedgerEntryIds.Contains(TEXT("spiraled-state-ledger/benchmark-drift-spiraled"))
);
TestTrue(
TEXT("The validation spiraled-state ledger contract must preserve the bounded spiraled-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded spiraled-state ledger"))
);
TestTrue(
TEXT("The validation spiraled-state ledger contract must preserve the no-generic-spiraled-state-platform guard."),
Contract.SpiraledGuardTags.Contains(TEXT("no-generic-spiraled-state-platform guard"))
);
TestTrue(
TEXT("The validation spiraled-state ledger contract must keep generic spiraled-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic spiraled-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJALOngoingStateChorusBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAL.OngoingStateChoruses",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJALOngoingStateChorusBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateChorusBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state chorus boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateChorusBoundary(
TEXT("validation-ongoing-state-chorus-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state chorus boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-chorus-boundary")
);
TestTrue(
TEXT("The validation ongoing-state chorus boundary must preserve manual-waiver choruses."),
Boundary.ChorusIds.Contains(TEXT("ongoing-chorus/manual-waiver-chorused"))
);
TestTrue(
TEXT("The validation ongoing-state chorus boundary must preserve the bounded ongoing-state chorus surface."),
Boundary.ChorusSurfaceTags.Contains(TEXT("bounded ongoing-state chorus"))
);
TestTrue(
TEXT("The validation ongoing-state chorus boundary must preserve the no-generic-ongoing-chorus-platform guard."),
Boundary.ChorusGuardTags.Contains(TEXT("no-generic-ongoing-chorus-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state chorus boundary must keep generic ongoing chorus platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing chorus platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAMCoiledStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAM.CoiledStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAMCoiledStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationCoiledStatePacketContract Contract;
TestTrue(
TEXT("The validation coiled-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationCoiledStatePacketContract(
TEXT("validation-coiled-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation coiled-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-coiled-state-packet-contract")
);
TestTrue(
TEXT("The validation coiled-state packet contract must preserve benchmark-drift coiled packets."),
Contract.PacketIds.Contains(TEXT("coiled-state-packet/benchmark-drift-coiled"))
);
TestTrue(
TEXT("The validation coiled-state packet contract must preserve the bounded coiled-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded coiled-state packet"))
);
TestTrue(
TEXT("The validation coiled-state packet contract must preserve the no-generic-coiled-state-platform guard."),
Contract.CoiledGuardTags.Contains(TEXT("no-generic-coiled-state-platform guard"))
);
TestTrue(
TEXT("The validation coiled-state packet contract must keep generic coiled-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic coiled-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAMOngoingStateRepriseBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAM.OngoingStateReprises",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAMOngoingStateRepriseBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateRepriseBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state reprise boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateRepriseBoundary(
TEXT("validation-ongoing-state-reprise-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state reprise boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-reprise-boundary")
);
TestTrue(
TEXT("The validation ongoing-state reprise boundary must preserve manual-waiver reprises."),
Boundary.RepriseIds.Contains(TEXT("ongoing-reprise/manual-waiver-reprised"))
);
TestTrue(
TEXT("The validation ongoing-state reprise boundary must preserve the bounded ongoing-state reprise surface."),
Boundary.RepriseSurfaceTags.Contains(TEXT("bounded ongoing-state reprise"))
);
TestTrue(
TEXT("The validation ongoing-state reprise boundary must preserve the no-generic-ongoing-reprise-platform guard."),
Boundary.RepriseGuardTags.Contains(TEXT("no-generic-ongoing-reprise-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state reprise boundary must keep generic ongoing reprise platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing reprise platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJANHelixedStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAN.HelixedStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJANHelixedStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationHelixedStateLedgerContract Contract;
TestTrue(
TEXT("The validation helixed-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationHelixedStateLedgerContract(
TEXT("validation-helixed-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation helixed-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-helixed-state-ledger-contract")
);
TestTrue(
TEXT("The validation helixed-state ledger contract must preserve benchmark-drift helixed entries."),
Contract.LedgerEntryIds.Contains(TEXT("helixed-state-ledger/benchmark-drift-helixed"))
);
TestTrue(
TEXT("The validation helixed-state ledger contract must preserve the bounded helixed-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded helixed-state ledger"))
);
TestTrue(
TEXT("The validation helixed-state ledger contract must preserve the no-generic-helixed-state-platform guard."),
Contract.HelixedGuardTags.Contains(TEXT("no-generic-helixed-state-platform guard"))
);
TestTrue(
TEXT("The validation helixed-state ledger contract must keep generic helixed-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic helixed-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJANOngoingStateEchoBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAN.OngoingStateEchoes",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJANOngoingStateEchoBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateEchoBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state echo boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateEchoBoundary(
TEXT("validation-ongoing-state-echo-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state echo boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-echo-boundary")
);
TestTrue(
TEXT("The validation ongoing-state echo boundary must preserve manual-waiver echoes."),
Boundary.EchoIds.Contains(TEXT("ongoing-echo/manual-waiver-echoed"))
);
TestTrue(
TEXT("The validation ongoing-state echo boundary must preserve the bounded ongoing-state echo surface."),
Boundary.EchoSurfaceTags.Contains(TEXT("bounded ongoing-state echo"))
);
TestTrue(
TEXT("The validation ongoing-state echo boundary must preserve the no-generic-ongoing-echo-platform guard."),
Boundary.EchoGuardTags.Contains(TEXT("no-generic-ongoing-echo-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state echo boundary must keep generic ongoing echo platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing echo platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAOTwistedStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAO.TwistedStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAOTwistedStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationTwistedStatePacketContract Contract;
TestTrue(
TEXT("The validation twisted-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationTwistedStatePacketContract(
TEXT("validation-twisted-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation twisted-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-twisted-state-packet-contract")
);
TestTrue(
TEXT("The validation twisted-state packet contract must preserve benchmark-drift twisted packets."),
Contract.PacketIds.Contains(TEXT("twisted-state-packet/benchmark-drift-twisted"))
);
TestTrue(
TEXT("The validation twisted-state packet contract must preserve the bounded twisted-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded twisted-state packet"))
);
TestTrue(
TEXT("The validation twisted-state packet contract must preserve the no-generic-twisted-state-platform guard."),
Contract.TwistedGuardTags.Contains(TEXT("no-generic-twisted-state-platform guard"))
);
TestTrue(
TEXT("The validation twisted-state packet contract must keep generic twisted-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic twisted-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAOOngoingStateReflectionBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAO.OngoingStateReflections",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAOOngoingStateReflectionBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateReflectionBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state reflection boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateReflectionBoundary(
TEXT("validation-ongoing-state-reflection-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state reflection boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-reflection-boundary")
);
TestTrue(
TEXT("The validation ongoing-state reflection boundary must preserve manual-waiver reflections."),
Boundary.ReflectionIds.Contains(TEXT("ongoing-reflection/manual-waiver-reflected"))
);
TestTrue(
TEXT("The validation ongoing-state reflection boundary must preserve the bounded ongoing-state reflection surface."),
Boundary.ReflectionSurfaceTags.Contains(TEXT("bounded ongoing-state reflection"))
);
TestTrue(
TEXT("The validation ongoing-state reflection boundary must preserve the no-generic-ongoing-reflection-platform guard."),
Boundary.ReflectionGuardTags.Contains(TEXT("no-generic-ongoing-reflection-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state reflection boundary must keep generic ongoing reflection platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing reflection platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAPWoundStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAP.WoundStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAPWoundStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationWoundStateLedgerContract Contract;
TestTrue(
TEXT("The validation wound-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationWoundStateLedgerContract(
TEXT("validation-wound-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation wound-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-wound-state-ledger-contract")
);
TestTrue(
TEXT("The validation wound-state ledger contract must preserve benchmark-drift wound entries."),
Contract.LedgerEntryIds.Contains(TEXT("wound-state-ledger/benchmark-drift-wound"))
);
TestTrue(
TEXT("The validation wound-state ledger contract must preserve the bounded wound-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded wound-state ledger"))
);
TestTrue(
TEXT("The validation wound-state ledger contract must preserve the no-generic-wound-state-platform guard."),
Contract.WoundGuardTags.Contains(TEXT("no-generic-wound-state-platform guard"))
);
TestTrue(
TEXT("The validation wound-state ledger contract must keep generic wound-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic wound-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAPOngoingStateReverberationBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAP.OngoingStateReverberations",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAPOngoingStateReverberationBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateReverberationBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state reverberation boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateReverberationBoundary(
TEXT("validation-ongoing-state-reverberation-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state reverberation boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-reverberation-boundary")
);
TestTrue(
TEXT("The validation ongoing-state reverberation boundary must preserve manual-waiver reverberations."),
Boundary.ReverberationIds.Contains(TEXT("ongoing-reverberation/manual-waiver-reverberated"))
);
TestTrue(
TEXT("The validation ongoing-state reverberation boundary must preserve the bounded ongoing-state reverberation surface."),
Boundary.ReverberationSurfaceTags.Contains(TEXT("bounded ongoing-state reverberation"))
);
TestTrue(
TEXT("The validation ongoing-state reverberation boundary must preserve the no-generic-ongoing-reverberation-platform guard."),
Boundary.ReverberationGuardTags.Contains(TEXT("no-generic-ongoing-reverberation-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state reverberation boundary must keep generic ongoing reverberation platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing reverberation platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAQFoldedStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAQ.FoldedStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAQFoldedStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationFoldedStatePacketContract Contract;
TestTrue(
TEXT("The validation folded-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationFoldedStatePacketContract(
TEXT("validation-folded-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation folded-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-folded-state-packet-contract")
);
TestTrue(
TEXT("The validation folded-state packet contract must preserve benchmark-drift folded packets."),
Contract.PacketIds.Contains(TEXT("folded-state-packet/benchmark-drift-folded"))
);
TestTrue(
TEXT("The validation folded-state packet contract must preserve the bounded folded-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded folded-state packet"))
);
TestTrue(
TEXT("The validation folded-state packet contract must preserve the no-generic-folded-state-platform guard."),
Contract.FoldedGuardTags.Contains(TEXT("no-generic-folded-state-platform guard"))
);
TestTrue(
TEXT("The validation folded-state packet contract must keep generic folded-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic folded-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAQOngoingStateAftertoneBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAQ.OngoingStateAftertones",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAQOngoingStateAftertoneBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateAftertoneBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state aftertone boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateAftertoneBoundary(
TEXT("validation-ongoing-state-aftertone-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state aftertone boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-aftertone-boundary")
);
TestTrue(
TEXT("The validation ongoing-state aftertone boundary must preserve manual-waiver aftertones."),
Boundary.AftertoneIds.Contains(TEXT("ongoing-aftertone/manual-waiver-aftertoned"))
);
TestTrue(
TEXT("The validation ongoing-state aftertone boundary must preserve the bounded ongoing-state aftertone surface."),
Boundary.AftertoneSurfaceTags.Contains(TEXT("bounded ongoing-state aftertone"))
);
TestTrue(
TEXT("The validation ongoing-state aftertone boundary must preserve the no-generic-ongoing-aftertone-platform guard."),
Boundary.AftertoneGuardTags.Contains(TEXT("no-generic-ongoing-aftertone-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state aftertone boundary must keep generic ongoing aftertone platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing aftertone platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJARCreasedStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAR.CreasedStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJARCreasedStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationCreasedStateLedgerContract Contract;
TestTrue(
TEXT("The validation creased-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationCreasedStateLedgerContract(
TEXT("validation-creased-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation creased-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-creased-state-ledger-contract")
);
TestTrue(
TEXT("The validation creased-state ledger contract must preserve benchmark-drift creased entries."),
Contract.LedgerEntryIds.Contains(TEXT("creased-state-ledger/benchmark-drift-creased"))
);
TestTrue(
TEXT("The validation creased-state ledger contract must preserve the bounded creased-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded creased-state ledger"))
);
TestTrue(
TEXT("The validation creased-state ledger contract must preserve the no-generic-creased-state-platform guard."),
Contract.CreasedGuardTags.Contains(TEXT("no-generic-creased-state-platform guard"))
);
TestTrue(
TEXT("The validation creased-state ledger contract must keep generic creased-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic creased-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAROngoingStateResidueBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAR.OngoingStateResidues",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAROngoingStateResidueBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateResidueBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state residue boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateResidueBoundary(
TEXT("validation-ongoing-state-residue-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state residue boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-residue-boundary")
);
TestTrue(
TEXT("The validation ongoing-state residue boundary must preserve manual-waiver residues."),
Boundary.ResidueIds.Contains(TEXT("ongoing-residue/manual-waiver-residual"))
);
TestTrue(
TEXT("The validation ongoing-state residue boundary must preserve the bounded ongoing-state residue surface."),
Boundary.ResidueSurfaceTags.Contains(TEXT("bounded ongoing-state residue"))
);
TestTrue(
TEXT("The validation ongoing-state residue boundary must preserve the no-generic-ongoing-residue-platform guard."),
Boundary.ResidueGuardTags.Contains(TEXT("no-generic-ongoing-residue-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state residue boundary must keep generic ongoing residue platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing residue platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJASPleatedStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAS.PleatedStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJASPleatedStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationPleatedStatePacketContract Contract;
TestTrue(
TEXT("The validation pleated-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationPleatedStatePacketContract(
TEXT("validation-pleated-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation pleated-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-pleated-state-packet-contract")
);
TestTrue(
TEXT("The validation pleated-state packet contract must preserve benchmark-drift pleated packets."),
Contract.PacketIds.Contains(TEXT("pleated-state-packet/benchmark-drift-pleated"))
);
TestTrue(
TEXT("The validation pleated-state packet contract must preserve the bounded pleated-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded pleated-state packet"))
);
TestTrue(
TEXT("The validation pleated-state packet contract must preserve the no-generic-pleated-state-platform guard."),
Contract.PleatedGuardTags.Contains(TEXT("no-generic-pleated-state-platform guard"))
);
TestTrue(
TEXT("The validation pleated-state packet contract must keep generic pleated-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic pleated-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJASOngoingStateRemnantBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAS.OngoingStateRemnants",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJASOngoingStateRemnantBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateRemnantBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state remnant boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateRemnantBoundary(
TEXT("validation-ongoing-state-remnant-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state remnant boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-remnant-boundary")
);
TestTrue(
TEXT("The validation ongoing-state remnant boundary must preserve manual-waiver remnants."),
Boundary.RemnantIds.Contains(TEXT("ongoing-remnant/manual-waiver-remnant"))
);
TestTrue(
TEXT("The validation ongoing-state remnant boundary must preserve the bounded ongoing-state remnant surface."),
Boundary.RemnantSurfaceTags.Contains(TEXT("bounded ongoing-state remnant"))
);
TestTrue(
TEXT("The validation ongoing-state remnant boundary must preserve the no-generic-ongoing-remnant-platform guard."),
Boundary.RemnantGuardTags.Contains(TEXT("no-generic-ongoing-remnant-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state remnant boundary must keep generic ongoing remnant platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing remnant platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJATCrimpedStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAT.CrimpedStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJATCrimpedStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationCrimpedStateLedgerContract Contract;
TestTrue(
TEXT("The validation crimped-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationCrimpedStateLedgerContract(
TEXT("validation-crimped-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation crimped-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-crimped-state-ledger-contract")
);
TestTrue(
TEXT("The validation crimped-state ledger contract must preserve benchmark-drift crimped ledgers."),
Contract.LedgerIds.Contains(TEXT("crimped-state-ledger/benchmark-drift-crimped"))
);
TestTrue(
TEXT("The validation crimped-state ledger contract must preserve the bounded crimped-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded crimped-state ledger"))
);
TestTrue(
TEXT("The validation crimped-state ledger contract must preserve the no-generic-crimped-state-platform guard."),
Contract.CrimpedGuardTags.Contains(TEXT("no-generic-crimped-state-platform guard"))
);
TestTrue(
TEXT("The validation crimped-state ledger contract must keep generic crimped-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic crimped-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJATOngoingStateImprintBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAT.OngoingStateImprints",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJATOngoingStateImprintBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateImprintBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state imprint boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateImprintBoundary(
TEXT("validation-ongoing-state-imprint-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state imprint boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-imprint-boundary")
);
TestTrue(
TEXT("The validation ongoing-state imprint boundary must preserve manual-waiver imprints."),
Boundary.ImprintIds.Contains(TEXT("ongoing-imprint/manual-waiver-imprint"))
);
TestTrue(
TEXT("The validation ongoing-state imprint boundary must preserve the bounded ongoing-state imprint surface."),
Boundary.ImprintSurfaceTags.Contains(TEXT("bounded ongoing-state imprint"))
);
TestTrue(
TEXT("The validation ongoing-state imprint boundary must preserve the no-generic-ongoing-imprint-platform guard."),
Boundary.ImprintGuardTags.Contains(TEXT("no-generic-ongoing-imprint-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state imprint boundary must keep generic ongoing imprint platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing imprint platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAUCorrugatedStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAU.CorrugatedStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAUCorrugatedStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationCorrugatedStatePacketContract Contract;
TestTrue(
TEXT("The validation corrugated-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationCorrugatedStatePacketContract(
TEXT("validation-corrugated-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation corrugated-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-corrugated-state-packet-contract")
);
TestTrue(
TEXT("The validation corrugated-state packet contract must preserve benchmark-drift corrugated packets."),
Contract.PacketIds.Contains(TEXT("corrugated-state-packet/benchmark-drift-corrugated"))
);
TestTrue(
TEXT("The validation corrugated-state packet contract must preserve the bounded corrugated-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded corrugated-state packet"))
);
TestTrue(
TEXT("The validation corrugated-state packet contract must preserve the no-generic-corrugated-state-platform guard."),
Contract.CorrugatedGuardTags.Contains(TEXT("no-generic-corrugated-state-platform guard"))
);
TestTrue(
TEXT("The validation corrugated-state packet contract must keep generic corrugated-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic corrugated-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAUOngoingStateTraceBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAU.OngoingStateTraces",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAUOngoingStateTraceBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateTraceBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state trace boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateTraceBoundary(
TEXT("validation-ongoing-state-trace-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state trace boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-trace-boundary")
);
TestTrue(
TEXT("The validation ongoing-state trace boundary must preserve manual-waiver traces."),
Boundary.TraceIds.Contains(TEXT("ongoing-trace/manual-waiver-trace"))
);
TestTrue(
TEXT("The validation ongoing-state trace boundary must preserve the bounded ongoing-state trace surface."),
Boundary.TraceSurfaceTags.Contains(TEXT("bounded ongoing-state trace"))
);
TestTrue(
TEXT("The validation ongoing-state trace boundary must preserve the no-generic-ongoing-trace-platform guard."),
Boundary.TraceGuardTags.Contains(TEXT("no-generic-ongoing-trace-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state trace boundary must keep generic ongoing trace platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing trace platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAVRibbedStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAV.RibbedStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAVRibbedStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationRibbedStateLedgerContract Contract;
TestTrue(
TEXT("The validation ribbed-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationRibbedStateLedgerContract(
TEXT("validation-ribbed-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation ribbed-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-ribbed-state-ledger-contract")
);
TestTrue(
TEXT("The validation ribbed-state ledger contract must preserve benchmark-drift ribbed ledgers."),
Contract.LedgerIds.Contains(TEXT("ribbed-state-ledger/benchmark-drift-ribbed"))
);
TestTrue(
TEXT("The validation ribbed-state ledger contract must preserve the bounded ribbed-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded ribbed-state ledger"))
);
TestTrue(
TEXT("The validation ribbed-state ledger contract must preserve the no-generic-ribbed-state-platform guard."),
Contract.RibbedGuardTags.Contains(TEXT("no-generic-ribbed-state-platform guard"))
);
TestTrue(
TEXT("The validation ribbed-state ledger contract must keep generic ribbed-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic ribbed-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAVOngoingStateSignatureBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAV.OngoingStateSignatures",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAVOngoingStateSignatureBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateSignatureBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state signature boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateSignatureBoundary(
TEXT("validation-ongoing-state-signature-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state signature boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-signature-boundary")
);
TestTrue(
TEXT("The validation ongoing-state signature boundary must preserve manual-waiver signatures."),
Boundary.SignatureIds.Contains(TEXT("ongoing-signature/manual-waiver-signature"))
);
TestTrue(
TEXT("The validation ongoing-state signature boundary must preserve the bounded ongoing-state signature surface."),
Boundary.SignatureSurfaceTags.Contains(TEXT("bounded ongoing-state signature"))
);
TestTrue(
TEXT("The validation ongoing-state signature boundary must preserve the no-generic-ongoing-signature-platform guard."),
Boundary.SignatureGuardTags.Contains(TEXT("no-generic-ongoing-signature-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state signature boundary must keep generic ongoing signature platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing signature platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAWFlutedStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAW.FlutedStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAWFlutedStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationFlutedStatePacketContract Contract;
TestTrue(
TEXT("The validation fluted-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationFlutedStatePacketContract(
TEXT("validation-fluted-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation fluted-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-fluted-state-packet-contract")
);
TestTrue(
TEXT("The validation fluted-state packet contract must preserve benchmark-drift fluted packets."),
Contract.PacketIds.Contains(TEXT("fluted-state-packet/benchmark-drift-fluted"))
);
TestTrue(
TEXT("The validation fluted-state packet contract must preserve the bounded fluted-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded fluted-state packet"))
);
TestTrue(
TEXT("The validation fluted-state packet contract must preserve the no-generic-fluted-state-platform guard."),
Contract.FlutedGuardTags.Contains(TEXT("no-generic-fluted-state-platform guard"))
);
TestTrue(
TEXT("The validation fluted-state packet contract must keep generic fluted-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic fluted-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAWOngoingStateMarkBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAW.OngoingStateMarks",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAWOngoingStateMarkBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateMarkBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state mark boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateMarkBoundary(
TEXT("validation-ongoing-state-mark-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state mark boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-mark-boundary")
);
TestTrue(
TEXT("The validation ongoing-state mark boundary must preserve manual-waiver marks."),
Boundary.MarkIds.Contains(TEXT("ongoing-mark/manual-waiver-mark"))
);
TestTrue(
TEXT("The validation ongoing-state mark boundary must preserve the bounded ongoing-state mark surface."),
Boundary.MarkSurfaceTags.Contains(TEXT("bounded ongoing-state mark"))
);
TestTrue(
TEXT("The validation ongoing-state mark boundary must preserve the no-generic-ongoing-mark-platform guard."),
Boundary.MarkGuardTags.Contains(TEXT("no-generic-ongoing-mark-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state mark boundary must keep generic ongoing mark platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing mark platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAXGroovedStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAX.GroovedStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAXGroovedStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationGroovedStateLedgerContract Contract;
TestTrue(
TEXT("The validation grooved-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationGroovedStateLedgerContract(
TEXT("validation-grooved-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation grooved-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-grooved-state-ledger-contract")
);
TestTrue(
TEXT("The validation grooved-state ledger contract must preserve benchmark-drift grooved ledgers."),
Contract.LedgerIds.Contains(TEXT("grooved-state-ledger/benchmark-drift-grooved"))
);
TestTrue(
TEXT("The validation grooved-state ledger contract must preserve the bounded grooved-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded grooved-state ledger"))
);
TestTrue(
TEXT("The validation grooved-state ledger contract must preserve the no-generic-grooved-state-platform guard."),
Contract.GroovedGuardTags.Contains(TEXT("no-generic-grooved-state-platform guard"))
);
TestTrue(
TEXT("The validation grooved-state ledger contract must keep generic grooved-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic grooved-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAXOngoingStateSealBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAX.OngoingStateSeals",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAXOngoingStateSealBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateSealBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state seal boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateSealBoundary(
TEXT("validation-ongoing-state-seal-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state seal boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-seal-boundary")
);
TestTrue(
TEXT("The validation ongoing-state seal boundary must preserve manual-waiver seals."),
Boundary.SealIds.Contains(TEXT("ongoing-seal/manual-waiver-seal"))
);
TestTrue(
TEXT("The validation ongoing-state seal boundary must preserve the bounded ongoing-state seal surface."),
Boundary.SealSurfaceTags.Contains(TEXT("bounded ongoing-state seal"))
);
TestTrue(
TEXT("The validation ongoing-state seal boundary must preserve the no-generic-ongoing-seal-platform guard."),
Boundary.SealGuardTags.Contains(TEXT("no-generic-ongoing-seal-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state seal boundary must keep generic ongoing seal platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing seal platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAYRidgedStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAY.RidgedStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAYRidgedStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationRidgedStatePacketContract Contract;
TestTrue(
TEXT("The validation ridged-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationRidgedStatePacketContract(
TEXT("validation-ridged-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation ridged-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-ridged-state-packet-contract")
);
TestTrue(
TEXT("The validation ridged-state packet contract must preserve benchmark-drift ridged packets."),
Contract.PacketIds.Contains(TEXT("ridged-state-packet/benchmark-drift-ridged"))
);
TestTrue(
TEXT("The validation ridged-state packet contract must preserve the bounded ridged-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded ridged-state packet"))
);
TestTrue(
TEXT("The validation ridged-state packet contract must preserve the no-generic-ridged-state-platform guard."),
Contract.RidgedGuardTags.Contains(TEXT("no-generic-ridged-state-platform guard"))
);
TestTrue(
TEXT("The validation ridged-state packet contract must keep generic ridged-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic ridged-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAYOngoingStateStampBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAY.OngoingStateStamps",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAYOngoingStateStampBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateStampBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state stamp boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateStampBoundary(
TEXT("validation-ongoing-state-stamp-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state stamp boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-stamp-boundary")
);
TestTrue(
TEXT("The validation ongoing-state stamp boundary must preserve manual-waiver stamps."),
Boundary.StampIds.Contains(TEXT("ongoing-stamp/manual-waiver-stamp"))
);
TestTrue(
TEXT("The validation ongoing-state stamp boundary must preserve the bounded ongoing-state stamp surface."),
Boundary.StampSurfaceTags.Contains(TEXT("bounded ongoing-state stamp"))
);
TestTrue(
TEXT("The validation ongoing-state stamp boundary must preserve the no-generic-ongoing-stamp-platform guard."),
Boundary.StampGuardTags.Contains(TEXT("no-generic-ongoing-stamp-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state stamp boundary must keep generic ongoing stamp platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing stamp platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAZTerracedStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJAZ.TerracedStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAZTerracedStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationTerracedStateLedgerContract Contract;
TestTrue(
TEXT("The validation terraced-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationTerracedStateLedgerContract(
TEXT("validation-terraced-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation terraced-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-terraced-state-ledger-contract")
);
TestTrue(
TEXT("The validation terraced-state ledger contract must preserve benchmark-drift terraced ledgers."),
Contract.LedgerIds.Contains(TEXT("terraced-state-ledger/benchmark-drift-terraced"))
);
TestTrue(
TEXT("The validation terraced-state ledger contract must preserve the bounded terraced-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded terraced-state ledger"))
);
TestTrue(
TEXT("The validation terraced-state ledger contract must preserve the no-generic-terraced-state-platform guard."),
Contract.TerracedGuardTags.Contains(TEXT("no-generic-terraced-state-platform guard"))
);
TestTrue(
TEXT("The validation terraced-state ledger contract must keep generic terraced-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic terraced-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJAZOngoingStateImpressionBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJAZ.OngoingStateImpressions",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJAZOngoingStateImpressionBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateImpressionBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state impression boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateImpressionBoundary(
TEXT("validation-ongoing-state-impression-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state impression boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-impression-boundary")
);
TestTrue(
TEXT("The validation ongoing-state impression boundary must preserve manual-waiver impressions."),
Boundary.ImpressionIds.Contains(TEXT("ongoing-impression/manual-waiver-impression"))
);
TestTrue(
TEXT("The validation ongoing-state impression boundary must preserve the bounded ongoing-state impression surface."),
Boundary.ImpressionSurfaceTags.Contains(TEXT("bounded ongoing-state impression"))
);
TestTrue(
TEXT("The validation ongoing-state impression boundary must preserve the no-generic-ongoing-impression-platform guard."),
Boundary.ImpressionGuardTags.Contains(TEXT("no-generic-ongoing-impression-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state impression boundary must keep generic ongoing impression platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing impression platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBAButtressedStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJBA.ButtressedStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBAButtressedStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationButtressedStatePacketContract Contract;
TestTrue(
TEXT("The validation buttressed-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationButtressedStatePacketContract(
TEXT("validation-buttressed-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation buttressed-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-buttressed-state-packet-contract")
);
TestTrue(
TEXT("The validation buttressed-state packet contract must preserve benchmark-drift buttressed packets."),
Contract.PacketIds.Contains(TEXT("buttressed-state-packet/benchmark-drift-buttressed"))
);
TestTrue(
TEXT("The validation buttressed-state packet contract must preserve the bounded buttressed-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded buttressed-state packet"))
);
TestTrue(
TEXT("The validation buttressed-state packet contract must preserve the no-generic-buttressed-state-platform guard."),
Contract.ButtressedGuardTags.Contains(TEXT("no-generic-buttressed-state-platform guard"))
);
TestTrue(
TEXT("The validation buttressed-state packet contract must keep generic buttressed-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic buttressed-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBAOngoingStateEtchingBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJBA.OngoingStateEtchings",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBAOngoingStateEtchingBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateEtchingBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state etching boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateEtchingBoundary(
TEXT("validation-ongoing-state-etching-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state etching boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-etching-boundary")
);
TestTrue(
TEXT("The validation ongoing-state etching boundary must preserve manual-waiver etchings."),
Boundary.EtchingIds.Contains(TEXT("ongoing-etching/manual-waiver-etching"))
);
TestTrue(
TEXT("The validation ongoing-state etching boundary must preserve the bounded ongoing-state etching surface."),
Boundary.EtchingSurfaceTags.Contains(TEXT("bounded ongoing-state etching"))
);
TestTrue(
TEXT("The validation ongoing-state etching boundary must preserve the no-generic-ongoing-etching-platform guard."),
Boundary.EtchingGuardTags.Contains(TEXT("no-generic-ongoing-etching-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state etching boundary must keep generic ongoing etching platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing etching platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBBBastionedStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJBB.BastionedStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBBBastionedStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationBastionedStateLedgerContract Contract;
TestTrue(
TEXT("The validation bastioned-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationBastionedStateLedgerContract(
TEXT("validation-bastioned-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation bastioned-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-bastioned-state-ledger-contract")
);
TestTrue(
TEXT("The validation bastioned-state ledger contract must preserve benchmark-drift bastioned ledgers."),
Contract.LedgerIds.Contains(TEXT("bastioned-state-ledger/benchmark-drift-bastioned"))
);
TestTrue(
TEXT("The validation bastioned-state ledger contract must preserve the bounded bastioned-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded bastioned-state ledger"))
);
TestTrue(
TEXT("The validation bastioned-state ledger contract must preserve the no-generic-bastioned-state-platform guard."),
Contract.BastionedGuardTags.Contains(TEXT("no-generic-bastioned-state-platform guard"))
);
TestTrue(
TEXT("The validation bastioned-state ledger contract must keep generic bastioned-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic bastioned-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBBOngoingStateEngravingBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJBB.OngoingStateEngravings",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBBOngoingStateEngravingBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateEngravingBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state engraving boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateEngravingBoundary(
TEXT("validation-ongoing-state-engraving-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state engraving boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-engraving-boundary")
);
TestTrue(
TEXT("The validation ongoing-state engraving boundary must preserve manual-waiver engravings."),
Boundary.EngravingIds.Contains(TEXT("ongoing-engraving/manual-waiver-engraving"))
);
TestTrue(
TEXT("The validation ongoing-state engraving boundary must preserve the bounded ongoing-state engraving surface."),
Boundary.EngravingSurfaceTags.Contains(TEXT("bounded ongoing-state engraving"))
);
TestTrue(
TEXT("The validation ongoing-state engraving boundary must preserve the no-generic-ongoing-engraving-platform guard."),
Boundary.EngravingGuardTags.Contains(TEXT("no-generic-ongoing-engraving-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state engraving boundary must keep generic ongoing engraving platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing engraving platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBCFortifiedStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJBC.FortifiedStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBCFortifiedStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationFortifiedStatePacketContract Contract;
TestTrue(
TEXT("The validation fortified-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationFortifiedStatePacketContract(
TEXT("validation-fortified-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation fortified-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-fortified-state-packet-contract")
);
TestTrue(
TEXT("The validation fortified-state packet contract must preserve benchmark-drift fortified packets."),
Contract.PacketIds.Contains(TEXT("fortified-state-packet/benchmark-drift-fortified"))
);
TestTrue(
TEXT("The validation fortified-state packet contract must preserve the bounded fortified-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded fortified-state packet"))
);
TestTrue(
TEXT("The validation fortified-state packet contract must preserve the no-generic-fortified-state-platform guard."),
Contract.FortifiedGuardTags.Contains(TEXT("no-generic-fortified-state-platform guard"))
);
TestTrue(
TEXT("The validation fortified-state packet contract must keep generic fortified-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic fortified-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBCOngoingStateCarvingBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJBC.OngoingStateCarvings",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBCOngoingStateCarvingBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateCarvingBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state carving boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateCarvingBoundary(
TEXT("validation-ongoing-state-carving-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state carving boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-carving-boundary")
);
TestTrue(
TEXT("The validation ongoing-state carving boundary must preserve manual-waiver carvings."),
Boundary.CarvingIds.Contains(TEXT("ongoing-carving/manual-waiver-carving"))
);
TestTrue(
TEXT("The validation ongoing-state carving boundary must preserve the bounded ongoing-state carving surface."),
Boundary.CarvingSurfaceTags.Contains(TEXT("bounded ongoing-state carving"))
);
TestTrue(
TEXT("The validation ongoing-state carving boundary must preserve the no-generic-ongoing-carving-platform guard."),
Boundary.CarvingGuardTags.Contains(TEXT("no-generic-ongoing-carving-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state carving boundary must keep generic ongoing carving platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing carving platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBDBulwarkedStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJBD.BulwarkedStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBDBulwarkedStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationBulwarkedStateLedgerContract Contract;
TestTrue(
TEXT("The validation bulwarked-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationBulwarkedStateLedgerContract(
TEXT("validation-bulwarked-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation bulwarked-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-bulwarked-state-ledger-contract")
);
TestTrue(
TEXT("The validation bulwarked-state ledger contract must preserve benchmark-drift bulwarked ledgers."),
Contract.LedgerIds.Contains(TEXT("bulwarked-state-ledger/benchmark-drift-bulwarked"))
);
TestTrue(
TEXT("The validation bulwarked-state ledger contract must preserve the bounded bulwarked-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded bulwarked-state ledger"))
);
TestTrue(
TEXT("The validation bulwarked-state ledger contract must preserve the no-generic-bulwarked-state-platform guard."),
Contract.BulwarkedGuardTags.Contains(TEXT("no-generic-bulwarked-state-platform guard"))
);
TestTrue(
TEXT("The validation bulwarked-state ledger contract must keep generic bulwarked-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic bulwarked-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBDOngoingStateInscriptionBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJBD.OngoingStateInscriptions",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBDOngoingStateInscriptionBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateInscriptionBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state inscription boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateInscriptionBoundary(
TEXT("validation-ongoing-state-inscription-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state inscription boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-inscription-boundary")
);
TestTrue(
TEXT("The validation ongoing-state inscription boundary must preserve manual-waiver inscriptions."),
Boundary.InscriptionIds.Contains(TEXT("ongoing-inscription/manual-waiver-inscription"))
);
TestTrue(
TEXT("The validation ongoing-state inscription boundary must preserve the bounded ongoing-state inscription surface."),
Boundary.InscriptionSurfaceTags.Contains(TEXT("bounded ongoing-state inscription"))
);
TestTrue(
TEXT("The validation ongoing-state inscription boundary must preserve the no-generic-ongoing-inscription-platform guard."),
Boundary.InscriptionGuardTags.Contains(TEXT("no-generic-ongoing-inscription-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state inscription boundary must keep generic ongoing inscription platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing inscription platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBERampartStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJBE.RampartStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBERampartStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationRampartStatePacketContract Contract;
TestTrue(
TEXT("The validation rampart-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationRampartStatePacketContract(
TEXT("validation-rampart-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation rampart-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-rampart-state-packet-contract")
);
TestTrue(
TEXT("The validation rampart-state packet contract must preserve benchmark-drift rampart packets."),
Contract.PacketIds.Contains(TEXT("rampart-state-packet/benchmark-drift-rampart"))
);
TestTrue(
TEXT("The validation rampart-state packet contract must preserve the bounded rampart-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded rampart-state packet"))
);
TestTrue(
TEXT("The validation rampart-state packet contract must preserve the no-generic-rampart-state-platform guard."),
Contract.RampartGuardTags.Contains(TEXT("no-generic-rampart-state-platform guard"))
);
TestTrue(
TEXT("The validation rampart-state packet contract must keep generic rampart-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic rampart-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBEOngoingStateMarkingBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJBE.OngoingStateMarkings",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBEOngoingStateMarkingBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateMarkingBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state marking boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateMarkingBoundary(
TEXT("validation-ongoing-state-marking-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state marking boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-marking-boundary")
);
TestTrue(
TEXT("The validation ongoing-state marking boundary must preserve manual-waiver markings."),
Boundary.MarkingIds.Contains(TEXT("ongoing-marking/manual-waiver-marking"))
);
TestTrue(
TEXT("The validation ongoing-state marking boundary must preserve the bounded ongoing-state marking surface."),
Boundary.MarkingSurfaceTags.Contains(TEXT("bounded ongoing-state marking"))
);
TestTrue(
TEXT("The validation ongoing-state marking boundary must preserve the no-generic-ongoing-marking-platform guard."),
Boundary.MarkingGuardTags.Contains(TEXT("no-generic-ongoing-marking-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state marking boundary must keep generic ongoing marking platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing marking platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBFCitadelStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJBF.CitadelStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBFCitadelStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationCitadelStateLedgerContract Contract;
TestTrue(
TEXT("The validation citadel-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationCitadelStateLedgerContract(
TEXT("validation-citadel-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation citadel-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-citadel-state-ledger-contract")
);
TestTrue(
TEXT("The validation citadel-state ledger contract must preserve benchmark-drift citadel ledgers."),
Contract.LedgerIds.Contains(TEXT("citadel-state-ledger/benchmark-drift-citadel"))
);
TestTrue(
TEXT("The validation citadel-state ledger contract must preserve the bounded citadel-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded citadel-state ledger"))
);
TestTrue(
TEXT("The validation citadel-state ledger contract must preserve the no-generic-citadel-state-platform guard."),
Contract.CitadelGuardTags.Contains(TEXT("no-generic-citadel-state-platform guard"))
);
TestTrue(
TEXT("The validation citadel-state ledger contract must keep generic citadel-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic citadel-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBFOngoingStateTracingBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJBF.OngoingStateTracings",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBFOngoingStateTracingBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateTracingBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state tracing boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateTracingBoundary(
TEXT("validation-ongoing-state-tracing-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state tracing boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-tracing-boundary")
);
TestTrue(
TEXT("The validation ongoing-state tracing boundary must preserve manual-waiver tracings."),
Boundary.TracingIds.Contains(TEXT("ongoing-tracing/manual-waiver-tracing"))
);
TestTrue(
TEXT("The validation ongoing-state tracing boundary must preserve the bounded ongoing-state tracing surface."),
Boundary.TracingSurfaceTags.Contains(TEXT("bounded ongoing-state tracing"))
);
TestTrue(
TEXT("The validation ongoing-state tracing boundary must preserve the no-generic-ongoing-tracing-platform guard."),
Boundary.TracingGuardTags.Contains(TEXT("no-generic-ongoing-tracing-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state tracing boundary must keep generic ongoing tracing platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing tracing platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBGKeepStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJBG.KeepStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBGKeepStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationKeepStatePacketContract Contract;
TestTrue(
TEXT("The validation keep-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationKeepStatePacketContract(
TEXT("validation-keep-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation keep-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-keep-state-packet-contract")
);
TestTrue(
TEXT("The validation keep-state packet contract must preserve benchmark-drift keep packets."),
Contract.PacketIds.Contains(TEXT("keep-state-packet/benchmark-drift-keep"))
);
TestTrue(
TEXT("The validation keep-state packet contract must preserve the bounded keep-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded keep-state packet"))
);
TestTrue(
TEXT("The validation keep-state packet contract must preserve the no-generic-keep-state-platform guard."),
Contract.KeepGuardTags.Contains(TEXT("no-generic-keep-state-platform guard"))
);
TestTrue(
TEXT("The validation keep-state packet contract must keep generic keep-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic keep-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBGOngoingStateNotationBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJBG.OngoingStateNotations",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBGOngoingStateNotationBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateNotationBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state notation boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateNotationBoundary(
TEXT("validation-ongoing-state-notation-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state notation boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-notation-boundary")
);
TestTrue(
TEXT("The validation ongoing-state notation boundary must preserve manual-waiver notations."),
Boundary.NotationIds.Contains(TEXT("ongoing-notation/manual-waiver-notation"))
);
TestTrue(
TEXT("The validation ongoing-state notation boundary must preserve the bounded ongoing-state notation surface."),
Boundary.NotationSurfaceTags.Contains(TEXT("bounded ongoing-state notation"))
);
TestTrue(
TEXT("The validation ongoing-state notation boundary must preserve the no-generic-ongoing-notation-platform guard."),
Boundary.NotationGuardTags.Contains(TEXT("no-generic-ongoing-notation-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state notation boundary must keep generic ongoing notation platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing notation platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBHStrongholdStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJBH.StrongholdStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBHStrongholdStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationStrongholdStateLedgerContract Contract;
TestTrue(
TEXT("The validation stronghold-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationStrongholdStateLedgerContract(
TEXT("validation-stronghold-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation stronghold-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-stronghold-state-ledger-contract")
);
TestTrue(
TEXT("The validation stronghold-state ledger contract must preserve benchmark-drift stronghold ledgers."),
Contract.LedgerIds.Contains(TEXT("stronghold-state-ledger/benchmark-drift-stronghold"))
);
TestTrue(
TEXT("The validation stronghold-state ledger contract must preserve the bounded stronghold-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded stronghold-state ledger"))
);
TestTrue(
TEXT("The validation stronghold-state ledger contract must preserve the no-generic-stronghold-state-platform guard."),
Contract.StrongholdGuardTags.Contains(TEXT("no-generic-stronghold-state-platform guard"))
);
TestTrue(
TEXT("The validation stronghold-state ledger contract must keep generic stronghold-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic stronghold-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBHOngoingStateAnnotationBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJBH.OngoingStateAnnotations",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBHOngoingStateAnnotationBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateAnnotationBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state annotation boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateAnnotationBoundary(
TEXT("validation-ongoing-state-annotation-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state annotation boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-annotation-boundary")
);
TestTrue(
TEXT("The validation ongoing-state annotation boundary must preserve manual-waiver annotations."),
Boundary.AnnotationIds.Contains(TEXT("ongoing-annotation/manual-waiver-annotation"))
);
TestTrue(
TEXT("The validation ongoing-state annotation boundary must preserve the bounded ongoing-state annotation surface."),
Boundary.AnnotationSurfaceTags.Contains(TEXT("bounded ongoing-state annotation"))
);
TestTrue(
TEXT("The validation ongoing-state annotation boundary must preserve the no-generic-ongoing-annotation-platform guard."),
Boundary.AnnotationGuardTags.Contains(TEXT("no-generic-ongoing-annotation-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state annotation boundary must keep generic ongoing annotation platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing annotation platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBIWatchtowerStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJBI.WatchtowerStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBIWatchtowerStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationWatchtowerStatePacketContract Contract;
TestTrue(
TEXT("The validation watchtower-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationWatchtowerStatePacketContract(
TEXT("validation-watchtower-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation watchtower-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-watchtower-state-packet-contract")
);
TestTrue(
TEXT("The validation watchtower-state packet contract must preserve benchmark-drift watchtower packets."),
Contract.PacketIds.Contains(TEXT("watchtower-state-packet/benchmark-drift-watchtower"))
);
TestTrue(
TEXT("The validation watchtower-state packet contract must preserve the bounded watchtower-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded watchtower-state packet"))
);
TestTrue(
TEXT("The validation watchtower-state packet contract must preserve the no-generic-watchtower-state-platform guard."),
Contract.WatchtowerGuardTags.Contains(TEXT("no-generic-watchtower-state-platform guard"))
);
TestTrue(
TEXT("The validation watchtower-state packet contract must keep generic watchtower-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic watchtower-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBIOngoingStateGlossBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJBI.OngoingStateGlosses",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBIOngoingStateGlossBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateGlossBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state gloss boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateGlossBoundary(
TEXT("validation-ongoing-state-gloss-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state gloss boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-gloss-boundary")
);
TestTrue(
TEXT("The validation ongoing-state gloss boundary must preserve manual-waiver glosses."),
Boundary.GlossIds.Contains(TEXT("ongoing-gloss/manual-waiver-gloss"))
);
TestTrue(
TEXT("The validation ongoing-state gloss boundary must preserve the bounded ongoing-state gloss surface."),
Boundary.GlossSurfaceTags.Contains(TEXT("bounded ongoing-state gloss"))
);
TestTrue(
TEXT("The validation ongoing-state gloss boundary must preserve the no-generic-ongoing-gloss-platform guard."),
Boundary.GlossGuardTags.Contains(TEXT("no-generic-ongoing-gloss-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state gloss boundary must keep generic ongoing gloss platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing gloss platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBJBattlementStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJBJ.BattlementStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBJBattlementStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationBattlementStateLedgerContract Contract;
TestTrue(
TEXT("The validation battlement-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationBattlementStateLedgerContract(
TEXT("validation-battlement-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation battlement-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-battlement-state-ledger-contract")
);
TestTrue(
TEXT("The validation battlement-state ledger contract must preserve benchmark-drift battlement ledgers."),
Contract.LedgerIds.Contains(TEXT("battlement-state-ledger/benchmark-drift-battlement"))
);
TestTrue(
TEXT("The validation battlement-state ledger contract must preserve the bounded battlement-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded battlement-state ledger"))
);
TestTrue(
TEXT("The validation battlement-state ledger contract must preserve the no-generic-battlement-state-platform guard."),
Contract.BattlementGuardTags.Contains(TEXT("no-generic-battlement-state-platform guard"))
);
TestTrue(
TEXT("The validation battlement-state ledger contract must keep generic battlement-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic battlement-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBJOngoingStateCaptionBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJBJ.OngoingStateCaptions",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBJOngoingStateCaptionBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateCaptionBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state caption boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateCaptionBoundary(
TEXT("validation-ongoing-state-caption-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state caption boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-caption-boundary")
);
TestTrue(
TEXT("The validation ongoing-state caption boundary must preserve manual-waiver captions."),
Boundary.CaptionIds.Contains(TEXT("ongoing-caption/manual-waiver-caption"))
);
TestTrue(
TEXT("The validation ongoing-state caption boundary must preserve the bounded ongoing-state caption surface."),
Boundary.CaptionSurfaceTags.Contains(TEXT("bounded ongoing-state caption"))
);
TestTrue(
TEXT("The validation ongoing-state caption boundary must preserve the no-generic-ongoing-caption-platform guard."),
Boundary.CaptionGuardTags.Contains(TEXT("no-generic-ongoing-caption-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state caption boundary must keep generic ongoing caption platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing caption platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBKParapetStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJBK.ParapetStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBKParapetStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationParapetStatePacketContract Contract;
TestTrue(
TEXT("The validation parapet-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationParapetStatePacketContract(
TEXT("validation-parapet-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation parapet-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-parapet-state-packet-contract")
);
TestTrue(
TEXT("The validation parapet-state packet contract must preserve benchmark-drift parapet packets."),
Contract.PacketIds.Contains(TEXT("parapet-state-packet/benchmark-drift-parapet"))
);
TestTrue(
TEXT("The validation parapet-state packet contract must preserve the bounded parapet-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded parapet-state packet"))
);
TestTrue(
TEXT("The validation parapet-state packet contract must preserve the no-generic-parapet-state-platform guard."),
Contract.ParapetGuardTags.Contains(TEXT("no-generic-parapet-state-platform guard"))
);
TestTrue(
TEXT("The validation parapet-state packet contract must keep generic parapet-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic parapet-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBKOngoingStateLegendBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJBK.OngoingStateLegends",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBKOngoingStateLegendBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateLegendBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state legend boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateLegendBoundary(
TEXT("validation-ongoing-state-legend-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state legend boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-legend-boundary")
);
TestTrue(
TEXT("The validation ongoing-state legend boundary must preserve manual-waiver legends."),
Boundary.LegendIds.Contains(TEXT("ongoing-legend/manual-waiver-legend"))
);
TestTrue(
TEXT("The validation ongoing-state legend boundary must preserve the bounded ongoing-state legend surface."),
Boundary.LegendSurfaceTags.Contains(TEXT("bounded ongoing-state legend"))
);
TestTrue(
TEXT("The validation ongoing-state legend boundary must preserve the no-generic-ongoing-legend-platform guard."),
Boundary.LegendGuardTags.Contains(TEXT("no-generic-ongoing-legend-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state legend boundary must keep generic ongoing legend platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing legend platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBLMerlonStateLedgerContractTest,
"HyperTwist.FirstParty.Validation.PhaseJBL.MerlonStateLedgers",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBLMerlonStateLedgerContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationMerlonStateLedgerContract Contract;
TestTrue(
TEXT("The validation merlon-state ledger contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationMerlonStateLedgerContract(
TEXT("validation-merlon-state-ledger-contract"),
Contract
)
);
TestEqual(
TEXT("The validation merlon-state ledger contract id must stay stable."),
Contract.ContractId,
TEXT("validation-merlon-state-ledger-contract")
);
TestTrue(
TEXT("The validation merlon-state ledger contract must preserve benchmark-drift merlon ledgers."),
Contract.LedgerIds.Contains(TEXT("merlon-state-ledger/benchmark-drift-merlon"))
);
TestTrue(
TEXT("The validation merlon-state ledger contract must preserve the bounded merlon-state ledger surface."),
Contract.LedgerSurfaceTags.Contains(TEXT("bounded merlon-state ledger"))
);
TestTrue(
TEXT("The validation merlon-state ledger contract must preserve the no-generic-merlon-state-platform guard."),
Contract.MerlonGuardTags.Contains(TEXT("no-generic-merlon-state-platform guard"))
);
TestTrue(
TEXT("The validation merlon-state ledger contract must keep generic merlon-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic merlon-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBLOngoingStateCalloutBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJBL.OngoingStateCallouts",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBLOngoingStateCalloutBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateCalloutBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state callout boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateCalloutBoundary(
TEXT("validation-ongoing-state-callout-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state callout boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-callout-boundary")
);
TestTrue(
TEXT("The validation ongoing-state callout boundary must preserve manual-waiver callouts."),
Boundary.CalloutIds.Contains(TEXT("ongoing-callout/manual-waiver-callout"))
);
TestTrue(
TEXT("The validation ongoing-state callout boundary must preserve the bounded ongoing-state callout surface."),
Boundary.CalloutSurfaceTags.Contains(TEXT("bounded ongoing-state callout"))
);
TestTrue(
TEXT("The validation ongoing-state callout boundary must preserve the no-generic-ongoing-callout-platform guard."),
Boundary.CalloutGuardTags.Contains(TEXT("no-generic-ongoing-callout-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state callout boundary must keep generic ongoing callout platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing callout platform ownership"))
);
return true;
}
#endif

View file

@ -0,0 +1,89 @@
// Copyright HyperTwist, Inc. All Rights Reserved.
#include "Misc/AutomationTest.h"
#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h"
#if WITH_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBMCrenelStatePacketContractTest,
"HyperTwist.FirstParty.Validation.PhaseJBM.CrenelStatePackets",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBMCrenelStatePacketContractTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationCrenelStatePacketContract Contract;
TestTrue(
TEXT("The validation crenel-state packet contract must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationCrenelStatePacketContract(
TEXT("validation-crenel-state-packet-contract"),
Contract
)
);
TestEqual(
TEXT("The validation crenel-state packet contract id must stay stable."),
Contract.ContractId,
TEXT("validation-crenel-state-packet-contract")
);
TestTrue(
TEXT("The validation crenel-state packet contract must preserve benchmark-drift crenel packets."),
Contract.PacketIds.Contains(TEXT("crenel-state-packet/benchmark-drift-crenel"))
);
TestTrue(
TEXT("The validation crenel-state packet contract must preserve the bounded crenel-state packet surface."),
Contract.PacketSurfaceTags.Contains(TEXT("bounded crenel-state packet"))
);
TestTrue(
TEXT("The validation crenel-state packet contract must preserve the no-generic-crenel-state-platform guard."),
Contract.CrenelGuardTags.Contains(TEXT("no-generic-crenel-state-platform guard"))
);
TestTrue(
TEXT("The validation crenel-state packet contract must keep generic crenel-state platform ownership excluded."),
Contract.ExplicitExclusions.Contains(TEXT("generic crenel-state platform ownership"))
);
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FHyperTwistValidationPhaseJBMOngoingStateMarginaliaBoundaryTest,
"HyperTwist.FirstParty.Validation.PhaseJBM.OngoingStateMarginalia",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter
)
bool FHyperTwistValidationPhaseJBMOngoingStateMarginaliaBoundaryTest::RunTest(const FString& Parameters)
{
FHyperTwistTrainingValidationOngoingStateMarginaliaBoundary Boundary;
TestTrue(
TEXT("The validation ongoing-state marginalia boundary must resolve from the runtime library."),
UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateMarginaliaBoundary(
TEXT("validation-ongoing-state-marginalia-boundary"),
Boundary
)
);
TestEqual(
TEXT("The validation ongoing-state marginalia boundary id must stay stable."),
Boundary.BoundaryId,
TEXT("validation-ongoing-state-marginalia-boundary")
);
TestTrue(
TEXT("The validation ongoing-state marginalia boundary must preserve manual-waiver marginalia."),
Boundary.MarginaliaIds.Contains(TEXT("ongoing-marginalia/manual-waiver-marginalia"))
);
TestTrue(
TEXT("The validation ongoing-state marginalia boundary must preserve the bounded ongoing-state marginalia surface."),
Boundary.MarginaliaSurfaceTags.Contains(TEXT("bounded ongoing-state marginalia"))
);
TestTrue(
TEXT("The validation ongoing-state marginalia boundary must preserve the no-generic-ongoing-marginalia-platform guard."),
Boundary.MarginaliaGuardTags.Contains(TEXT("no-generic-ongoing-marginalia-platform guard"))
);
TestTrue(
TEXT("The validation ongoing-state marginalia boundary must keep generic ongoing marginalia platform ownership excluded."),
Boundary.ExplicitExclusions.Contains(TEXT("generic ongoing marginalia platform ownership"))
);
return true;
}
#endif

Some files were not shown because too many files have changed in this diff Show more