[Sim Theme D] Build-time simulator selection#25
Conversation
ad8df59 to
8031f8f
Compare
…ction + docs (FR-D1..D4)
…s) built via npm proxy, served by gzweb-client service
…re simulator/vnc)
…ice boots The Theme A registry module services/control/simulators.js is imported by server.js but was never COPYed into the image, so the container crash-looped with ERR_MODULE_NOT_FOUND and stayed unhealthy, blocking every dependent service.
…Simulator panel Autostarted simulators showed only a Stop button, so a running sim could never be opened as a panel; add an explicit Open action. noVNC defaulted its WebSocket to ws://host/websockify at the origin root (routed to the frontend, handshake failed) — pin the path to the simulator's proxied websockify endpoint. Remove the built-in gzweb 'Simulator' panel (and its layout preset) since simulators are now launched/opened on demand from the Simulators menu.
…imulator framework Add S4a (gazebo gzweb), S4b (turtlesim noVNC, pinned ws path), and S10 (simulator menu + lifecycle); retire the old S4 novnc-frame spec. Update S5/S5b/S7 and helpers for the removed built-in Simulator panel and the 9-service topology; refresh docs and smoke checks. Ignore .playwright-mcp/ artifacts.
Bundling ros-\-turtlesim lets operators drive and inspect the Turtlesim node from the ROS terminal (e.g. ros2 run turtlesim turtle_teleop_key) now that Turtlesim joins the shared ROS graph via the discovery server.
…pi see the full graph
Under the Fast DDS discovery server a plain CLIENT only receives discovery data for endpoints it matches, so rosapi's services never propagated to rosbridge ('/rosapi/topics does not exist') and the ROS Status panel node query failed (S3). The ros container hosts the introspection surface (rosbridge, rosapi, ros2 CLI daemon), which must observe the entire graph; SUPER_CLIENT receives the full graph the server relays. Other containers stay lightweight CLIENTs.
🤖 Automated PR reviewBuild-time selection — per-sim compose profiles ( Findings
✅ This PR fixes the control image (
Recommendation: Approve after adding a lockfile + |
jmservera
left a comment
There was a problem hiding this comment.
🤖 Automated line-anchored review — see the summary comment for the full findings table.
| ARG NPM_REGISTRY=https://registry.npmjs.org/ | ||
| WORKDIR /app | ||
| COPY package.json package-lock.json* ./ | ||
| RUN npm config set registry "$NPM_REGISTRY" && npm install |
There was a problem hiding this comment.
🟡 Medium — non-reproducible build. npm install with no committed package-lock.json (the lockfile COPY above is an optional glob) resolves fresh transitive versions on every build and drifts from the frontend image's npm ci convention. Commit services/gazebo/client/package-lock.json and switch this to npm ci. Nice work otherwise: this PR also fixes the control image (COPY simulators.js) and correctly repoints the proxy /gzweb/ to the always-on gzweb-client upstream.
…heme-d-build-selection
…heme-d-build-selection
Implements Theme D of the Simulation & Visualization PRD (FR-D1..D4). Lane 4 (integrate last) — depends on Theme A (registry) and the C/F simulator services existing. Compose profiles + build args select the installed set; default Gazebo + Turtlesim. Plan: docs/plans/sim-theme-d-build-selection.md. Draft.