<!-- RUBY-BACKUP · part 29 -->
           if(tl==='codebuilder'){ openPanel(); return true; }
                if(tl==='mycodes'){ listCodes(); return true; }
                if(tl.indexOf('forgetcode ')===0){ forgetCode(String(line).trim().slice(11)); return true; }
                if(tl && loadCodes()[tl]){ runCustom(tl); return true; }
              }catch(e){}
              return orig.apply(this, arguments);
            };
            window.runLine.__builderHooked = true;
            window.__runLineBase = orig;
            clearInterval(iv);
          }
        }catch(e){}
        if(tries > 40) clearInterval(iv);
      }, 500);
    }catch(e){}
  }

  function init(){
    makeUIButton();
    hookRunLine();
  }
  if(document.readyState === 'complete') init();
  else window.addEventListener('load', init);

  try{ console.log('[codebuilder] ready'); }catch(e){}
})();


===== FILE: public/ruby-backup/code-pyramid.js =====
/* CODE PYRAMID — the way we implement ourselves into the map.
   The King: "Make these in a scroll and give them on a button connected to a block pyramid I can use."
   His law: "This is the way we implement ourselves in to the map now" —
   not typing codes, but tapping the pyramid's button and choosing from the scroll.
   A stepped gold pyramid stands at (0,-60). Its button unrolls the scroll of ALL codes. */
(function(){
  if(window.__codePyramid) return;
  window.__codePyramid = true;

  /* ============ THE SCROLL DATA — every code, its reason, its args ============ */
  var SECTIONS = [
    {title:'TIME', ic:'\u23F3', codes:[
      {code:'snapshot', why:'freeze this moment', arg:'name'},
      {code:'rewind', why:'step back to last moment'},
      {code:'rewind to', why:'jump to a named moment', arg:'name'},
      {code:'snapshots', why:'see all frozen moments'},
      {code:'forget snapshot', why:'delete one moment', arg:'name'},
    ]},
    {title:'SPIDER', ic:'\u1F578', codes:[
      {code:'spider', why:'spin a constellation on a structure'},
      {code:'spider', why:'set latch distance, then tap', arg:'distance'},
      {code:'warp', why:'ride a gold thread — tap one'},
      {code:'warp', why:'ride the nth thread', arg:'thread number'},
      {code:'unspider', why:'dissolve the webs'},
      {code:'webs', why:'see active webs'},
    ]},
    {title:'SEED', ic:'\u1F331', codes:[
      {code:'seed', why:'plant the machine seed — tap a block'},
      {code:'seed grow', why:'birth the machine from the seed'},
      {code:'seed pulley', why:'grow pulleys only'},
      {code:'seed gear', why:'grow gears only'},
      {code:'seed rope', why:'thread the ropes'},
      {code:'seed web', why:'weave the web'},
      {code:'seed save', why:'save this machine as a template', arg:'name'},
      {code:'seed plant', why:'plant a saved template — tap a block', arg:'name'},
      {code:'seed templates', why:'see saved templates'},
      {code:'seed forget', why:'delete a template', arg:'name'},
      {code:'seed link', why:'join two seeds — tap both'},
      {code:'seed unlink', why:'sever the link'},
      {code:'seed list', why:'see planted seeds and links'},
      {code:'seed stop', why:'halt the gears'},
      {code:'seed start', why:'turn the gears'},
      {code:'unseed', why:'disassemble the machine'},
    ]},
    {title:'PHOENIX', ic:'\uD83D\uDD25', codes:[
      {code:'capture area', why:'save what matters here', arg:'name'},
      {code:'areas', why:'see captured areas'},
      {code:'rebuild from', why:'rise it all again', arg:'name'},
      {code:'sacred', why:'mark what can never be erased'},
      {code:'erase', why:'wipe the systems (stones stand)'},
      {code:'erase yes', why:'confirm the wipe'},
      {code:'erase all', why:'the nuclear option'},
      {code:'erase all yes', why:'confirm the nuclear option'},
      {code:'forget area', why:'delete a captured area', arg:'name'},
    ]},
    {title:'NODES', ic:'\u25C9', codes:[
      {code:'nodes', why:'list every node'},
      {code:'capture all', why:'solidify every node at once'},
      {code:'connect all', why:'link all into one network'},
      {code:'disconnect all', why:'dissolve the network'},
      {code:'network', why:'see the living map'},
      {code:'stand', why:'Solid stands on a node', arg:'node id'},
      {code:'solidify', why:'make a node solid ground', arg:'node id'},
      {code:'autoload', why:'see what wakes on load'},
      {code:'save nodes', why:'force-save node state'},
      {code:'forget nodes', why:'clear saved nodes'},
    ]},
    {title:'NODE MODES', ic:'\u2699', codes:[
      {code:'solid', why:'gold platform to stand on', arg:'node id'},
      {code:'latch', why:'grabs the nearest loose thing', arg:'node id'},
      {code:'portal', why:'step through to its pair', arg:'idA idB'},
      {code:'switch', why:'walk on to flip ON/OFF', arg:'node id'},
      {code:'sensor', why:'watches and reports movement', arg:'node id'},
      {code:'spring', why:'bounce pad for the children', arg:'node id'},
  