%% SCRAP: architecture/getting-started/DEVELOPER %% SOURCE: docs/working/architecture/getting-started/DEVELOPER.md %% STATUS: CURRENT %% FITS: dev-guide/ch-install %% EDITORIAL: lifted — prose rewritten to press voice \section{Developer Environment} This chapter sets up a working StarForth development environment, including the Isabelle/HOL toolchain required to regenerate the formal-verification documentation. \subsection{Required Tools} The core build needs only a C toolchain and Git: \begin{lstlisting}[language=bash] sudo apt-get update sudo apt-get install build-essential gcc make git \end{lstlisting} Several optional tools support documentation, supply-chain, and packaging workflows: Doxygen for API documentation, \texttt{syft} for SBOM generation, and \texttt{fpm} for building DEB and RPM packages. \begin{lstlisting}[language=bash] sudo apt-get install doxygen wget https://github.com/anchore/syft/releases/latest/download/syft_linux_amd64.tar.gz tar -xzf syft_linux_amd64.tar.gz sudo mv syft /usr/local/bin/ sudo apt-get install ruby-dev build-essential sudo gem install fpm \end{lstlisting} \subsection{Isabelle/HOL} Isabelle is required to generate the formal-verification documentation. Download Isabelle2025, unpack it, and place its \texttt{bin} directory on the \texttt{PATH}: \begin{lstlisting}[language=bash] cd ~/bin wget https://isabelle.in.tum.de/dist/Isabelle2025_linux.tar.gz tar -xzf Isabelle2025_linux.tar.gz \end{lstlisting} Add the binaries to \texttt{\textasciitilde/.bashrc}, reload the shell, and verify: \begin{lstlisting}[language=bash] export PATH="$PATH:$HOME/bin/Isabelle2025/bin" source ~/.bashrc isabelle version # expects: Isabelle2025 \end{lstlisting} The build system locates Isabelle on the \texttt{PATH} via a single Makefile variable, \texttt{ISABELLE ?= isabelle}. Isabelle is deliberately excluded from the repository through \texttt{.gitignore} (\texttt{/tools/Isabelle2025/}) and must never be committed. With it installed, three targets become available: \texttt{make isabelle-build} verifies all theories, \texttt{make isabelle-check} runs a faster syntax-only pass, and \texttt{make docs-isabelle} produces the audit-ready documentation. \subsection{Continuous Integration} CI pipelines must install Isabelle as a build step. A GitHub Actions job installs the C toolchain, fetches and unpacks Isabelle, appends its \texttt{bin} directory to \texttt{\$GITHUB\_PATH}, builds with \texttt{make fastest}, runs \texttt{make test}, and generates the verification docs with \texttt{make docs-isabelle} before uploading them as artifacts. The GitLab equivalent performs the same steps in a \texttt{before\_script} stage. \subsubsection{Docker and Performance} In Docker, Isabelle additionally requires a JDK (17 or later): \begin{lstlisting}[language=bash] FROM ubuntu:22.04 RUN apt-get update && apt-get install -y \ build-essential gcc make wget openjdk-17-jdk \ && rm -rf /var/lib/apt/lists/* RUN wget -q https://isabelle.in.tum.de/dist/Isabelle2025_linux.tar.gz && \ tar -xzf Isabelle2025_linux.tar.gz && rm Isabelle2025_linux.tar.gz ENV PATH="/Isabelle2025/bin:${PATH}" RUN isabelle version \end{lstlisting} Full theory verification takes five to ten minutes. Cache the Isabelle installation between builds, use \texttt{isabelle-check} for fast pre-commit syntax checks, and reserve the full \texttt{isabelle-build} for the main branch and release tags. \subsection{Quick Start} \begin{lstlisting}[language=bash] git clone cd StarForth make fastest make test make docs-isabelle ls -la docs/src/isabelle/ \end{lstlisting} \subsection{Formal Verification} StarForth carries machine-checked correctness proofs in Isabelle/HOL. The theory files live under \texttt{docs/src/internal/formal/*.thy}, organized into the \texttt{VM\_Formal} and \texttt{Physics\_Formal} sessions, and \texttt{make docs-isabelle} renders them into \texttt{docs/src/isabelle/}. The session covers core VM semantics (\texttt{VM\_Core.thy}), stack operations and runtime (\texttt{VM\_Stacks.thy}, \texttt{VM\_StackRuntime.thy}), word and register definitions (\texttt{VM\_Words.thy}, \texttt{VM\_DataStack\_Words.thy}, \texttt{VM\_ReturnStack\_Words.thy}, \texttt{VM\_Register.thy}), and the physics state machine and observation model (\texttt{Physics\_StateMachine.thy}, \texttt{Physics\_Observation.thy}). All theories are fully verified. %% TODO(bob): the repository .thy filenames here (VM_Core.thy etc.) differ from the proof/ tree named in CLAUDE.md (StarForth_*.thy). Reconcile the canonical theory-file naming before this ships. \subsection{Contributing} When a change affects VM semantics: update the relevant Isabelle theories, run \texttt{make isabelle-build} to verify the proofs, regenerate documentation with \texttt{make docs-isabelle}, and include the regenerated docs in the pull request.