# Changelog Notable changes to kubestronaut-sim, newest first. A version is the `VERSION` string in `ksim` (year.month.day.n); `./ksim help` and the top bar of the web page show the one you are running. Every entry names the commit it came in. ## 2026.10.15.3 — 2026-10-15 ### Added - **Browser UI in the style of [CK-X](https://github.com/sailor-sh/CK-X)** (`bab85d1`), itself modelled on the Linux Foundation exam UI. Written from scratch, with nothing loaded from the network. - **Landing page.** The track switch sits in the top bar. **Start exam** opens a dialog to pick the session: the next step on the path, an objective, a domain, the next domain, the whole bank, tasks of your choice, a simulator set or a full exam, with or without hard mode. The full exam warns while a domain has not been drilled yet. Below the dialog button come the path, a card per domain, and every objective with its notes and skip links. While a session is prepared, an overlay shows the clusters' progress and log; it comes back if the page is reloaded meanwhile. - **Exam screen.** A dark top bar holds the clock and three menus: *Exam Interface* (fullscreen, panel sizes, reconnect the desktop), *Exam Controls* (submit, pause, restart the clock, terminate the session) and *Exam Information* (exam instructions, Kubernetes docs, history). The light question panel has `< Question N of M >`, with flags and grades marked. Each task is headed *Solve this question on instance: `ssh host`*, and ends with **Flag for review**, **Satisfied with answer →** and, in drills, **Check this task**. The remote desktop sits beside it, with reconnect and fullscreen buttons and a divider you can drag. - **Results page.** Points, pass or fail, bars per domain, every task's checks and reference solution, *View answers*, *Drill what I missed*, *Review tasks* and *History*. - A session started in the browser opens a "Ready to begin" dialog, and its **Start** puts the full time on the clock. - **Terminate session** and **Delete the hosts** (`bab85d1`), backed by `POST /api/terminate`. An open session ends ungraded and nothing is recorded, as with `./ksim abort`; a finished session only loses its hosts. Either way, only that session's hosts are deleted. The session payload now says whether a session was aborted. - **Dark mode** (`db2575b`): ◐ Auto (your system's setting, the default), ☀ Light or ☾ Dark. The switch is in the landing page's top bar, the *Exam Interface* menu and on the results page. The browser keeps the choice and applies it before the page draws. This came without a version bump. ### Changed - The landing page, exam screen and results page replace the lobby overlay, the number rail with its task pane, and the old results overlay. The browser remembers hard mode and the width of the question panel. ## 2026.10.15.2 — 2026-10-15 ### Added - **`./ksim restart` and a Restart clock button** (`c244bd9`). The session's full time goes back on the clock and starts running; the hosts, the work on them, results, flags and notes stay. Like pause, it is recorded nowhere: the attempt's time used counts from the restart. A submitted session refuses it. The button is backed by `POST /api/restart`. ## 2026.10.15.1 — 2026-10-15 ### Removed - **Study mode** (`c266eeb`): there are no more untimed sessions with the reference solutions open from the start, and `./ksim study` is gone. Every session runs against the clock. ### Changed - The path is objective drills against the clock, then a mock, then the fixed simulator sets. An objective is done when every task passed on its latest timed attempt; the "studied" stage and its `~` mark are gone. `./ksim next` always drills, and the lobby's "Study mode" became "Drill an objective". - `study-.json` keeps your focus, the domains you marked known and when each objective was done. Results of old study sessions stay in it, read by nothing. ### Added Work from 2026-10-13, first committed here: - **`./ksim skip` / `unskip`**, and the lobby's "I know this — skip it" links. They mark a domain or an objective as known, so the path, the drill with no argument and `drill all` leave it out. A mock still draws from every domain. - **`DOMAIN:N`** picks N tasks of a domain spread over its objectives: `./ksim drill OBS:3`, or `./ksim next OBS:3` to add them to the next step. - A command with neither `--track` nor `KSIM_TRACK` is for the track whose session is under way. `./ksim show` says where a task's host resolves. ### Fixed - CKAD Q60: its check now says which file holds which run's output. ## 2026.10.12.1 — 2026-10-13 The first release (`f3d0e53`), grown out of `cka-sim`. - **One host per task.** Each task gets a kind (kubeadm) cluster in rootless podman, with real etcd, a static-pod control plane and a systemd kubelet. You reach it with `ssh ` from a remote desktop in the browser (XFCE, a terminal, Firefox limited to the documentation the exam allows). - **CKS hosts** carry kube-bench, trivy, kubesec, kube-linter, bom, cosign, istioctl, gVisor and Kubernetes from apt packages. The Falco and AppArmor tasks run on QEMU/KVM Ubuntu VMs. - **A pull-through image cache** (`ksim-registry`) keeps sessions under Docker Hub's pull limit. - **Task banks:** CKA 131, CKAD 105 and CKS 110 tasks, with at least 17 pool tasks in every domain. Each track comes with its curriculum, study notes, reference solutions and scripted solutions. - Drills, full mocks with hard mode, the fixed simulator sets (CKA C and D, CKAD A), a curriculum path with study mode, attempt history and weak spots. - `./ksim coverage` and `./ksim audit`. All 346 tasks pass the audit: each seeds cleanly, scores nothing untouched and reaches full marks with its scripted solution. The repository's initial commit (`3d7605c`) holds the licence and a stub README.