Support imported generated training runtime surfaces

This commit is contained in:
axiomlogicnexus 2026-05-01 22:41:48 +02:00
parent 24736650ae
commit afaffa903a
6 changed files with 6023 additions and 26 deletions

View file

@ -0,0 +1,10 @@
{"source":"roux-trainers","source_scope":"restrictive-generative","family":"roux-generative","subset":"4c","mode_id":"lse-4c-trainer","mode_name":"LSE 4c trainer","runtime_mode":"4c","generator_type":"random-state solver-backed trainer","selectors":[{"label":"Center alignment","options":"lseMCSelector"},{"label":"EO pair","options":"lseBarSelector"},{"label":"Stage","options":"lseStageSelector"},{"label":"Solution cap","options":"solutionNumSelector"},{"label":"Orientation","options":"orientationSelector"}],"origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\README.md","C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\Config.tsx"],"notes":"4c / M2-to-4c cases are generated from LSE masks and center-alignment rules."}
{"source":"roux-trainers","source_scope":"restrictive-generative","family":"roux-generative","subset":"ancillary-runtime-modes","mode_id":"analyzer-tracking-experimental","mode_name":"Analyzer / tracking / experimental shells","runtime_mode":"analyzer | tracking | experimental","generator_type":"runtime mode shell over random-state block trainer","selectors":[{"label":"Underlying block settings","options":"shares FB-style config surfaces"}],"origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\README.md","C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\Config.tsx"],"notes":"The runtime factory routes these modes through the FB state machine rather than a separate finite exercise corpus."}
{"source":"roux-trainers","source_scope":"restrictive-generative","family":"roux-generative","subset":"cmll","mode_id":"cmll-randomized-trainer","mode_name":"CMLL / NMCLL randomized trainer","runtime_mode":"cmll","generator_type":"finite-case catalog plus random-state generator","selectors":[{"label":"Cases","options":"cmllCaseSelector / nmcllSelector"},{"label":"Triggers","options":"triggerSelector"},{"label":"AUF","options":"cmllAufSelector"},{"label":"Hyperorientation","options":"hyperOriSelector"},{"label":"Orientation","options":"orientationSelector"},{"label":"Batch mode","options":"cmllBatchModeSelector"}],"origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\README.md","C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\Config.tsx"],"notes":"Finite case tables are flattened separately; live cases are generated by combining trigger, AUF, selected case, post-AUF, and random LSE state."}
{"source":"roux-trainers","source_scope":"restrictive-generative","family":"roux-generative","subset":"eopair","mode_id":"eolr-trainer","mode_name":"EOLR / EOLRb / EOdM trainer","runtime_mode":"eopair","generator_type":"random-state solver-backed trainer","selectors":[{"label":"EO pattern","options":"lseEOSelector"},{"label":"Center strategy","options":"lseEOLRMCSelector"},{"label":"Mode","options":"lseBarbieSelector"},{"label":"Scramble type","options":"lseEOLRScrambleSelector"},{"label":"Solution cap","options":"solutionNumSelector"},{"label":"Orientation","options":"orientationSelector"}],"origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\README.md","C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\Config.tsx"],"notes":"Cases are drawn from random LSE states filtered by EO pattern and MC policy."}
{"source":"roux-trainers","source_scope":"restrictive-generative","family":"roux-generative","subset":"fb","mode_id":"fb-analyzer-trainer","mode_name":"FB analyzer / trainer","runtime_mode":"fb","generator_type":"random-state solver-backed trainer","selectors":[{"label":"Depth","options":"fbLevelSelector"},{"label":"Basis","options":"fbBasisSelector"},{"label":"Difficulty","options":"fbPieceSolvedSelector"},{"label":"Solution cap","options":"solutionNumSelector"},{"label":"Orientation","options":"orientationSelector"}],"origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\README.md","C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\Config.tsx"],"notes":"Random-state first-block lane reused by analyzer-oriented surfaces."}
{"source":"roux-trainers","source_scope":"restrictive-generative","family":"roux-generative","subset":"fbdr","mode_id":"fbdr-trainer","mode_name":"FB last slot plus DR trainer","runtime_mode":"fbdr","generator_type":"random-state solver-backed trainer","selectors":[{"label":"Depth","options":"fbdrLevelSelector"},{"label":"Basis","options":"fbBasisSelector"},{"label":"Square position","options":"fbdrSelector"},{"label":"Scramble type","options":"fbdrScrambleSelector"},{"label":"Pieces to solve","options":"fbOnlySelector"},{"label":"Last pair pattern","options":"fbPairSolvedSelector"},{"label":"FB edge positions","options":"fbdrPosSelector1 / fbdrPosSelector2"},{"label":"DR positions","options":"fbdrPosSelector3"},{"label":"Difficulty","options":"fbPieceSolvedSelector"},{"label":"Solution cap","options":"solutionNumSelector"},{"label":"Orientation","options":"orientationSelector"}],"origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\README.md","C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\Config.tsx"],"notes":"Cases are generated from masked random cube states, not from a finite static row corpus."}
{"source":"roux-trainers","source_scope":"restrictive-generative","family":"roux-generative","subset":"fbss","mode_id":"fbss-trainer","mode_name":"FBLP plus SS trainer","runtime_mode":"fbss","generator_type":"random-state solver-backed trainer","selectors":[{"label":"Depth","options":"fbssLevelSelector"},{"label":"FBLP position","options":"fbssLpSelector"},{"label":"SS position","options":"fbssSsSelector"},{"label":"Solution cap","options":"solutionNumSelector"},{"label":"Orientation","options":"orientationSelector"}],"origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\README.md","C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\Config.tsx"],"notes":"Random-state compound blockbuilding lane."}
{"source":"roux-trainers","source_scope":"restrictive-generative","family":"roux-generative","subset":"fs","mode_id":"fs-trainer","mode_name":"FS/FB/SS trainer","runtime_mode":"fs","generator_type":"random-state solver-backed trainer","selectors":[{"label":"Depth","options":"fsLevelSelector"},{"label":"Square position","options":"fsSelector"},{"label":"Solution cap","options":"solutionNumSelector"},{"label":"Orientation","options":"orientationSelector"}],"origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\README.md","C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\Config.tsx"],"notes":"Front/back first-square cases are generated from state masks and solver constraints."}
{"source":"roux-trainers","source_scope":"restrictive-generative","family":"roux-generative","subset":"fsdr","mode_id":"fsdr-trainer","mode_name":"FS plus DR trainer","runtime_mode":"fsdr","generator_type":"random-state solver-backed trainer","selectors":[{"label":"Depth","options":"fsLevelSelector"},{"label":"Square position","options":"fsSelector"},{"label":"Solution cap","options":"solutionNumSelector"},{"label":"Orientation","options":"orientationSelector"}],"origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\README.md","C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\Config.tsx"],"notes":"Random-state FS+DR training lane."}
{"source":"roux-trainers","source_scope":"restrictive-generative","family":"roux-generative","subset":"ss","mode_id":"ss-trainer","mode_name":"Second square trainer","runtime_mode":"ss","generator_type":"random-state solver-backed trainer","selectors":[{"label":"Depth","options":"ssLevelSelector"},{"label":"Square position","options":"ssSelector"},{"label":"DR orientation","options":"ssEOSelector"},{"label":"DR position","options":"ssPosSelector"},{"label":"Pieces to solve","options":"ssPairOnlySelector"},{"label":"Solution cap","options":"solutionNumSelector"},{"label":"Orientation","options":"orientationSelector"}],"origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\README.md","C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\Config.tsx"],"notes":"Random-state SS cases filtered by DR position and orientation masks."}

View file

