Skip to content

Investigate Ruby XTalk substrate request timeouts and container gem provisioning #432

Description

@hoebat

Summary

Ruby XTalk substrate support is partially working, but the page-proxy request/dispatch path still times out. Other agents should investigate this using REPL-driven development and incremental target tests.

Reproduction

Run with maintained Ruby and the external gems available:

PATH=/opt/homebrew/opt/ruby/bin:/opt/homebrew/lib/ruby/gems/4.0.0/bin:$PATH \
./lein seedgen test '[xt.lang.spec-promise]' :with '[ruby]'
PATH=/opt/homebrew/opt/ruby/bin:/opt/homebrew/lib/ruby/gems/4.0.0/bin:$PATH \
./lein seedgen test '[xt.substrate.base-util]' :with '[ruby]'
PATH=/opt/homebrew/opt/ruby/bin:/opt/homebrew/lib/ruby/gems/4.0.0/bin:$PATH \
./lein seedgen test '[xt.substrate.page-core]' :with '[ruby]'
PATH=/opt/homebrew/opt/ruby/bin:/opt/homebrew/lib/ruby/gems/4.0.0/bin:$PATH \
./lein seedgen test '[xt.substrate.page-proxy]' :with '[ruby]'

Observed results:

  • Promise layer: 11/11 passed.
  • Base-util and handlers: 33/33 passed.
  • Page-core: 37/37 passed.
  • Page-proxy: 29 passed; failures remain in:
    • xt.substrate.page-proxy/proxy-dispatch-op
    • xt.substrate.page-proxy/proxy-dispatcher
    • xt.substrate.page-proxy/model-proxy-call
    • xt.substrate.page-proxy/group-sync-proxy

The failures occur around deferred request creation, transport sending, pending-response settlement, and proxy dispatch. The direct promise suite does not currently cover a resolver called later, so add an isolated deferred-resolution probe first.

Investigation notes

  • Ruby 4.0.6 with concurrent-ruby 1.3.8 works for the promise seed.
  • pg 1.6.3 loads successfully with Homebrew Ruby and Homebrew libpq.
  • websocket-client-simple 0.9.0 loads after installation.
  • Apple system Ruby 2.6 cannot reliably build the pg native extension because its SDK/Ruby headers and architecture metadata are stale.
  • Ruby destructuring was checked in the REPL: transport-id lowers to "transport_id", and send-fn lowers to "send_fn"; that is not currently established as the failure.
  • Do not edit generated test-lang/xtbench/** output as the source fix.

Container provisioning requirement

The Ruby runtime/container must install and expose the external libraries required by the generated target code:

gem install concurrent-ruby
gem install pg
gem install websocket-client-simple

Use a maintained Ruby version (Ruby >= 2.7 for current pg; Ruby 3.x/4.x is preferable) and ensure the selected Ruby executable is the one used by Hara's :ruby basic runtime. The container should also have PostgreSQL client development/runtime libraries available for pg where a prebuilt gem is not used.

Definition of done

  • Ruby container setup installs the required gems and selects the intended Ruby executable.
  • A deferred promise-new resolution test passes.
  • The four page-proxy failures are either fixed or reduced to a clearly documented external dependency/transport limitation.
  • Validate source and generated target tests with the project’s ./lein seedgen test ... :with ... workflow.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions