Long commit subjects and bullets are hard to read in narrow terminals and
mailed logs. Contributors using `.githooks` via core.hooksPath now get an
automatic guard in addition to the two-file pre-commit cap.
- Add `.githooks/commit-msg` to fail when any message line exceeds 80 chars
- Skip length checks while `.git/MERGE_HEAD` exists for merge commits
- Sync AGENTS.md, README.md, CONTRIBUTING.md, and commit.prompt.md
The in-tree `GmshReader` module is gone, so the dedicated IO test driver and
Tet4 fixture assertions are removed to keep the default suite aligned with
core dependencies.
- Delete `test/io/runtests.jl`, which only included `test_gmsh_reader.jl`
- Delete `test/io/test_gmsh_reader.jl`, which exercised `read_gmsh_mesh` and `get_surface_nodes` against bundled `.msh` data
The core package keeps the mesh and assembly stack type-stable without
shipping a Gmsh dependency or an always-loaded ASCII parser, and the IO
README now states where format readers should live going forward.
- Delete `src/io/gmsh_reader.jl` (`GmshReader`, `read_gmsh_mesh`, `GmshMesh`) including its Dict-heavy parsing path
- Rewrite `src/io/README.md` to describe policy-only `src/io/` (weakdeps/extensions or separate packages), point legacy `.inp`/`.med` readers at `src/legacy/io/` behind `JULIAFEM_ENABLE_LEGACY=1`, and warn against unconditional `include` growth for heavy I/O
Runtime `[deps]` no longer pull in mesh tooling or dev-formatting stacks,
while CSV is available for lightweight tabular I/O and Aqua can run as part
of the standard test target.
- `Project.toml`: drop `BenchmarkTools`, `Gmsh`, and `JuliaFormatter` from `[deps]`; add `CSV` with `[compat]` entries `CSV = "0.10"` and `Aqua = "0.8"`; remove `Gmsh`/`JuliaFormatter` compat pins while keeping `BenchmarkTools` for extras-only use
- `Project.toml`: trim `[extras]` to packages still referenced by tests (add `Aqua`, drop unused entries such as `Documenter`, `ForwardDiff`, `HDF5`, `LightXML`, duplicate stdlib listings) and extend `[targets].test` with `Aqua` while removing `Gmsh`
- `Manifest.toml`: refresh `project_hash` and JuliaFEM stanza so the resolved tree matches the slimmer direct deps, pruning the `gmsh_jll`/`JuliaFormatter`/`BenchmarkTools` transitive closure and recording the CSV dependency subgraph (e.g. `Tables`, `Parsers`, `TranscodingStreams`)
The agent entry point now matches current mesh I/O packaging, the expanded
partitioned matvec smoke set, and stricter guidance on reading staged diffs
before every commit.
- Table row for `src/io/` now points at policy README and weakdeps/extensions instead of implying a default Gmsh reader in core
- MPI reference list includes `partitioned_internal_force_smoke.jl` and states CI runs all three under mpiexec
- Zero-alloc invariant bullet cites `test_dof_based_internal_force.jl` for `assemble_internal_force!` / `apply_f_int_owned_rows!`
- New bullet forbids scripted placeholder commits and points to `reset --soft` / `rebase -i` for repair
- Testing section documents `Pkg.test(; test_args=[...])` topic filtering and warns that unknown args fall back to full suite
- Quickstart snippet uses `ContinuumFormulation{ThreeDimensional}()` instead of removed `FullThreeD` alias
Structured mesh helpers now cover 2D quads in the xy plane, a 1D Seg2 chain
embedded in R^3, and Cook’s membrane on a bilinear Quad4 map, so plane tests
and benchmarks can build reference geometry without ad hoc connectivity.
extract_surface gains an explicit volume-local face index and uses faces(T)
when the face vertex count matches the surface topology, which avoids picking
the wrong face by default for low-order hex meshes that list true face corners.
- structured.jl: SPDX header; add create_structured_line_mesh(Seg2; x0,x1,nx,y,z)
- structured.jl: add create_structured_box_mesh(Quad4; xmin,xmax,…,z) with :xmin/:xmax/:ymin/:ymax node sets
- structured.jl: add create_cook_membrane_mesh(Quad4, nx, ny; scale) with classical Cook corner map and same node-set convention
- mesh.jl: extract_surface(mesh, set; local_face=1) selects vol_faces[local_face]; build face_conn from face vertex indices when length matches n_face_nodes, else keep first-n legacy fallback for high-order volume/surface mismatch
- README.md: document Quad4/Seg2/Cook entry points; clarify mesh I/O is not in core load path (see src/io/README.md)
Use get_basis_functions on Quad4/Tri3/Seg2; reference Gauss tuples for face rules; depwarn symmetric apply_load! overloads that carry an unused kernel argument.
Introduce _depwarn_redundant_kernel_arg! and a session Ref so legacy overloads that ignore a volume kernel emit a single Base.depwarn toward kernel-column-only APIs.
Replace the retired per-shape modules with the single `test_quadrature_rules.jl`
entry point that mirrors the current quadrature implementation layout.
- SPDX header; trim imports to `Test`, `JuliaFEM`, and `Tensors`.
Legacy physics API tests were retired with the module reset; keep only the strain
smoke file until higher-level physics coverage returns.
- Import `JuliaFEM` explicitly for includes under `Pkg.test`.
Drive refinement through `create_structured_box_mesh` so tests stay aligned with
the dimensioned `Mesh{8,Hex8}` constructors, and keep a cheap analytic volume
sanity check for `compute_element_volume`.
- SPDX header; replace bespoke manual meshes with structured coupons + bisection counts.
Register the recently introduced damage/creep/eigenstrain/Chaboche markers so the
generated registry cannot drift from their storage types and default symbols.
- SPDX header refresh.
Add a focused regression that `compute_stress` lands on the von Mises surface when
the trial state lies outside yield, using the returned backstress state.
- SPDX header refresh for the file.
The refactor exposes in-place `get_*_vector(workspace, buf)` overloads; exercise them
beside the allocating helpers and keep allocation probes on pre-filled buffers.
- Assert buffer aliases and equality against freshly extracted vectors.
- Replace generic `get_field` probes with direct NamedTuple field access.
The previous file duplicated a long narrative and many scenarios that better live
in basis/quadrature coverage; keep the Jacobian helpers exercised with tuple vs
vector coordinates and physical derivative consistency.
- SPDX header; drop unused `LinearAlgebra` import.
- Fix basis calls to `Triangle{3}` / `Lagrange{1}` and verify scaling + PoU gradient sum.
Replace the hand-built toy elements with a single coupon produced by
`create_elements!`, matching how assembly pulls DOFs from handlers.
- SPDX header + one regression comparing flat vs structured extraction for T+u on Hex8.
The stiffness check already targets the shipped COO assembler; drop marketing-style
labels from comments and console banners so failures read like ordinary regressions.
Material-cache reset coverage should populate stresses through the global cache
API rather than the removed `create_material_state` helper.
- Mirror production signatures for `update_geometry_cache!` / `update_material_cache!`.
Manual quadrature comparisons must refresh material data with the same global
state container production assembly uses, and geometry updates no longer take the
kernel object.
- Construct `global_cache` beside the per-IP material workspace.
- Pass `global_cache` into `update_material_cache!` and drop the kernel argument
from `update_geometry_cache!`.
COO assembly now keeps persistent material history on the cache’s global store,
so tests should not fabricate a separate `state_old` argument.
- Call `assemble!(cache, assembler, kernel, mesh, u_global, Δt)` in correctness,
allocation, and two-element coverage paths.
- Clarify comments about zero displacement vs nonzero `u_global`.
The three-phase cache exerciser still referenced the retired per-call material
state bag and an older `update_geometry_cache!` arity. Fold everything onto the
shared global cache object and the slimmer geometry updater signature.
- Hoist `BenchmarkTools` to module scope for the `@benchmark` block.
- Drop the duplicate legacy `update_material_cache!` testset; keep the zero-alloc
path driven by `GlobalMaterialCache`.
Stateful initialization now flows through `GlobalMaterialCache` construction in
the individual tests, so the placeholder helper only duplicated errors.
- Remove `create_material_state` and its docstring from shared continuum helpers.
Wire the continuum suite into the newer kernel families beyond baseline elasticity
assembly: branch coverage for material caching, a brick direct solve, and mixed
u–p / Stokes / HR / Hu–Washizu matvec + solver smoke paths.
- Add `test_material_cache_branches.jl` next to the existing cache-update group.
- Include mixed formulation kernels with companion solves or penalty matvec checks.
The DOF runner now exercises the type-stable handler path end-to-end (multi-field
templates, facet orientation maps, and higher-order hex facets) instead of the
retired field-unification stub.
- Replace `test_field_unification.jl` with global ranges, multifield wiring, and
facet-map coverage across tet/wedge/pyramid/tet10/hex20 shapes.
- Drop the unused `Tensors` import and the old header docstring.
Inference-sensitive helpers belong behind the public module boundary so changes to
includes do not silently widen types in CI.
- Switch to `using JuliaFEM` after removing relative includes.
Static-array return paths depend on the same generated helpers as production code;
tests should import the package rather than cherry-picking sources.
- Drop manual topology/basis includes.
Partition-of-unity constraints must hold for the generated tables JuliaFEM ships,
not a parallel copy pulled via relative paths.
- Replace includes with `using JuliaFEM`.
Numerical tolerances are meaningful only when they target the shipped basis
implementation and quadrature pairing.
- Import `JuliaFEM` instead of stitching topology files manually.
Kronecker tests should exercise exported Lagrange evaluation helpers together with
topology types from the package root.
- Swap fragile src includes for `using JuliaFEM`.
Interpolation tests should respect manifest exports and initialization order from
the main module.
- Remove duplicated topology/basis includes; import `JuliaFEM` instead.
Ensure gradient identities run against the same API users import, not a bespoke
subset of source files.
- Replace relative includes with `using JuliaFEM`.
Align derivative checks with the packaged basis/topology stack instead of
partially re-including `src/` fragments.
- Drop manual `include("../../src/...")` bootstrapping in favor of `using JuliaFEM`.
Basis regression files used to `include` topology and generated basis sources
directly from `../../src`, which drifted from package exports and hid missing
wiring until CI.
- Replace the relative `include` chain with `using JuliaFEM` so tests hit the
real module surface (`Lagrange{P}`, parametrized topologies, generated tables).
Import `JuliaFEM` in the topic runner and include new Piola/Nedelec,
integration-basis quadrature, and basis-description regressions.
- Reorder derivative/type-stability includes after adding coverage files.
Replace hand-inlined topic tests with `TOPICS` discovery, optional ARGS-based
filtering, and interface smoke checks required by the new mesh stack.
- SPDX-header the runner and assert `AbstractInterfaceMesh` / `InterfaceMesh` exist.
- `include(joinpath(topic, \"runtests.jl\"))` for every mirrored topic directory.
- Drop obsolete inline includes for retired paths; note legacy tests live outside CI.