@ -0,0 +1,250 @@
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"as_back_slash","case_name":"as_back_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F' r U r' U2' r' F2 r","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"as_columns","case_name":"as_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' F R F' U r' D' r U' r' D r","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"as_forward_slash","case_name":"as_forward_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"L' U R U' L U R'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"as_left_bar","case_name":"as_left_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2' R U2' R' F R' F' R U' R U' R'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"as_right_bar","case_name":"as_right_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U2' R' U' R U' R'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"as_x_checkerboard","case_name":"as_x_checkerboard","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2' R' U2' R' F R F'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"h_column","case_name":"h_column","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U2' R2' F R F' U2 R' F R F'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"h_columns","case_name":"h_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U R' U R U' R' U R U2 R'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"h_row","case_name":"h_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r U' r2' D' r U' r' D r2 U r'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"h_rows","case_name":"h_rows","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U R' U' R U R' U' R U R' U' F'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"l_back_commutator","case_name":"l_back_commutator","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R' U2 R' D' R U2 R' D R2","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"l_diag","case_name":"l_diag","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 R' U' R U R' F' R U R' U' R' F R2","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"l_front_commutator","case_name":"l_front_commutator","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2 R D R' U2 R D' R2'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"l_inverse","case_name":"l_inverse","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R' F' R U R U' R'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"l_mirror","case_name":"l_mirror","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U' R' U' R U R' F'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"l_pure","case_name":"l_pure","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 R U R' U R U' R' U R U' R' U R U2' R'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"o_adjacent_swap","case_name":"o_adjacent_swap","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' F' R U R' U' R' F R2 U' R'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"o_diagonal_swap","case_name":"o_diagonal_swap","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U' R' U' R U R' F' R U R' U' R' F R F'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"pi_back_slash","case_name":"pi_back_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U F R' F' R U2 R U' R' U R U2' R'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"pi_columns","case_name":"pi_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' r U' r2' D' r U r' D r2 U r'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"pi_forward_slash","case_name":"pi_forward_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2 R' U' R U R' U2' R' F R F'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"pi_left_bar","case_name":"pi_left_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R' U' R' F R F' R U' R' U2 R","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"pi_right_bar","case_name":"pi_right_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U R' U' R U R' U' F'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"pi_x_checkerboard","case_name":"pi_x_checkerboard","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R' F R U F U' R U R' U' F'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"s_back_slash","case_name":"s_back_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U' L' U R' U' L","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"s_columns","case_name":"s_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' U' R' F R F' R U R' U R U2' R'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"s_forward_slash","case_name":"s_forward_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R' F' R U2 R U2' R'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"s_left_bar","case_name":"s_left_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' U R U2 R'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"s_right_bar","case_name":"s_right_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2' R U R' U R' F R F' R U2' R'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"s_x_checkerboard","case_name":"s_x_checkerboard","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"L' U2 L U2' L F' L' F","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"solved","case_name":"solved","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"t_back_row","case_name":"t_back_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r' D' r U r' D r U' r U r'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"t_columns","case_name":"t_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 r2' D' r U r' D r2 U' r' U' r","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"t_front_row","case_name":"t_front_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r' U r U2' R2' F R F' R","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"t_left_bar","case_name":"t_left_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U R' U' R' F R F'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"t_right_bar","case_name":"t_right_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U L' U' L U L F' L' F","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"t_rows","case_name":"t_rows","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2 R' U' R U' R2' U2' R U R' U R","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"u_back_row","case_name":"u_back_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' F R U R' U' F'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"u_back_slash","case_name":"u_back_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R2' D' R U2 R' D R U2 R","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"u_forward_slash","case_name":"u_forward_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 R2 D R' U2 R D' R' U2 R'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"u_front_row","case_name":"u_front_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U' R U' R' U2 R2 U R' U R U2 R'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"u_rows","case_name":"u_rows","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' F R2 D R' U R D' R2' U' F'","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"custom","case_id":"u_x_checkerboard","case_name":"u_x_checkerboard","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 r U' r' U r' D' r U' r' D r","notes":"custom trainer variant"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"as_back_slash","case_name":"as_back_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F' r U r' U2' r' F2 r","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"as_columns","case_name":"as_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R2 D R' U R D' R' U R' U' R U' R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"as_forward_slash","case_name":"as_forward_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"L' U R U' L U R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"as_left_bar","case_name":"as_left_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2' R U2' R' F R' F' R U' R U' R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"as_right_bar","case_name":"as_right_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U2' R' U' R U' R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"as_x_checkerboard","case_name":"as_x_checkerboard","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2' R' U2' R' F R F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"h_column","case_name":"h_column","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U2' R2' F R F' U2 R' F R F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"h_columns","case_name":"h_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U R' U R U' R' U R U2 R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"h_row","case_name":"h_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r U' r2' D' r U' r' D r2 U r'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"h_rows","case_name":"h_rows","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U R' U' R U R' U' R U R' U' F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"l_back_commutator","case_name":"l_back_commutator","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R' U2 R' D' R U2 R' D R2","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"l_diag","case_name":"l_diag","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 R' U' R U R' F' R U R' U' R' F R2","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"l_front_commutator","case_name":"l_front_commutator","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2 R D R' U2 R D' R2'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"l_inverse","case_name":"l_inverse","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R' F' R U R U' R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"l_mirror","case_name":"l_mirror","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U' R' U' R U R' F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"l_pure","case_name":"l_pure","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 R U R' U R U' R' U R U' R' U R U2' R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"o_adjacent_swap","case_name":"o_adjacent_swap","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' F' R U R' U' R' F R2 U' R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"o_diagonal_swap","case_name":"o_diagonal_swap","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U' R' U' R U R' F' R U R' U' R' F R F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"pi_back_slash","case_name":"pi_back_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U F R' F' R U2 R U' R' U R U2' R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"pi_columns","case_name":"pi_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' r U' r2' D' r U r' D r2 U r'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"pi_forward_slash","case_name":"pi_forward_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2 R' U' R U R' U2' R' F R F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"pi_left_bar","case_name":"pi_left_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R' U' R' F R F' R U' R' U2 R","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"pi_right_bar","case_name":"pi_right_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U R' U' R U R' U' F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"pi_x_checkerboard","case_name":"pi_x_checkerboard","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R' F R U F U' R U R' U' F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"s_back_slash","case_name":"s_back_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U' L' U R' U' L","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"s_columns","case_name":"s_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' U' R' F R F' R U R' U R U2' R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"s_forward_slash","case_name":"s_forward_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R' F' R U2 R U2' R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"s_left_bar","case_name":"s_left_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' U R U2 R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"s_right_bar","case_name":"s_right_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2' R U R' U R' F R F' R U2' R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"s_x_checkerboard","case_name":"s_x_checkerboard","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"L' U2 L U2' L F' L' F","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"solved","case_name":"solved","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"t_back_row","case_name":"t_back_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r' D' r U r' D r U' r U r'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"t_columns","case_name":"t_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 r2' D' r U r' D r2 U' r' U' r","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"t_front_row","case_name":"t_front_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r' U r U2' R2' F R F' R","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"t_left_bar","case_name":"t_left_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U R' U' R' F R F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"t_right_bar","case_name":"t_right_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U L' U' L U L F' L' F","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"t_rows","case_name":"t_rows","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2 R' U' R U' R2' U2' R U R' U R","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"u_back_row","case_name":"u_back_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' F R U R' U' F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"u_back_slash","case_name":"u_back_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R2' D' R U2 R' D R U2 R","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"u_forward_slash","case_name":"u_forward_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 R2 D R' U2 R D' R' U2 R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"u_front_row","case_name":"u_front_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U' R U' R' U2 R2 U R' U R U2 R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"u_rows","case_name":"u_rows","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' F R2 D R' U R D' R2' U' F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"cmll","subset":"default","case_id":"u_x_checkerboard","case_name":"u_x_checkerboard","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 r U' r' U r' D' r U' r' D r","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-as_1-l_diag","case_name":"nmcll-as_1-l_diag","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 R' U' R U R' F' R U R' U' R' F R2","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-as_1-s_back_slash","case_name":"nmcll-as_1-s_back_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U' L' U R' U' L U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-as_1-s_left_bar","case_name":"nmcll-as_1-s_left_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' U R U2 R'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-as_1-t_left_bar","case_name":"nmcll-as_1-t_left_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U R' U' R' F R F' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-as_2-l_pure","case_name":"nmcll-as_2-l_pure","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 R U R' U R U' R' U R U' R' U R U2' R' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-as_2-s_right_bar","case_name":"nmcll-as_2-s_right_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2' R U R' U R' F R F' R U2' R' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-as_2-s_x_checkerboard","case_name":"nmcll-as_2-s_x_checkerboard","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"L' U2 L U2' L F' L' F U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-as_2-u_back_slash","case_name":"nmcll-as_2-u_back_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R2' D' R U2 R' D R U2 R","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-as_3-s_columns","case_name":"nmcll-as_3-s_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' U' R' F R F' R U R' U R U2' R'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-as_3-s_forward_slash","case_name":"nmcll-as_3-s_forward_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R' F' R U2 R U2' R' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-as_3-t_right_bar","case_name":"nmcll-as_3-t_right_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U L' U' L U L F' L' F","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-as_3-u_forward_slash","case_name":"nmcll-as_3-u_forward_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 R2 D R' U2 R D' R' U2 R'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-h_1-h_rows","case_name":"nmcll-h_1-h_rows","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U R' U' R U R' U' R U R' U' F' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-h_1-solved","case_name":"nmcll-h_1-solved","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-h_1-t_front_row","case_name":"nmcll-h_1-t_front_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r' U r U2' R2' F R F' R","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-h_2-h_columns","case_name":"nmcll-h_2-h_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U R' U R U' R' U R U2 R' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-h_2-o_diagonal_swap","case_name":"nmcll-h_2-o_diagonal_swap","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U' R' U' R U R' F' R U R' U' R' F R F' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-h_2-u_x_checkerboard","case_name":"nmcll-h_2-u_x_checkerboard","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 r U' r' U r' D' r U' r' D r","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-h_3-t_back_row","case_name":"nmcll-h_3-t_back_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r' D' r U r' D r U' r U r' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-h_3-u_rows","case_name":"nmcll-h_3-u_rows","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' F R2 D R' U R D' R2' U' F' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-l_1-as_right_bar","case_name":"nmcll-l_1-as_right_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U2' R' U' R U' R'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-l_1-l_inverse","case_name":"nmcll-l_1-l_inverse","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R' F' R U R U' R'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-l_1-pi_forward_slash","case_name":"nmcll-l_1-pi_forward_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2 R' U' R U R' U2' R' F R F' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-l_1-s_right_bar","case_name":"nmcll-l_1-s_right_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2' R U R' U R' F R F' R U2' R'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-l_2-as_left_bar","case_name":"nmcll-l_2-as_left_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2' R U2' R' F R' F' R U' R U' R'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-l_2-l_mirror","case_name":"nmcll-l_2-l_mirror","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U' R' U' R U R' F'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-l_2-pi_back_slash","case_name":"nmcll-l_2-pi_back_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U F R' F' R U2 R U' R' U R U2' R'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-l_2-s_left_bar","case_name":"nmcll-l_2-s_left_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' U R U2 R' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-l_3-l_back_commutator","case_name":"nmcll-l_3-l_back_commutator","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R' U2 R' D' R U2 R' D R2","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-l_3-l_front_commutator","case_name":"nmcll-l_3-l_front_commutator","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2 R D R' U2 R D' R2'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-l_3-pi_back_slash","case_name":"nmcll-l_3-pi_back_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U F R' F' R U2 R U' R' U R U2' R' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-l_3-pi_forward_slash","case_name":"nmcll-l_3-pi_forward_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2 R' U' R U R' U2' R' F R F'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-o_1-h_columns","case_name":"nmcll-o_1-h_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U R' U R U' R' U R U2 R'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-o_1-h_rows","case_name":"nmcll-o_1-h_rows","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U R' U' R U R' U' R U R' U' F'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-o_1-pi_columns","case_name":"nmcll-o_1-pi_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' r U' r2' D' r U r' D r2 U r'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-o_2-pi_x_checkerboard","case_name":"nmcll-o_2-pi_x_checkerboard","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R' F R U F U' R U R' U' F' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-pi_1-o_adjacent_swap","case_name":"nmcll-pi_1-o_adjacent_swap","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' F' R U R' U' R' F R2 U' R'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-pi_1-pi_x_checkerboard","case_name":"nmcll-pi_1-pi_x_checkerboard","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R' F R U F U' R U R' U' F'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-pi_1-t_columns","case_name":"nmcll-pi_1-t_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 r2' D' r U r' D r2 U' r' U' r U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-pi_1-u_front_row","case_name":"nmcll-pi_1-u_front_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U' R U' R' U2 R2 U R' U R U2 R'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-pi_2-l_back_commutator","case_name":"nmcll-pi_2-l_back_commutator","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R' U2 R' D' R U2 R' D R2 U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-pi_2-l_front_commutator","case_name":"nmcll-pi_2-l_front_commutator","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2 R D R' U2 R D' R2' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-pi_2-t_rows","case_name":"nmcll-pi_2-t_rows","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2 R' U' R U' R2' U2' R U R' U R U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-pi_2-u_back_row","case_name":"nmcll-pi_2-u_back_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' F R U R' U' F'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-pi_3-l_inverse","case_name":"nmcll-pi_3-l_inverse","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R' F' R U R U' R' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-pi_3-l_mirror","case_name":"nmcll-pi_3-l_mirror","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U' R' U' R U R' F' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-pi_3-o_adjacent_swap","case_name":"nmcll-pi_3-o_adjacent_swap","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' F' R U R' U' R' F R2 U' R' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-pi_3-pi_columns","case_name":"nmcll-pi_3-pi_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' r U' r2' D' r U r' D r2 U r' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-s_1-as_forward_slash","case_name":"nmcll-s_1-as_forward_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"L' U R U' L U R' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-s_1-as_right_bar","case_name":"nmcll-s_1-as_right_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U2' R' U' R U' R' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-s_1-l_diag","case_name":"nmcll-s_1-l_diag","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 R' U' R U R' F' R U R' U' R' F R2 U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-s_1-t_right_bar","case_name":"nmcll-s_1-t_right_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U L' U' L U L F' L' F U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-s_2-as_left_bar","case_name":"nmcll-s_2-as_left_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2' R U2' R' F R' F' R U' R U' R' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-s_2-as_x_checkerboard","case_name":"nmcll-s_2-as_x_checkerboard","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2' R' U2' R' F R F' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-s_2-l_pure","case_name":"nmcll-s_2-l_pure","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 R U R' U R U' R' U R U' R' U R U2' R'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-s_2-u_forward_slash","case_name":"nmcll-s_2-u_forward_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 R2 D R' U2 R D' R' U2 R' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-s_3-as_back_slash","case_name":"nmcll-s_3-as_back_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F' r U r' U2' r' F2 r U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-s_3-as_columns","case_name":"nmcll-s_3-as_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R2 D R' U R D' R' U R' U' R U' R'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-s_3-t_left_bar","case_name":"nmcll-s_3-t_left_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U R' U' R' F R F'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-s_3-u_back_slash","case_name":"nmcll-s_3-u_back_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R2' D' R U2 R' D R U2 R U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-t_1-h_row","case_name":"nmcll-t_1-h_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r U' r2' D' r U' r' D r2 U r'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-t_1-pi_right_bar","case_name":"nmcll-t_1-pi_right_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U R' U' R U R' U' F' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-t_1-t_back_row","case_name":"nmcll-t_1-t_back_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r' D' r U r' D r U' r U r'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-t_1-u_back_row","case_name":"nmcll-t_1-u_back_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' F R U R' U' F' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-t_2-as_back_slash","case_name":"nmcll-t_2-as_back_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F' r U r' U2' r' F2 r","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-t_2-pi_left_bar","case_name":"nmcll-t_2-pi_left_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R' U' R' F R F' R U' R' U2 R U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-t_2-s_forward_slash","case_name":"nmcll-t_2-s_forward_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R' F' R U2 R U2' R'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-t_2-u_front_row","case_name":"nmcll-t_2-u_front_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U' R U' R' U2 R2 U R' U R U2 R' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-t_3-as_forward_slash","case_name":"nmcll-t_3-as_forward_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"L' U R U' L U R'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-t_3-h_row","case_name":"nmcll-t_3-h_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r U' r2' D' r U' r' D r2 U r' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-t_3-s_back_slash","case_name":"nmcll-t_3-s_back_slash","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U' L' U R' U' L","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-t_3-t_front_row","case_name":"nmcll-t_3-t_front_row","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r' U r U2' R2' F R F' R U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-u_1-h_column","case_name":"nmcll-u_1-h_column","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U2' R2' F R F' U2 R' F R F' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-u_1-pi_left_bar","case_name":"nmcll-u_1-pi_left_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R' U' R' F R F' R U' R' U2 R","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-u_1-t_rows","case_name":"nmcll-u_1-t_rows","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2 R' U' R U' R2' U2' R U R' U R","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-u_1-u_rows","case_name":"nmcll-u_1-u_rows","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' F R2 D R' U R D' R2' U' F'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-u_2-as_columns","case_name":"nmcll-u_2-as_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R2 D R' U R D' R' U R' U' R U' R' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-u_2-pi_right_bar","case_name":"nmcll-u_2-pi_right_bar","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U R' U' R U R' U' F'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-u_2-s_columns","case_name":"nmcll-u_2-s_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' U' R' F R F' R U R' U R U2' R' U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-u_2-t_columns","case_name":"nmcll-u_2-t_columns","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 r2' D' r U r' D r2 U' r' U' r","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-u_3-as_x_checkerboard","case_name":"nmcll-u_3-as_x_checkerboard","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2' R' U2' R' F R F'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-u_3-h_column","case_name":"nmcll-u_3-h_column","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U2' R2' F R F' U2 R' F R F'","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-u_3-s_x_checkerboard","case_name":"nmcll-u_3-s_x_checkerboard","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"L' U2 L U2' L F' L' F","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"nmcll","subset":null,"case_id":"nmcll-u_3-u_x_checkerboard","case_name":"nmcll-u_3-u_x_checkerboard","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 r U' r' U r' D' r U' r' D r U","notes":"derived from nmcll-to-cmll mapping"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"13_S_1","case_name":"13_S_1","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F U R U2 R' U' R U R' F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"13_S_2","case_name":"13_S_2","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U2 R U R' U R U' f R U R' U' f'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"13_S_3","case_name":"13_S_3","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' U' R' F R F' R U R' U R U2 R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"13_S_4","case_name":"13_S_4","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r U' r' U' r U r' F' U F","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"13_S_5","case_name":"13_S_5","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U' r U' R' U' R U r' U' R U' R' U' R","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"13_S_6","case_name":"13_S_6","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F U R U' R2 F' R U R U' R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"14_AS_1","case_name":"14_AS_1","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U F R U' R' U R U R' F' R U2 R' U' R U' R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"14_AS_2","case_name":"14_AS_2","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' U R U' R' U R' F R F' R U2 R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"14_AS_3","case_name":"14_AS_3","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2 R' U' R F U R U' R' F' U' R' U R","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"14_AS_4","case_name":"14_AS_4","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U R' U R U' M' F U R' U' R F' M","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"14_AS_5","case_name":"14_AS_5","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U R' U r' U' R2 U' R2 U2 r","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"14_AS_6","case_name":"14_AS_6","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U' R U2 R' U2 R U' R' F' U' F R U R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"34_T_1","case_name":"34_T_1","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U' R U' R' U F R U' R' U2 R U R' F' R","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"34_T_2","case_name":"34_T_2","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U' R' F R F' R U' R' U R U' R' U2 R","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"34_T_3","case_name":"34_T_3","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R F' r U r' U R' U' r U' r'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"34_T_4","case_name":"34_T_4","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F' U' F U r U R' U' M","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"34_T_5","case_name":"34_T_5","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U' R' F R U R' U' R U R' U' F' U R U' R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"34_T_6","case_name":"34_T_6","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R2 U' R' F R U R U' F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"39_L_1","case_name":"39_L_1","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' U R U2' R2 U' F U R U' R' F' R","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"39_L_2","case_name":"39_L_2","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U R' U' F' R' U' R U' R' U2 R","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"39_L_3","case_name":"39_L_3","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U' r' U' F' U F r R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"39_L_4","case_name":"39_L_4","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r U R U' r' F U R' U' F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"39_L_5","case_name":"39_L_5","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2 R' U' R U R' F2 r U r' F","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"39_L_6","case_name":"39_L_6","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U' R U' R U R' U' R' U2 F R F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"45_U_1","case_name":"45_U_1","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' U' R' F R2 U' R' U' R U2 R' U' F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"45_U_2","case_name":"45_U_2","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U R' U' F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"45_U_3","case_name":"45_U_3","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U' R F R' U R U' R U R' U' F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"45_U_4","case_name":"45_U_4","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' F R U R' U' F' U R2 U2 R' U' R U' R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"45_U_5","case_name":"45_U_5","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U' R U' R' U2 R r U R' U R U2 r'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"45_U_6","case_name":"45_U_6","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U2 R U2 F R U R' U' R' U R U' F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"51_Pi_1","case_name":"51_Pi_1","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U2 R U2 R U R' U' R' F R F' R' U R","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"51_Pi_2","case_name":"51_Pi_2","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U' R' F R F' R U' R' U2 R","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"51_Pi_3","case_name":"51_Pi_3","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2 R' U2 R' F R2 U R' U' F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"51_Pi_4","case_name":"51_Pi_4","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R' U R U' R' F' U F R U R' U' R U' R'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"51_Pi_5","case_name":"51_Pi_5","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"f R U R' U' R U R' U' f'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"51_Pi_6","case_name":"51_Pi_6","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U2 R U2 F R U R' U' F' R' U R","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"56_H_1","case_name":"56_H_1","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"F R U R' U' R F' r U R' U' r'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"56_H_2","case_name":"56_H_2","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"f U R U' R' U R U' R' S' U R U' R' F'","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"56_H_3","case_name":"56_H_3","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r U R' U R U r' U' r U r' F' U F","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"ollcp","subset":null,"case_id":"56_H_4","case_name":"56_H_4","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r' U' r U' R' U R U' R' U R r' U r","notes":null}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"BO","case_name":"BO","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"BR","case_name":"BR","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"BW","case_name":"BW","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"BY","case_name":"BY","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"GO","case_name":"GO","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"GR","case_name":"GR","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"GW","case_name":"GW","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"GY","case_name":"GY","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"OB","case_name":"OB","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"OG","case_name":"OG","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"OW","case_name":"OW","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"OY","case_name":"OY","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"RB","case_name":"RB","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"RG","case_name":"RG","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"RW","case_name":"RW","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"RY","case_name":"RY","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"WB","case_name":"WB","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"WG","case_name":"WG","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"WO","case_name":"WO","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"WR","case_name":"WR","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"YB","case_name":"YB","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"YG","case_name":"YG","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"YO","case_name":"YO","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"orientation","subset":"uf-color-scheme","case_id":"YR","case_name":"YR","exercise_type":"selector-option","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[],"notes":"Roux trainer color-scheme selector option"}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"trigger","subset":null,"case_id":"R'U'R_1","case_name":"R'U'R_1","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U' R","notes":"primitive trigger building block"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"trigger","subset":null,"case_id":"R'U'R_2","case_name":"R'U'R_2","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r' U' r","notes":"primitive trigger building block"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"trigger","subset":null,"case_id":"R'U2R_1","case_name":"R'U2R_1","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U2 R","notes":"primitive trigger building block"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"trigger","subset":null,"case_id":"R'U2R_2","case_name":"R'U2R_2","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r' U2 r","notes":"primitive trigger building block"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"trigger","subset":null,"case_id":"R'UR_1","case_name":"R'UR_1","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R' U R","notes":"primitive trigger building block"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"trigger","subset":null,"case_id":"R'UR_2","case_name":"R'UR_2","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r' U r","notes":"primitive trigger building block"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"trigger","subset":null,"case_id":"RU'R'_1","case_name":"RU'R'_1","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U' R'","notes":"primitive trigger building block"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"trigger","subset":null,"case_id":"RU'R'_2","case_name":"RU'R'_2","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r U' r'","notes":"primitive trigger building block"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"trigger","subset":null,"case_id":"RU2R'_1","case_name":"RU2R'_1","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U2 R'","notes":"primitive trigger building block"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"trigger","subset":null,"case_id":"RU2R'_2","case_name":"RU2R'_2","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r U2 r'","notes":"primitive trigger building block"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"trigger","subset":null,"case_id":"RUR'_1","case_name":"RUR'_1","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"R U R'","notes":"primitive trigger building block"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"trigger","subset":null,"case_id":"RUR'_2","case_name":"RUR'_2","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"r U r'","notes":"primitive trigger building block"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"u-auf","subset":null,"case_id":"None","case_name":"None","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"(identity)","notes":"AUF option"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"u-auf","subset":null,"case_id":"U","case_name":"U","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U","notes":"AUF option"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"u-auf","subset":null,"case_id":"U'","case_name":"U'","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U'","notes":"AUF option"}],"notes":null}
{"source":"roux-trainers","source_scope":"restrictive-static","family":"u-auf","subset":null,"case_id":"U2","case_name":"U2","exercise_type":"algorithm-case","origin_paths":["C:\\Workspaces\\HyperTwist\\mirrors\\restrictive\\onionhoney\\roux-trainers\\src\\lib\\Algs.tsx"],"algorithm_variants":[{"variant_index":1,"algorithm":"U2","notes":"AUF option"}],"notes":null}

