Skip to content
Jesse Rusak edited this page Mar 7, 2020 · 20 revisions
  • Push changes of attrs down to open editors
  • Tabbed editors (maybe browser tabs?)
  • CI/CD
  • Stop infinite loops
  • Subset of markdown for user text
  • Make panicking take down server instead of mysteriously hanging
  • Write down object ids in json file instead of relying on indexes
  • Logins
  • Entryway (& users?) need a “created” message.
  • Furniture, surfaces, chairs, looking while inside something
  • Messages should be captured in code with args and types, checked by main.lua when message is dispatched
  • Think about FRP, data down, actions up, reducers, etc in the context of this world. How do we make doors work this way (check things, move, announce)?
  • Allow more complex logic about e.g. who can move what via queries to appropriate objects from rust. Same for user tells + html tells, etc. No more bouncing messages. (Capabilities fit into this nicely later as something those queries can check.)
    • Plus raising & capturing & reporting these errors more easily than having to “tell” everywhere.
  • Remove uses of orisa.original_user to mean “acting user” in commands/utils since sometimes original messages will end up triggering commands in other users. (Maybe connected to the capturing of errors above with some kind of “current command” or more general “thread local” storage and exceptions or replies.)
  • On success and on failure messages? Basically ugly futures?
  • Immediate feedback/errors when you save invalid live code
  • Allow clicking on objects to either inspect them or put their name + number into the text field. Make parser handle that format for commands. Also click on options when disambiguating.
    • support x-message://?name=whatever&payload=json links which sends user a message with that payload. Or have it be a single message like c-click? Or x-say://?text=whatever. Think about who ensures these are safe.
    • Make help links and make links to GitHub link to /edit system.whatever instead.
    • Then make clickable links for objects/rooms that run or show verbs
    • Ideally make a full mobile-friendly chat-focused plus tapping UI work
  • Other github repos+pulling (user.foo means their repo, user/live.foo means local modules, can allow user/other.foo later for branches or whatever. Maybe move live code to a repo, too?
  • Allow computed (+cached?) attrs via query?
  • log messages for send()/query()
  • Prevent infinite Lua loops and rollback
  • Tests (using faux?). Lua testing story (like inform?)
  • Bottle worlds for experimentation or adventures?
  • Special UI message to revert your type to system/user or clear our that space.
  • add special support for one-time creation message in Lua
  • Faster builds with GitHub - denzp/cargo-wharf: Cacheable and efficient Docker images builder for Rust already works. We just need to get docker-compose support working https://github.com/docker/compose/pull/6865
  • Maybe allow (pre-)computed side-effectless attrs or even queries? If they read state, attrs, etc but can’t write anything maybe this would be ok? Could make a special message named “query” which gets a reply but forbids any state changes. (Or other side effects? Other than messages?)
  • capability model, isolated spaces
    • allow super calls which cross spaces, not just via code
  • Re-evaluate concurrency (Arbiter per space/kind? Throw it all out and single-thread? SyncArbiter is not gonna work.)
  • Multithreading with read lock during lua eval or transaction otherwise. (Ideally something like rocksdb?)
    • We can’t do callbacks or asynchronous/await or something?
    • Do we really need actors + interior mutability + thread locals?
    • Remove thread locals via sharing a single ExecutionStateReference with interior RcCell
    • Make first-class Space/Zone/whatever object which will be per-kind right now with object executors & lua host & Arbiter.
      • Can then remove object executor cache because these will be single-threaded and single-type. Can split at space level more finely later if desired.
      • Though this removes the ability to do a super calls cross-space since state is isolated. Maybe ok for now and can fix later.
  • moonscript?
  • allow objects (including users) to be "placed" in a room such that there is a small description attached to their presence, like a persistent emote
  • "mail"; some way to drop a message to someone that they'll get later, without just tracking them down and shouting at them while asleep?
  • /chown to transfer ownership of objects
  • open help window in its own pane, similar to editing (should still be able to have help + edit panes open at the same time though).
  • changing object kinds
  • non-scroll-away HTML panes for a room for e.g. health bars or other HUD, maps, player portraits, background music
  • timestamps in messages
  • better verb parsing
    • multi-word verbs
    • ignore "the", "a" etc
  • extend client protocol to allow bots and generally offloading of compute (e.g. for kinds or rooms) to external boxes. probably after real snapshot & MVCC support.
  • fix races/dropped-message issues
    • timers can fire even after they're cancelled if you cancel while the timer-firing message is queued
    • you can lose message that are queued when the server is taken down (including timer-firing messages, which are specially bad if the user is trying to loop every N seconds forever).
  • presence: how recently the user was active and/or connected, shown in examine or room description
  • make it easier to write custom commands for your own user
Clone this wiki locally