Commit Graph

6 Commits

Author SHA1 Message Date
vumas3r
db2575b15e Dark mode for the browser UI: Auto, Light or Dark
Every colour of the page is now a token with a light and a dark value.
Auto, the default, follows the system's light or dark setting; Light
and Dark override it. The switch is in the landing page's top bar, in
the Exam Interface menu and on the results page, and the browser keeps
the choice - applied before the page draws, so the other theme never
flashes. Native controls and scrollbars follow the theme; the remote
desktop keeps its own look.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JZPd3GGWyxTgAkL6a4gAJz
2026-10-15 16:46:47 -06:00
vumas3r
bab85d14b7 Browser UI in the style of CK-X: landing page, exam screen, results
Rebuilt web/index.html after the layout of CK-X (itself modelled on the
Linux Foundation exam UI), written from scratch and loading nothing from
the network:

- landing page: track switch in the top bar, a Start exam dialog to pick
  the session (path, objective, domain, next domain, whole bank, picked
  tasks, simulator sets, full exam with its gate, hard mode), the path,
  a card per domain, every objective with its notes and skip links, and
  an overlay with the clusters' progress while a session is prepared
- exam screen: dark top bar with the clock and the Exam Interface /
  Exam Controls / Exam Information menus, a light question panel with
  < Question N >, "Solve this question on instance", Flag for review,
  Satisfied with answer, and Check this task in drills; the remote
  desktop with reconnect and fullscreen beside it
- results page: points, pass or fail, domains, every task's checks and
  reference solution, answers, drill what I missed, review on the hosts

A session started in the browser opens a dialog whose Start puts the
full time on the clock. New POST /api/terminate backs Terminate session
(an open session ends ungraded, as ./ksim abort) and Delete the hosts
(a finished session loses its hosts); both delete that session's hosts
only. The session payload says whether a session was aborted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JZPd3GGWyxTgAkL6a4gAJz
2026-10-15 16:36:26 -06:00
vumas3r
c244bd9c75 Restart the clock: ./ksim restart and a top-bar button
Puts the session's full time back on the clock and starts it running,
keeping the hosts, the work on them, results, flags and notes. Like
pause it is recorded nowhere: the attempt's time used counts from the
restart. Refused once a session has been submitted. POST /api/restart
backs the button, which asks before it resets; a ./ksim web started
before this says so instead of failing silently.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JZPd3GGWyxTgAkL6a4gAJz
2026-10-15 15:36:09 -06:00
vumas3r
c266eeb4b5 Every session against the clock; skip what you know
Study mode is gone: no more untimed sessions with the reference
solutions open from the start. The path is now objective drills against
the clock, then a mock, then the fixed sets, and an objective is done
when every task passed on its latest timed attempt. In the lobby "Study
mode" becomes "Drill an objective" (the objective list, with one
"Against the clock" button per objective); ./ksim study is removed and
./ksim next always drills. study-<track>.json keeps focus, known and the
done stamps; results of old study sessions stay in it, read by nothing.

Also in this commit, from the work before it:
- ./ksim skip / unskip, and links beside each domain in the lobby: mark
  a domain or an objective as known, so the path, the no-argument drill
  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
- a command with neither --track nor KSIM_TRACK is for the track whose
  session is under way; ./ksim show says where the task's host resolves
- CKAD Q60: the check names which file holds which run's output

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JZPd3GGWyxTgAkL6a4gAJz
2026-10-15 15:01:29 -06:00
vumas3r
f3d0e536b6 Exam simulator for CKA, CKAD and CKS with per-task hosts and a remote desktop
kubestronaut-sim runs each exam task on a host of its own - a kind (kubeadm)
cluster in rootless podman, or a QEMU/KVM Ubuntu VM for the CKS tasks that
need their own kernel (Falco, AppArmor) - and puts a browser desktop in front
of them, the way killer.sh and sailor.sh do.

- ksim, sim/: the engine (sessions, drills, study mode, grading, coverage,
  audit), host and VM lifecycle, the desktop
- images/: exam host images (common, CKS variant with its tools, VM guest)
- cka/ (131 tasks), ckad/ (105), cks/ (110): task banks, curricula with
  study notes, reference solutions and scripted solutions

Every domain of every track has at least 17 pool tasks. `./ksim audit` proves
a task three ways: it seeds cleanly on its own host, scores nothing before
anyone has worked on it, and reaches full marks when its scripted solution is
run on the host as `candidate`. All 346 tasks pass (CKA audited 2026-10-13,
CKAD and CKS 2026-10-12).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JZPd3GGWyxTgAkL6a4gAJz
2026-10-13 16:29:33 -06:00
3d7605c111 Initial commit 2026-10-13 22:29:03 +00:00