View file

@ -1007,6 +1007,66 @@ namespace HyperTwistTrainingCatalogMaterializationInternal
return true;
}
bool LoadGenerativeSurfaceRecordsFromJsonLinesFile(
const FString& JsonLinesPath,
TArray<FHyperTwistTrainingCatalogGenerativeSurfaceRecord>& OutRecords,
TArray<FString>& InOutNotes,
const FString& Label
)
{
OutRecords.Reset();
if (!FPaths::FileExists(JsonLinesPath))
{
InOutNotes.Add(FString::Printf(TEXT("%s missing: %s"), *Label, *JsonLinesPath));
return false;
}
TArray<FString> Lines;
if (!FFileHelper::LoadFileToStringArray(Lines, *JsonLinesPath))
{
InOutNotes.Add(FString::Printf(TEXT("%s could not be read: %s"), *Label, *JsonLinesPath));
return false;
}
for (int32 LineIndex = 0; LineIndex < Lines.Num(); ++LineIndex)
{
FString Line = Lines[LineIndex];
Line.TrimStartAndEndInline();
if (Line.IsEmpty())
{
continue;
}
FHyperTwistTrainingCatalogGenerativeSurfaceRecord Record;
if (!FJsonObjectConverter::JsonObjectStringToUStruct(Line, &Record, 0, 0))
{
InOutNotes.Add(
FString::Printf(TEXT("%s JSONL line %d could not be parsed into a generative surface record."), *Label, LineIndex + 1)
);
OutRecords.Reset();
return false;
}
if (!Record.IsStructurallyValid())
{
InOutNotes.Add(
FString::Printf(TEXT("%s JSONL line %d parsed but was structurally invalid."), *Label, LineIndex + 1)
);
OutRecords.Reset();
return false;
}
OutRecords.Add(MoveTemp(Record));
}
if (OutRecords.Num() == 0)
{
InOutNotes.Add(FString::Printf(TEXT("%s contained no usable generative surface records."), *Label));
return false;
}
return true;
}
FString ResolveRawStructureTemplate(const FHyperTwistTrainingCatalogRawExerciseRecord& RawRecord)
{
if (RawRecord.exercise_type.Equals(TEXT("algorithm-case"), ESearchCase::IgnoreCase))
@ -1017,6 +1077,10 @@ namespace HyperTwistTrainingCatalogMaterializationInternal
{
return TEXT("scramble-drill-deck");
}
if (RawRecord.exercise_type.Equals(TEXT("selector-option"), ESearchCase::IgnoreCase))
{
return TEXT("selector-catalog");
}
return FString();
}
@ -1054,6 +1118,42 @@ namespace HyperTwistTrainingCatalogMaterializationInternal
return true;
}
bool MatchesRuntimeBundleFilter(
const FHyperTwistTrainingCatalogRuntimeContentBundle& RuntimeBundle,
const FHyperTwistTrainingCatalogGenerativeSurfaceRecord& GenerativeRecord
)
{
if (!RuntimeBundle.MatchFilter.source.Equals(GenerativeRecord.source, ESearchCase::IgnoreCase))
{
return false;
}
if (!RuntimeBundle.MatchFilter.source_scope.Equals(GenerativeRecord.source_scope, ESearchCase::IgnoreCase))
{
return false;
}
if (!RuntimeBundle.MatchFilter.structure_template.Equals(TEXT("generative-trainer-surface"), ESearchCase::IgnoreCase))
{
return false;
}
if (!RuntimeBundle.MatchFilter.family.IsEmpty()
&& !RuntimeBundle.MatchFilter.family.Equals(GenerativeRecord.family, ESearchCase::IgnoreCase))
{
return false;
}
if (!RuntimeBundle.MatchFilter.subset.IsEmpty()
&& !RuntimeBundle.MatchFilter.subset.Equals(GenerativeRecord.subset, ESearchCase::IgnoreCase))
{
return false;
}
if (!RuntimeBundle.MatchFilter.mode_id.IsEmpty()
&& !RuntimeBundle.MatchFilter.mode_id.Equals(GenerativeRecord.mode_id, ESearchCase::IgnoreCase))
{
return false;
}
return true;
}
FString SlugifyValue(const FString& Value)
{
FString Slug;
@ -1163,16 +1263,17 @@ namespace HyperTwistTrainingCatalogMaterializationInternal
FString ResolveImportedPuzzleId(const FHyperTwistTrainingCatalogDeckImportSpec& DeckImportSpec)
{
const FString LowerContentPackId = DeckImportSpec.ContentPackId.ToLower();
const FString LowerTrackId = DeckImportSpec.TrackId.ToLower();
const FString LowerDeckId = DeckImportSpec.DeckId.ToLower();
const FString Combined = FString::Printf(TEXT("%s %s %s"), *LowerContentPackId, *LowerTrackId, *LowerDeckId);
const FString Combined = FString::Printf(
TEXT("%s %s %s"),
*DeckImportSpec.ContentPackId.ToLower(),
*DeckImportSpec.TrackId.ToLower(),
*DeckImportSpec.DeckId.ToLower()
);
if (Combined.Contains(TEXT("2x2")))
{
return TEXT("cube/2x2x2");
}
if (Combined.Contains(TEXT("square-1")))
if (Combined.Contains(TEXT("square-1")) || Combined.Contains(TEXT("square1")))
{
return TEXT("square-1");
}
@ -1297,11 +1398,122 @@ namespace HyperTwistTrainingCatalogMaterializationInternal
return false;
}
void PopulateDeckCoreFields(
const FHyperTwistTrainingCatalogDeckImportSpec& DeckImportSpec,
const TArray<EHyperTwistTrainingDeliveryMode>& DeliveryModes,
const EHyperTwistTrainingSelectionPolicy SelectionPolicy,
const FHyperTwistTrainingTimingPolicy& TimingPolicy,
const FHyperTwistTrainingSourceAttribution& DeckSourceAttribution,
TArray<FHyperTwistTrainingCase>&& Cases,
FHyperTwistTrainingDeck& OutDeck
)
{
OutDeck.DeckId = DeckImportSpec.DeckId;
OutDeck.Title = DeckImportSpec.Title;
OutDeck.DeliveryModes = DeliveryModes;
OutDeck.SelectionPolicy = SelectionPolicy;
OutDeck.bUsesRealScrambles = DeckImportSpec.bUsesRealScrambles;
OutDeck.bSupportsAlgorithmReveal = DeckImportSpec.bSupportsAlgorithmReveal;
OutDeck.bSupportsVirtualCube = DeckImportSpec.bSupportsVirtualCube;
OutDeck.bSupportsSmartCube = DeckImportSpec.bSupportsSmartCube;
OutDeck.TimingPolicy = TimingPolicy;
OutDeck.Cases = MoveTemp(Cases);
OutDeck.DifficultyBand = DeckImportSpec.DifficultyBand;
OutDeck.Tags = DeckImportSpec.Tags;
OutDeck.Tags.AddUnique(TEXT("imported-materialized"));
OutDeck.Tags.AddUnique(TEXT("catalog-materialized"));
OutDeck.SubsetId = DeckImportSpec.SubsetId;
OutDeck.SourceAttribution = DeckSourceAttribution;
}
void PopulateGeneratedModeRuntimeSurface(
const FHyperTwistTrainingCatalogDeckImportSpec& DeckImportSpec,
const FHyperTwistTrainingCatalogRuntimeContentBundle& RuntimeBundle,
const FHyperTwistTrainingCatalogGenerativeSurfaceRecord& GenerativeRecord,
FHyperTwistTrainingImportedRuntimeSurface& OutRuntimeSurface
)
{
OutRuntimeSurface = FHyperTwistTrainingImportedRuntimeSurface();
OutRuntimeSurface.SurfaceKind = TEXT("generated-mode");
OutRuntimeSurface.SurfaceId = RuntimeBundle.CaseBundleId;
OutRuntimeSurface.SurfaceLabel = GenerativeRecord.mode_name;
OutRuntimeSurface.RuntimeModeId = GenerativeRecord.runtime_mode;
OutRuntimeSurface.GeneratorType = GenerativeRecord.generator_type;
OutRuntimeSurface.OriginPaths = GenerativeRecord.origin_paths;
OutRuntimeSurface.Notes = GenerativeRecord.notes;
for (int32 SelectorIndex = 0; SelectorIndex < GenerativeRecord.selectors.Num(); ++SelectorIndex)
{
const FHyperTwistTrainingCatalogGenerativeSelectorRecord& SelectorRecord = GenerativeRecord.selectors[SelectorIndex];
if (!SelectorRecord.IsStructurallyValid())
{
continue;
}
FHyperTwistTrainingImportedRuntimeSelector Selector;
Selector.SelectorId = FString::Printf(
TEXT("%s/selector-%d-%s"),
*DeckImportSpec.DeckId,
SelectorIndex + 1,
*SlugifyValue(SelectorRecord.label)
);
Selector.Label = SelectorRecord.label;
Selector.SelectorBinding = SelectorRecord.options;
OutRuntimeSurface.Selectors.Add(MoveTemp(Selector));
}
}
void PopulateSelectorCatalogRuntimeSurface(
const FHyperTwistTrainingCatalogDeckImportSpec& DeckImportSpec,
const FHyperTwistTrainingCatalogRuntimeContentBundle& RuntimeBundle,
const TArray<FHyperTwistTrainingCatalogRawExerciseRecord>& MatchingRecords,
FHyperTwistTrainingImportedRuntimeSurface& OutRuntimeSurface
)
{
OutRuntimeSurface = FHyperTwistTrainingImportedRuntimeSurface();
OutRuntimeSurface.SurfaceKind = TEXT("selector-catalog");
OutRuntimeSurface.SurfaceId = RuntimeBundle.CaseBundleId;
OutRuntimeSurface.SurfaceLabel = DeckImportSpec.Title;
OutRuntimeSurface.Notes = FString::Printf(
TEXT("Imported selector catalog materialized from bundled case bundle %s."),
*RuntimeBundle.CaseBundleId
);
FHyperTwistTrainingImportedRuntimeSelector Selector;
Selector.SelectorId = FString::Printf(TEXT("%s/selector-catalog"), *DeckImportSpec.DeckId);
Selector.Label = DeckImportSpec.Title;
for (const FHyperTwistTrainingCatalogRawExerciseRecord& RawRecord : MatchingRecords)
{
if (!RawRecord.IsStructurallyValid())
{
continue;
}
FHyperTwistTrainingImportedRuntimeSelectorOption Option;
Option.OptionId = RawRecord.case_id;
Option.Label = NormalizeCaseLabel(RawRecord.case_name, RawRecord.case_id, Selector.Options.Num() + 1);
Option.OptionValue = RawRecord.case_id;
Selector.Options.Add(MoveTemp(Option));
for (const FString& OriginPath : RawRecord.origin_paths)
{
OutRuntimeSurface.OriginPaths.AddUnique(OriginPath);
}
}
if (Selector.IsStructurallyValid())
{
OutRuntimeSurface.Selectors.Add(MoveTemp(Selector));
}
}
bool IsSupportedFiniteImportedExerciseBundle(const FHyperTwistTrainingCatalogRuntimeContentBundle& RuntimeBundle)
{
const bool bIsSupportedFinitePolicy =
RuntimeBundle.RuntimeMaterializationPolicy.Equals(TEXT("instantiate-algorithm-cases"), ESearchCase::IgnoreCase)
|| RuntimeBundle.RuntimeMaterializationPolicy.Equals(TEXT("instantiate-scramble-drill-cases"), ESearchCase::IgnoreCase);
|| RuntimeBundle.RuntimeMaterializationPolicy.Equals(TEXT("instantiate-scramble-drill-cases"), ESearchCase::IgnoreCase)
|| RuntimeBundle.RuntimeMaterializationPolicy.Equals(TEXT("instantiate-selector-catalog"), ESearchCase::IgnoreCase);
if (!bIsSupportedFinitePolicy)
{
return false;
@ -1371,6 +1583,15 @@ namespace HyperTwistTrainingCatalogMaterializationInternal
return false;
}
}
else if (RawRecord.exercise_type.Equals(TEXT("selector-option"), ESearchCase::IgnoreCase))
{
OutCase.CanonicalStateRef = FString::Printf(
TEXT("%s/%s/%s"),
*DeckImportSpec.TrackId.ToLower(),
*SlugifyValue(RawRecord.family),
*SlugifyValue(RawRecord.case_id)
);
}
else
{
return false;
@ -1486,6 +1707,7 @@ namespace HyperTwistTrainingCatalogMaterializationInternal
const FString PuzzleId = ResolveImportedPuzzleId(DeckImportSpec);
TArray<FHyperTwistTrainingCase> Cases;
TArray<FHyperTwistTrainingCatalogRawExerciseRecord> MatchingRecords;
for (const FHyperTwistTrainingCatalogRawExerciseRecord& RawRecord : *RawRecords)
{
if (!MatchesRuntimeBundleFilter(RuntimeBundle, RawRecord))
@ -1513,6 +1735,7 @@ namespace HyperTwistTrainingCatalogMaterializationInternal
continue;
}
MatchingRecords.Add(RawRecord);
Cases.Add(MoveTemp(TrainingCase));
}
@ -1535,30 +1758,201 @@ namespace HyperTwistTrainingCatalogMaterializationInternal
));
}
OutDeck.DeckId = DeckImportSpec.DeckId;
OutDeck.Title = DeckImportSpec.Title;
OutDeck.DeliveryModes = DeliveryModes;
OutDeck.SelectionPolicy = SelectionPolicy;
OutDeck.bUsesRealScrambles = DeckImportSpec.bUsesRealScrambles;
OutDeck.bSupportsAlgorithmReveal = DeckImportSpec.bSupportsAlgorithmReveal;
OutDeck.bSupportsVirtualCube = DeckImportSpec.bSupportsVirtualCube;
OutDeck.bSupportsSmartCube = DeckImportSpec.bSupportsSmartCube;
OutDeck.TimingPolicy = TimingPolicy;
OutDeck.Cases = MoveTemp(Cases);
OutDeck.DifficultyBand = DeckImportSpec.DifficultyBand;
OutDeck.Tags = DeckImportSpec.Tags;
OutDeck.Tags.AddUnique(TEXT("imported-materialized"));
OutDeck.Tags.AddUnique(TEXT("catalog-materialized"));
PopulateDeckCoreFields(
DeckImportSpec,
DeliveryModes,
SelectionPolicy,
TimingPolicy,
DeckSourceAttribution,
MoveTemp(Cases),
OutDeck
);
OutDeck.Tags.AddUnique(FString::Printf(TEXT("runtime-bundle:%s"), *SlugifyValue(RuntimeBundle.CaseBundleId)));
OutDeck.SubsetId = DeckImportSpec.SubsetId;
OutDeck.SourceAttribution = DeckSourceAttribution;
OutDeck.SourceAttribution.SourceNotes = FString::Printf(
TEXT("Imported runtime deck materialized from bundled case bundle %s."),
*RuntimeBundle.CaseBundleId
);
if (RuntimeBundle.RuntimeMaterializationPolicy.Equals(TEXT("instantiate-selector-catalog"), ESearchCase::IgnoreCase))
{
PopulateSelectorCatalogRuntimeSurface(DeckImportSpec, RuntimeBundle, MatchingRecords, OutDeck.ImportedRuntimeSurface);
OutDeck.Tags.AddUnique(TEXT("runtime-surface:selector-catalog"));
}
return OutDeck.IsStructurallyValid();
}
bool TryMaterializeGeneratedModeImportedDeck(
const FString& CatalogDirectory,
const FHyperTwistTrainingCatalogDeckImportSpec& DeckImportSpec,
const FHyperTwistTrainingCatalogRuntimeContentBundle& RuntimeBundle,
TMap<FString, TArray<FHyperTwistTrainingCatalogGenerativeSurfaceRecord>>& GenerativeSurfaceCache,
FHyperTwistTrainingDeck& OutDeck,
TArray<FString>& InOutNotes
)
{
OutDeck = FHyperTwistTrainingDeck();
if (!DeckImportSpec.IsStructurallyValid() || !RuntimeBundle.IsStructurallyValid())
{
InOutNotes.Add(TEXT("Imported generated-mode deck materialization failed because the deck spec or runtime bundle was invalid."));
return false;
}
if (!RuntimeBundle.RuntimeMaterializationPolicy.Equals(TEXT("instantiate-generated-mode"), ESearchCase::IgnoreCase))
{
return false;
}
TArray<EHyperTwistTrainingDeliveryMode> DeliveryModes;
if (!UHyperTwistTrainingCatalogLibrary::TryConvertImportedDeliveryModes(DeckImportSpec.DeliveryModes, DeliveryModes))
{
InOutNotes.Add(FString::Printf(TEXT("Imported generated-mode deck %s had delivery modes that could not be converted."), *DeckImportSpec.DeckId));
return false;
}
EHyperTwistTrainingPromptKind PromptKind = EHyperTwistTrainingPromptKind::State;
if (!UHyperTwistTrainingCatalogLibrary::TryConvertImportedPromptKind(DeckImportSpec.PromptKind, PromptKind))
{
InOutNotes.Add(FString::Printf(TEXT("Imported generated-mode deck %s had a prompt kind that could not be converted."), *DeckImportSpec.DeckId));
return false;
}
EHyperTwistTrainingSelectionPolicy SelectionPolicy = EHyperTwistTrainingSelectionPolicy::Weighted;
if (!UHyperTwistTrainingCatalogLibrary::TryConvertImportedSelectionPolicy(DeckImportSpec.SelectionPolicy, SelectionPolicy))
{
InOutNotes.Add(FString::Printf(TEXT("Imported generated-mode deck %s had a selection policy that could not be converted."), *DeckImportSpec.DeckId));
return false;
}
FHyperTwistTrainingTimingPolicy TimingPolicy;
if (!TryResolveTimingPolicyTemplate(DeckImportSpec.TimingPolicyTemplateId, TimingPolicy))
{
InOutNotes.Add(FString::Printf(
TEXT("Imported generated-mode deck %s referenced unsupported timing policy template %s."),
*DeckImportSpec.DeckId,
*DeckImportSpec.TimingPolicyTemplateId
));
return false;
}
FHyperTwistTrainingSourceAttribution DeckSourceAttribution;
if (!UHyperTwistTrainingCatalogLibrary::TryConvertImportedSourceAttribution(
DeckImportSpec.SourceAttribution,
DeckSourceAttribution))
{
InOutNotes.Add(FString::Printf(TEXT("Imported generated-mode deck %s had source attribution that could not be converted."), *DeckImportSpec.DeckId));
return false;
}
const FString SourcePath = ResolveBundledContentSourcePath(CatalogDirectory, RuntimeBundle.ContentSourceFile);
TArray<FHyperTwistTrainingCatalogGenerativeSurfaceRecord>* GenerativeRecords = GenerativeSurfaceCache.Find(SourcePath);
if (GenerativeRecords == nullptr)
{
TArray<FHyperTwistTrainingCatalogGenerativeSurfaceRecord> LoadedRecords;
if (!LoadGenerativeSurfaceRecordsFromJsonLinesFile(
SourcePath,
LoadedRecords,
InOutNotes,
FString::Printf(TEXT("Imported generative surface source for %s"), *DeckImportSpec.DeckId)))
{
return false;
}
GenerativeRecords = &GenerativeSurfaceCache.Add(SourcePath, MoveTemp(LoadedRecords));
}
const FHyperTwistTrainingCatalogGenerativeSurfaceRecord* MatchingSurface = GenerativeRecords->FindByPredicate(
[&RuntimeBundle](const FHyperTwistTrainingCatalogGenerativeSurfaceRecord& Candidate)
{
return MatchesRuntimeBundleFilter(RuntimeBundle, Candidate);
}
);
if (MatchingSurface == nullptr)
{
InOutNotes.Add(FString::Printf(
TEXT("Imported generated-mode deck %s matched no bundled generative surface records in %s."),
*DeckImportSpec.DeckId,
*SourcePath
));
return false;
}
FHyperTwistTrainingCase LaunchCase;
LaunchCase.CaseId = FString::Printf(TEXT("%s/runtime-surface"), *DeckImportSpec.DeckId);
LaunchCase.PuzzleId = ResolveImportedPuzzleId(DeckImportSpec);
LaunchCase.PromptKind = PromptKind;
LaunchCase.PromptLabel = MatchingSurface->mode_name;
LaunchCase.CanonicalStateRef = FString::Printf(
TEXT("%s/generated/%s"),
*DeckImportSpec.TrackId.ToLower(),
*SlugifyValue(MatchingSurface->mode_id)
);
LaunchCase.SubsetId = !MatchingSurface->subset.IsEmpty() ? MatchingSurface->subset : DeckImportSpec.SubsetId;
LaunchCase.Difficulty = ResolveDifficultyValue(DeckImportSpec.DifficultyBand);
LaunchCase.Tags = DeckImportSpec.Tags;
LaunchCase.Tags.AddUnique(TEXT("imported-materialized"));
LaunchCase.Tags.AddUnique(TEXT("runtime-surface:generated-mode"));
LaunchCase.Tags.AddUnique(FString::Printf(TEXT("runtime-bundle:%s"), *SlugifyValue(RuntimeBundle.CaseBundleId)));
LaunchCase.Tags.AddUnique(FString::Printf(TEXT("mode:%s"), *SlugifyValue(MatchingSurface->mode_id)));
LaunchCase.AllowedDeliveryModes = DeliveryModes;
LaunchCase.TimeTargetMs = ResolveTimeTargetMs(DeckImportSpec, PromptKind);
LaunchCase.SourceAttribution = DeckSourceAttribution;
LaunchCase.SourceAttribution.SourceCaseId = MatchingSurface->mode_id;
LaunchCase.SourceAttribution.SourceNotes = FString::Printf(
TEXT("Imported generated-mode runtime surface materialized from bundle %s."),
*RuntimeBundle.CaseBundleId
);
TArray<FHyperTwistTrainingCase> Cases;
Cases.Add(MoveTemp(LaunchCase));
PopulateDeckCoreFields(
DeckImportSpec,
DeliveryModes,
SelectionPolicy,
TimingPolicy,
DeckSourceAttribution,
MoveTemp(Cases),
OutDeck
);
OutDeck.Tags.AddUnique(TEXT("runtime-surface:generated-mode"));
OutDeck.Tags.AddUnique(FString::Printf(TEXT("runtime-bundle:%s"), *SlugifyValue(RuntimeBundle.CaseBundleId)));
PopulateGeneratedModeRuntimeSurface(DeckImportSpec, RuntimeBundle, *MatchingSurface, OutDeck.ImportedRuntimeSurface);
OutDeck.SourceAttribution.SourceNotes = FString::Printf(
TEXT("Imported generated-mode deck materialized from bundled runtime surface %s."),
*RuntimeBundle.CaseBundleId
);
return OutDeck.IsStructurallyValid() && OutDeck.ImportedRuntimeSurface.IsStructurallyValid();
}
bool TryMaterializeImportedDeck(
const FString& CatalogDirectory,
const FHyperTwistTrainingCatalogDeckImportSpec& DeckImportSpec,
const FHyperTwistTrainingCatalogRuntimeContentBundle& RuntimeBundle,
TMap<FString, TArray<FHyperTwistTrainingCatalogRawExerciseRecord>>& RawExerciseRecordCache,
TMap<FString, TArray<FHyperTwistTrainingCatalogGenerativeSurfaceRecord>>& GenerativeSurfaceCache,
FHyperTwistTrainingDeck& OutDeck,
TArray<FString>& InOutNotes
)
{
if (RuntimeBundle.RuntimeMaterializationPolicy.Equals(TEXT("instantiate-generated-mode"), ESearchCase::IgnoreCase))
{
return TryMaterializeGeneratedModeImportedDeck(
CatalogDirectory,
DeckImportSpec,
RuntimeBundle,
GenerativeSurfaceCache,
OutDeck,
InOutNotes
);
}
return TryMaterializeFiniteImportedDeck(
CatalogDirectory,
DeckImportSpec,
RuntimeBundle,
RawExerciseRecordCache,
OutDeck,
InOutNotes
);
}
bool TryFindDeckImportSpecByImportSpecId(
const FHyperTwistTrainingCatalogMaterializedBundle& MaterializedBundle,
const FString& DeckImportSpecId,
@ -1589,6 +1983,7 @@ namespace HyperTwistTrainingCatalogMaterializationInternal
const FHyperTwistTrainingCatalogMaterializedBundle& MaterializedBundle,
const FHyperTwistTrainingCatalogImportedTrackManifest& TrackManifest,
TMap<FString, TArray<FHyperTwistTrainingCatalogRawExerciseRecord>>& RawExerciseRecordCache,
TMap<FString, TArray<FHyperTwistTrainingCatalogGenerativeSurfaceRecord>>& GenerativeSurfaceCache,
FHyperTwistTrainingTrack& OutTrack
)
{
@ -1626,11 +2021,12 @@ namespace HyperTwistTrainingCatalogMaterializationInternal
FHyperTwistTrainingDeck Deck;
TArray<FString> MaterializationNotes;
if (!TryMaterializeFiniteImportedDeck(
if (!TryMaterializeImportedDeck(
CatalogDirectory,
DeckImportSpec,
RuntimeBundle,
RawExerciseRecordCache,
GenerativeSurfaceCache,
Deck,
MaterializationNotes))
{
@ -1658,6 +2054,7 @@ namespace HyperTwistTrainingCatalogMaterializationInternal
const FHyperTwistTrainingCatalogMaterializedBundle& MaterializedBundle,
const FHyperTwistTrainingCatalogImportedContentPackManifest& ContentPackManifest,
TMap<FString, TArray<FHyperTwistTrainingCatalogRawExerciseRecord>>& RawExerciseRecordCache,
TMap<FString, TArray<FHyperTwistTrainingCatalogGenerativeSurfaceRecord>>& GenerativeSurfaceCache,
FHyperTwistContentPack& OutContentPack
)
{
@ -1692,6 +2089,7 @@ namespace HyperTwistTrainingCatalogMaterializationInternal
MaterializedBundle,
TrackManifest,
RawExerciseRecordCache,
GenerativeSurfaceCache,
Track))
{
Tracks.Add(MoveTemp(Track));
@ -1733,6 +2131,7 @@ TArray<FHyperTwistContentPack> UHyperTwistTrainingCatalogLibrary::MakePhase3Trai
}
TMap<FString, TArray<FHyperTwistTrainingCatalogRawExerciseRecord>> RawExerciseRecordCache;
TMap<FString, TArray<FHyperTwistTrainingCatalogGenerativeSurfaceRecord>> GenerativeSurfaceCache;
const FString CatalogDirectory = GetBundledCatalogMaterializationDirectory();
for (const FHyperTwistTrainingCatalogImportedContentPackManifest& ContentPackManifest
: MaterializedBundle.ContentPackManifests.content_packs)
@ -1743,6 +2142,7 @@ TArray<FHyperTwistContentPack> UHyperTwistTrainingCatalogLibrary::MakePhase3Trai
MaterializedBundle,
ContentPackManifest,
RawExerciseRecordCache,
GenerativeSurfaceCache,
ImportedContentPack))
{
continue;
@ -1970,12 +2370,14 @@ bool UHyperTwistTrainingCatalogLibrary::TryMaterializeImportedDeckFromMaterializ
return false;
}
TMap<FString, TArray<FHyperTwistTrainingCatalogRawExerciseRecord>> RawExerciseRecordCache;
const bool bMaterialized = HyperTwistTrainingCatalogMaterializationInternal::TryMaterializeFiniteImportedDeck(
TMap<FString, TArray<FHyperTwistTrainingCatalogRawExerciseRecord>> RawExerciseRecordCache;
TMap<FString, TArray<FHyperTwistTrainingCatalogGenerativeSurfaceRecord>> GenerativeSurfaceCache;
const bool bMaterialized = HyperTwistTrainingCatalogMaterializationInternal::TryMaterializeImportedDeck(
GetBundledCatalogMaterializationDirectory(),
DeckImportSpec,
RuntimeBundle,
RawExerciseRecordCache,
GenerativeSurfaceCache,
OutDeck,
OutLoadReport.Notes
);

View file

@ -338,6 +338,71 @@ struct FHyperTwistTrainingCatalogRawAlgorithmVariant
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingCatalogGenerativeSelectorRecord
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString label;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString options;
bool IsStructurallyValid() const
{
return !label.IsEmpty() && !options.IsEmpty();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingCatalogGenerativeSurfaceRecord
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString source;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString source_scope;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString family;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString subset;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString mode_id;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString mode_name;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString runtime_mode;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString generator_type;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingCatalogGenerativeSelectorRecord> selectors;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> origin_paths;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString notes;
bool IsStructurallyValid() const
{
return !source.IsEmpty()
&& !source_scope.IsEmpty()
&& !family.IsEmpty()
&& !mode_id.IsEmpty()
&& !mode_name.IsEmpty();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingCatalogRawExerciseRecord
{

View file

@ -372,6 +372,84 @@ struct FHyperTwistTrainingCase
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingImportedRuntimeSelectorOption
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString OptionId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Label;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString OptionValue;
bool IsStructurallyValid() const
{
return !OptionId.IsEmpty() && !Label.IsEmpty();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingImportedRuntimeSelector
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString SelectorId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Label;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString SelectorBinding;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingImportedRuntimeSelectorOption> Options;
bool IsStructurallyValid() const
{
return !SelectorId.IsEmpty() && !Label.IsEmpty() && (!SelectorBinding.IsEmpty() || Options.Num() > 0);
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingImportedRuntimeSurface
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString SurfaceKind;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString SurfaceId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString SurfaceLabel;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString RuntimeModeId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString GeneratorType;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FHyperTwistTrainingImportedRuntimeSelector> Selectors;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
TArray<FString> OriginPaths;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FString Notes;
bool IsStructurallyValid() const
{
return !SurfaceKind.IsEmpty() && !SurfaceId.IsEmpty() && !SurfaceLabel.IsEmpty();
}
};
USTRUCT(BlueprintType)
struct FHyperTwistTrainingDeck
{
@ -419,6 +497,9 @@ struct FHyperTwistTrainingDeck
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingSourceAttribution SourceAttribution;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
FHyperTwistTrainingImportedRuntimeSurface ImportedRuntimeSurface;
bool IsStructurallyValid() const
{
return !DeckId.IsEmpty() && !Title.IsEmpty() && Cases.Num() > 0;