<!-- SOLIDABILITY-WORLD · part 8 -->
       "line": 8412,
          "type": "route"
        }
      ]
    }
  },
  "verification": {
    "auth": {
      "status": "untested",
      "note": "No verification record"
    },
    "forum": {
      "status": "untested",
      "note": "No verification record"
    },
    "ai": {
      "status": "verified",
      "revision": "96855911a4bb4f8f...",
      "date": "2026-10-08",
      "note": "DEF-001 resolved, abuseGuard verified"
    },
    "legal": {
      "status": "verified",
      "revision": "legal-center-2026-10-08",
      "date": "2026-10-08",
      "note": "8 routes verified live"
    }
  }
}

===== FILE: public/solidability-world/data/server-symbols.json =====
{"path":"server.js","totalLines":12668,"symbols":[{"name":"auditLog","line":89,"type":"function"},{"name":"if","line":104,"type":"method"},{"name":"GET /api/version","line":180,"type":"route"},{"name":"for","line":209,"type":"method"},{"name":"if","line":210,"type":"method"},{"name":"GET /ruby","line":218,"type":"route"},{"name":"GET /ruby2","line":223,"type":"route"},{"name":"USE /saga","line":231,"type":"route"},{"name":"GET /playaspace","line":262,"type":"route"},{"name":"GET /playaspace/:n","line":266,"type":"route"},{"name":"USE /ruby2","line":275,"type":"route"},{"name":"GET /practice","line":277,"type":"route"},{"name":"GET /coders100","line":282,"type":"route"},{"name":"GET /pulleys","line":287,"type":"route"},{"name":"USE /ruby","line":292,"type":"route"},{"name":"if","line":295,"type":"method"},{"name":"rubyWatchIdOk","line":314,"type":"function"},{"name":"POST /api/ruby/watch/:id","line":315,"type":"route"},{"name":"POST /api/ruby/presence/:id","line":331,"type":"route"},{"name":"if","line":343,"type":"method"},{"name":"POST /api/ruby/eyes/:id","line":352,"type":"route"},{"name":"GET /api/ruby/eyes/:id","line":359,"type":"route"},{"name":"POST /api/ruby/chat/:id","line":370,"type":"route"},{"name":"GET /api/ruby/chat/:id","line":385,"type":"route"},{"name":"bumpRoomVersion","line":396,"type":"function"},{"name":"getRoomVersion","line":403,"type":"function"},{"name":"GET /api/ruby/version/:id","line":412,"type":"route"},{"name":"POST /api/ruby/bump/:id","line":417,"type":"route"},{"name":"POST /api/ruby/stones/:id","line":422,"type":"route"},{"name":"GET /api/ruby/stones/:id","line":447,"type":"route"},{"name":"POST /api/ruby/stones/:id/move","line":455,"type":"route"},{"name":"if","line":464,"type":"method"},{"name":"if","line":473,"type":"method"},{"name":"POST /api/ruby/stones/:id/delete","line":491,"type":"route"},{"name":"if","line":498,"type":"method"},{"name":"copybufFile","line":511,"type":"function"},{"name":"POST /api/ruby/copybuf/:id","line":512,"type":"route"},{"name":"GET /api/ruby/copybuf/:id","line":520,"type":"route"},{"name":"POST /api/ruby/markers/:id","line":529,"type":"route"},{"name":"GET /api/ruby/markers/:id","line":547,"type":"route"},{"name":"POST /api/ruby/provolta-talk","line":556,"type":"route"},{"name":"ip","line":558,"type":"arrow"},{"name":"if","line":560,"type":"method"},{"name":"GET /api/ruby/provolta-words","line":594,"type":"route"},{"name":"POST /api/ruby/code/:id","line":617,"type":"route"},{"name":"GET /api/ruby/code/:id","line":624,"type":"route"},{"name":"GET /api/ruby/presence/:id","line":631,"type":"route"},{"name":"GET /api/ruby/watch/:id","line":640,"type":"route"},{"name":"USE /solid/playtime","line":652,"type":"route"},{"name":"if","line":656,"type":"method"},{"name":"GET /portal/builder","line":669,"type":"route"},{"name":"speak","line":704,"type":"function"},{"name":"jump","line":705,"type":"function"},{"name":"POST /solid-playtime/telemetry","line":722,"type":"route"},{"name":"if","line":768,"type":"method"},{"name":"if","line":773,"type":"method"},{"name":"if","line":776,"type":"method"},{"name":"if","line":782,"type":"method"},{"name":"token","line":818,"type":"arrow"},{"name":"if","line":819,"type":"method"},{"name":"if","line":820,"type":"method"},{"name":"requireLogin","line":828,"type":"function"},{"name":"if","line":829,"type":"method"},{"name":"requireAdmin","line":837,"type":"function"},{"name":"if","line":839,"type":"method"},{"name":"requireAdminStealth","line":848,"type":"function"},{"name":"rateLimit","line":857,"type":"function"},{"name":"key","line":859,"type":"arrow"},{"name":"hits","line":861,"type":"arrow"},{"name":"if","line":862,"type":"method"},{"name":"for","line":874,"type":"method"},{"name":"abuseHit","line":888,"type":"function"},{"name":"v","line":890,"type":"arrow"},{"name":"abuseTagOnce","line":896,"type":"function"},{"name":"for","line":904,"type":"method"},{"name":"for","line":905,"type":"method"},{"name":"tagSecurityEvent","line":912,"type":"function"},{"name":"lockIp","line":922,"type":"function"},{"name":"abuseGuard","line":933,"type":"function"},{"name":"ip","line":936,"type":"arrow"},{"name":"if","line":941,"type":"method"},{"name":"if","line":946,"type":"method"},{"name":"if","line":951,"type":"method"},{"n