Sinatra não sabe disso, mesmo quando a rota padrão é implementada com estilo modular

Estou executando os independentes do MacOS comjruby e estou tentando escrever uma basemodular sinatra aplicativo. Aqui está o que meuconfig.ru parece

require 'app/app'   
run Sinatra::Application

Eu invoco assim comrackup, você pode ver o404 erros -

rackup -s puma -p 8080
Puma 2.10.2 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://localhost:8080
127.0.0.1 - - [17/Jan/2015:18:32:37 -0500] "GET / HTTP/1.1" 404 437 0.0290
127.0.0.1 - - [17/Jan/2015:18:32:37 -0500] "GET / HTTP/1.1" 404 437 0.0980
127.0.0.1 - - [17/Jan/2015:18:32:37 -0500] "GET /__sinatra__/404.png HTTP/1.1" 304 - 0.0120
127.0.0.1 - - [17/Jan/2015:18:32:37 -0500] "GET /__sinatra__/404.png HTTP/1.1" 304 - 0.0170

e é isso que meusource parece -

➜ less app/app.rb
require 'sinatra/base'

class App < Sinatra::Base

  get '/' do
    "Hello World"
  end
end

Se eu mudar a fonte para a maneira clássica

➜ cat app/app.rb
require 'sinatra'

#class App < Sinatra::Base

  get '/' do
    "Hello World"
  end
#end

e invocá-lo assim, funciona muito bem -

➜ ruby app/app.rb
Puma 2.10.2 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://localhost:4567
== Sinatra/1.4.5 has taken the stage on 4567 for development with backup from Puma
127.0.0.1 - - [17/Jan/2015:18:36:20 -0500] "GET / HTTP/1.1" 200 11 0.0250

Acho que estou perdendo alguma configuração muito óbvia, mas parece que consigo descobrir o que é isso, alguém pode me informar o que está faltando? Posso compartilhar mais detalhes sobre o ambiente, se necessário.

questionAnswers(1)

yourAnswerToTheQuestion