Repository navigation
Conversation
… page Replaces the mock Play Online terminal with a live lab panel backed by pathfinding-backend: launch, readiness countdown, masked connection details, Cybr's web terminal (vendored @cybr/labs-sdk 0.1.1 browser client), flag submission and ending the lab. pf-account.js adds optional GitHub/Google sign-in, username selection, progress sync, account deletion and milestone sharing, showing only the sign-in providers the backend has enabled. New leaderboard, profile and privacy pages. Play Online stays off in production until the backend is live; it is enabled automatically on localhost.
…ask RUM replay Every page now loads pf-account.js and account.css, links to the leaderboard in the header and mobile menu, and links to the privacy page in the footer. Datadog RUM switches to mask-user-input so session replay never records typed input (the live lab panel also hides credentials and terminal output entirely), and propagates trace headers to api.pathfinding.cloud so browser sessions link to backend traces. Lab stub pages are regenerated from the updated labs index template.
Sets supportsOnlineMode for the labs Cybr hosts, matching DataDog/pathfinding-labs#108. The deploy workflow regenerates these files from pathfinding-labs main, so that PR must merge before this branch deploys.
…nd highlight online play Header: a Labs Leaderboard link and a purple account pill now sit at the far right of every page, after the Datadog, theme and GitHub links, and show even when the backend is unreachable. The dropdown is reduced to My profile and Sign out; Change username and Delete account move to the profile page. Profiles are private: /profile/ shows only the signed-in user's own profile from /me, with the full milestone ladder (earned milestones shareable through owner-issued links, locked ones with progress) and an Account section. Leaderboard usernames no longer link to profiles. The leaderboard, profile and privacy pages drop the labs search bar, and optional sections no longer render as "null". Online play: the home page Labs card, the catalog's getting-started banner and the getting-started guide explain playing online for free versus self-hosting, and the 47 online labs carry a "Play online" badge in the catalog. The guide no longer scrolls sideways on phones. Lab stub pages are regenerated.
…disable, panel navigation fix Live lab terminal panel: - Replace stacked controls/details rows with a single compact header row - Idle banner with inline `start` and `values` commands; typing either in the terminal is intercepted before reaching the PTY (`\x03` sent after `values` to cancel the buffered input so it never executes on the next Enter) - Braille spinner during provisioning; hold output until a real shell prompt is visible (non-whitespace, non-ANSI content), with a 10s fallback reveal - Dark xterm scrollbar; reduced terminal-open min-height Online-first game mode defaults: - Default to Game Mode for online labs on desktop; persist mode choice to localStorage so switching to Single Page mode sticks across reloads - Add `isOnlineLabBySchema` helper for init-time state defaults before `pfAccount` loads, fixing the lab defaulting to the self-hosted deploy panel Helicopter disable for online labs: - Gate movement (arrow keys, gamepad), draw, HUD hover detection, and collision detection on `state.heliEnabled` (false for online labs) - `advanceGameState` overview→navigation transition and canvas click handlers still work for all labs so Next/Previous and clicking map elements update the side panel correctly regardless of helicopter mode Bump cybr-labs-sdk from 0.1.1 to 0.1.2 (debounced PTY resize). Regenerate 129 per-lab HTML stubs to pick up asset version bumps.
…s no browser terminal Typing start (or pressing Start lab) while a lab was already running sent a launch that the backend answered with resumed: true. The panel showed a launch spinner, its terminal connect returned early because a connection already existed, and nothing stopped the spinner. start now recognises a running lab and connects the terminal if needed, and a resumed launch stops its own spinner. A lab whose browser terminal is disabled at Cybr (currently sts-001) reached "ready" with nothing to connect and looked hung. The panel now stops the spinner and says the terminal isn't available for that lab; the fix for the lab itself is enabling its terminal at Cybr. Guest session creation is single-flight in pf-account.js, so opening the panel can no longer mint two guest sessions at once.
Which labs can be played online now comes from pathfinding-backend's GET /labs/online, derived from Cybr's catalog (labs with a browser terminal), instead of a supports_online_mode flag in pathfinding-labs READMEs. The catalog, lab detail and game loaders set each lab's supportsOnlineMode from it, so Play Online, the Play online badges, the Online Play filter (including shared ?online= links) and the getting-started guide's starter-lab badges all follow Cybr. While online play is switched off, no lab is shown as online. generate-labs-json.py no longer emits supportsOnlineMode, and the field is removed from the committed lab data.
supportsOnlineMode and onlineEndpoint are gone from labs.json; the site gets online availability from pathfinding-backend's GET /labs/online at runtime.
…aft privacy page The live terminal now reports each command line to pathfinding-backend (POST /labs/:slug/terminal-commands) for learner analytics, reading it from xterm's buffer as the shell echoed it so Tab completion and history recall are captured as run. Output is never sent. Batches flush every 5 seconds or 10 commands, on disconnect and page hide, and before ending a lab. The privacy page moves from docs/privacy/ to drafts/privacy/, outside what GitHub Pages deploys, until it is reviewed or replaced by Datadog's generic policy. Its footer, sign-in modal and getting-started links are removed, and drafts/README.md lists what to restore to publish it. map-game.js and pf-account.js cache versions are bumped and the lab stubs regenerated.
Introduce per-lab points parsed from the pathfinding-labs READMEs: a sortable Points column in the table, a badge on cards, and a leaderboard now ranked and displayed by total points rather than lab count (with points shown on the profile too). Add an Online Labs entry to the sidebar and menus linking to the online-only filter, and make the online filter a pressed toggle button. Default the catalog to the table view, replace the AWS Cost column with an Online yes/no column, and rename the remaining cost pills to 'Est. Self Hosted AWS Cost'. Rebrand the sign-in modal and leaderboard with the product logos and give both a more finished look, and open online-playable labs in game mode by default.
…e current account script and style versions
sethsec
requested review from
andrewkrug,
christophetd and
raesene
as code owners
October 16, 2026 19:28
…he draft privacy page
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brings browser-playable labs, hosted by Cybr, to pathfinding.cloud, backed by
api.pathfinding.cloud(pathfinding-backend). Play Online stays off for everyone (PLAY_ONLINE_GLOBALLY_ENABLED = false); launch is a separate one-line PR.What's in it
GET /labs/online), notlabs.json.?play_online=1on any labs page turns Play Online on in that browser only (remembered in localStorage);?play_online=0turns it off. This is for testing the real site before launch. Nothing links to it.Merge order
labs.jsonis generated from it.api.pathfinding.cloudis live.After merging:
?play_online=1: sign-in, username, a live lab with terminal commands and a flag, the leaderboard and profile, a share card.PLAY_ONLINE_GLOBALLY_ENABLED = truein a small follow-up PR.Testing
node --checkon every changed script;labs.jsonparses.make local(local backend) andmake local-dev(the deployed dev API), including terminal commands arriving in Datadog.🤖 Generated with Claude Code