Skip to content

0.5.7

Latest

Choose a tag to compare

@github-actions github-actions released this 29 Oct 23:27
· 2 commits to main since this release
bcbfab3

Concurrent agents on one server stop stepping on each other. Several agents sharing
an MCP server (Claude Code subagents share their parent session's) could only
separate their work with use_workspace, whose selection is server-wide, so one
agent's switch quietly retargeted every other agent's calls. Each call can now name
its own workspace. Two FEM changes ride along: a default mesh-size floor that stops
sliver edges in imported CAD from exploding a mesh, and a ccx working directory per
worker so concurrent workspaces no longer share one.

Windows gets the Linux-only solvers. OpenFOAM, FSI, molding, YADE, openEMS and Bempp
now run from the prebuilt solver image through Docker inside WSL, set up with one
command, where they previously needed hours of source builds. A saved .FCStd can
also carry the record of the session that built it.

Added

  • Every tool takes an optional workspace argument. It pins that one call to the
    named workspace (created on first use) without changing the server's current
    selection, and the session journal records the workspace the call actually ran in.
    On a shared server each concurrent agent should pass workspace=<name> on every
    call; use_workspace remains for a single agent and is server-wide. See
    docs/MULTI_AGENT.md §7 (#483).
  • fem_mesh takes min_length (mm), the smallest element size Gmsh may use, and
    returns the value it applied (#483).
  • Linux-only solver families run on Windows from the prebuilt image. Under the
    container substrate every engine call is relayed through wsl -d <distro> -e docker, with %TEMP% and host paths translated into the container.
    ankusdrive container setup [--install-engine] installs the engine, pulls the
    image, starts the container and writes the substrate to config.toml, and doctor
    offers it for Linux-only families on Windows. See docs/WINDOWS.md (#470).
  • save_document takes attach_provenance (default False). The saved .FCStd
    then carries the journal_export record for the calls that built that document:
    replay script, environment and solver identities, and a SHA-256 for each result.
    Read it back with ankusdrive journal export file.FCStd. A save without the flag
    drops an earlier record. ANKUSDRIVE_JOURNAL_REDACT applies as it does to the
    journal (#462, #474).

Changed

  • fem_mesh now floors the element size at char_length/10 by default. A call
    that passes char_length gets CharacteristicLengthMin = char_length/10 where it
    previously got FreeCAD's floor of 0, so a mesh of the same body can come out with
    fewer, larger elements around small features. Pass min_length=0 for the old
    behavior. A min_length larger than char_length is rejected
    (#483).
  • fem_run's default workdir is <TMPDIR>/ankusdrive_fem_<pid>, keyed by the
    worker's process id, instead of a single shared <TMPDIR>/ankusdrive_fem, so
    concurrent workspaces cannot write decks and results into the same directory. A
    workdir you pass is used as before. A worker removes its own default workdir
    when it exits, and its first default solve sweeps those left by killed workers
    (dead pid and untouched for an hour); ANKUSDRIVE_KEEP_SCRATCH=1 keeps them
    (#483,
    #487).
  • list_workspaces and close_workspace report the pinned workspace. current
    is the workspace the call ran in (its workspace pin, else the server-wide
    selection), and a new selected field gives the server-wide selection. Closing a
    pinned workspace leaves the server-wide selection alone
    (#487).
  • dem_pack_submit's in_band gates the bulk packing fraction. It compared the
    whole-bed fraction, deflated by the loose wall and free-surface layers, against the
    0.60–0.66 random-close-packing band, so the default run reported in_band: false
    at a bulk fraction of 0.602. The bulk fraction is gated when the runner can define
    an interior cell, and the result reports gated_on and gated_fraction
    (#471, #472).
  • The default toolsets' longest docstrings are shorter: the default bundle's
    tools/list is about 124,000 characters, down from 139,099 against a 140,000
    budget. No argument's meaning changed (#459, #473).
  • The examples live in one examples/ tree (design/, optics/, simulation/);
    example/ is gone (#478, #479).

Fixed

  • DEM works on Windows with YADE installed inside WSL. An in-distro YADE was
    discovered and then launched as a native Windows process, so dem reported absent
    whatever was installed. It now launches through wsl -d <distro> -e, and a
    symlinked binary in the distro is no longer declared missing
    (#463, #467).
  • A wheel install (pipx, uv tool, venv) no longer breaks FreeCAD's Qt. The host
    venv's PySide6 and numpy shadowed FreeCAD's own ("DLL load failed while importing
    QtCore"); FreeCAD's bundled packages now win. doctor warns when the venv's Python
    differs from FreeCAD's (#468, #469).
  • The session journal records tool calls rejected at argument validation, and
    unknown tool names, as rejected: true. Before, those calls were missing from both
    session_transcript and the durable journal. The durable journal's FreeCAD
    identity now includes the build hash (#457, #458,
    #475).
  • Under container, a stale FSI override (ANKUSDRIVE_CCX_PRECICE, the FSI bashrc)
    is reported by name with the path the image publishes. Before, doctor called FSI
    ready and the override silently fell back to another variable
    (#460, #476).