# Work Notes ## 2026-05-21 - Initial repository documents were generic templates for a web project. They were replaced with FEM surrogate tutorial-specific instructions before implementation work. - The previous design-guide document was removed from the active scope because the project is notebook based. - BeamExamples fixture files use a simple comma/space text format rather than JSON/CSV. Future parser work should handle comments, trailing commas, and labels such as `Poisson'sRatio`. - For the v1 in-plane Euler-Bernoulli frame solver, use `Area`, `ElasticModulus`, and `Izz` from `BeamExamples/CantileverBeam.txt`; preserve `J`, `Iyy`, and `Poisson'sRatio` as metadata but do not use them in the in-plane solve. - Avoid writing removed/stale file names into handoff notes when the project uses simple `rg` checks for stale terms; describe the lesson without preserving obsolete filenames unless the exact name matters. - `scripts/execute.py` expects `git rev-parse --abbrev-ref HEAD` to succeed. On an unborn repository with no initial commit, it returns `HEAD` plus a fatal stderr and nonzero exit code, so create an initial commit before running Harness execution. - `ruff check .` should exclude existing local agent/harness infrastructure (`.agents`, `.codex`, `scripts/execute.py`) so linting focuses on tutorial package code and future project scripts. - Use `Izz` as the code parameter name for the in-plane bending inertia instead of bare `I`; ruff flags `I` as an ambiguous variable name and the fixture also uses `Izz`. - The BeamExamples displacement fixture reports downward cantilever rotations as positive `Rz`, so this project treats `Rz` as clockwise-positive. A textbook counterclockwise-positive Euler-Bernoulli matrix reproduces `Uy` but flips every `Rz`; keep the element stiffness convention aligned instead of flipping only solver output. - `jupyter nbconvert --execute notebooks/*.ipynb` can run cells with `Path.cwd()` equal to `notebooks/` on Windows. Notebook code should discover the repository root by walking/checking for `pyproject.toml`, not by assuming the shell working directory. - `ruff check .` lints notebook code cells too. Generated notebooks must keep imports sorted and line lengths under the configured limit. - nbconvert writes `*.nbconvert.ipynb` output files by default; keep them ignored because they are verification artifacts, not source notebooks. - On Windows, nbconvert may emit a zmq Proactor event loop warning, and comparison execution once printed a libzmq connection-reset assertion after finishing with exit code 0. Treat this as an environment warning only when the command exit code is 0 and expected output files exist.