feat: quality regression test suite + DomI sync (#75, #78)#65
Draft
domattioli wants to merge 26 commits into
Draft
feat: quality regression test suite + DomI sync (#75, #78)#65domattioli wants to merge 26 commits into
domattioli wants to merge 26 commits into
Conversation
added 3 commits
May 30, 2026 23:35
Remove Tri2Quad and Demo sections referencing deleted GIF/MP4 artifacts. Remove those entries from ToC. Update all Zenodo DOIs to 10.5281/zenodo.20351165. https://claude.ai/code/session_019TnFhzo2fX57VQyQSnwJ59
- .github/workflows/tests.yml: pytest matrix (3.10/3.11/3.12) on push/PR to main and daily-maintenance; installs chilmesh from GitHub + quadmesh[dev] - git mv matlab/ src/matlab/ (frozen MATLAB reference lives under src/) - Update README and CLAUDE.md paths: matlab/ -> src/matlab/ https://claude.ai/code/session_019TnFhzo2fX57VQyQSnwJ59
…ri fan Addresses #28. Prototype of the quad→4-tri-fan spring-force smoother: - Each quad split into 4 tris (centroid node) to restore shear stiffness - Frozen edge topology: spring forces only move vertices, no retriangulation - Boundary nodes pinned; interior nodes converge toward target edge length h0 - fh=None falls back to median quad edge length - Opt-in: truss_smooth=True in post_process_routine / run_pipeline - Called before fem_smoother so FEM corrects any angle artifacts afterward Implements the "4-tri fan + vertex-only truss" design from the #28 investigation comment. The collapsed-quad failure mode (4-bar linkage) is solved by the fan's diagonal bracing. https://claude.ai/code/session_019TnFhzo2fX57VQyQSnwJ59
…n guard Fixes #28 prototype issues exposed by Block-O testing: - Centroid bars use structural-only springs (L0_init) → no compression - Perimeter bars use local h0 (median neighbor edge lengths) → respects local density - Spring forces repulsive-only (clip max(L0-Lbar,0)) → no overshoot inversion - Per-step inversion detection and revert → preserve mesh topology Results: stable smoothing on variable-density meshes without FEM pre-pass. Without proper size function fh(x,y), can't improve on FEM alone, but provides structural stabilization that could benefit other algorithms. https://claude.ai/code/session_019TnFhzo2fX57VQyQSnwJ59
Owner
Author
Testing & refinements completePushed: centroid L0 fix, local h0 per-node, repulsive-only forces, per-step inversion guard. Block-O results (after topo cleanup):
Key finding: Truss smoother is structural stabilizer (pushes apart compressed edges) but can't improve mean quality without proper size function Next: #28 hypothesis only holds if ADMESH's See #28 comment for full findings. Generated by Claude Code |
…t fixes - chore: sync DomI@e0bba05e9ec495bde2790738ad93b17d0e33c20f - docs: add spec for skeletonization rename (#55) — specs/055-skeletonization-rename/spec.md; rename docstrings in _layer_state.py, mesh_structure.py, tri2quad.py, validator.py, test_layer_state.py - fix: pass WorkingMesh to _split_opposing_tri so buffered midpoint resolves (fixes 2 pre-existing test failures in test_tri_removal*) - chore: introspection corpus 2026-05-31"
This was referenced May 31, 2026
Closed
Keeps Claude-specific files off PyPI wheels and Zenodo snapshots. Mirrors DomI .gitattributes. Closes DomI #179 (QuADMesh portion).
Synced from DomI canonical set (spec 007, 2026-05-31). Enables sync-labels.yml workflow to recolor/prune label definitions on merge.
Mirrors DomI .github/workflows/sync-labels.yml. On merge to main, recolors canonical labels + deletes deprecated definitions via EndBug/label-sync with delete-other-labels: true. Closes DomI #162 (QuADMesh portion) and satisfies DomI #176 label-definition cleanup path.
…it_opposing_tri (#55) - mesh_structure.py: kind="skeleton" implemented per operator 2026-05-30 definition (morphological peeling via CHILmesh layer ordering outermost->innermost). Adds skeleton_core / skeleton_core_verts properties exposing layer N-1 (irreducible core) for skeleton-vs-medial_axis tri2quad comparison (#55). - _tri_removal.py: _split_opposing_tri accepts optional work: WorkingMesh; builds combined pts array when np_id >= domain.points.shape[0] — fixes IndexError when buffered midpoint not yet flushed to domain.points. - tests/test_mesh_structure.py: 6 new skeleton tests replace not_implemented stub. - specs/055: status Complete; Research Section updated with morphological def. - specs/002: catalog [GAP] filled; 4 new methods added (QuadriFlow, FD+Blossom, IGM, Spectral); citation ranking; Blossom+layers complexity analysis added. - .domi-pin: refreshed to DomI HEAD e2501f6 (local checkout fallback; network N/A).
- _tri_removal.py: pass work to _split_opposing_tri; combined pts array prevents IndexError when buffered midpoint not in domain.points. - specs/002: algorithm catalog complete — [GAP] entries filled, 4 new methods added, citation ranking + Blossom-layer complexity analysis. - specs/055: Research Section updated with morphological skeleton def per operator 2026-05-30; implementation noted as shipped.
…permission-prompts bootstrap step
…lates (#74) - Replace scripts/instructions_on_start.sh with DomI canonical v2 (full consumer health checks: CLAUDE.md, git hygiene, test infra, speckit, git hooks, recovery cheat-sheet) - Extract QuADMesh-specific Python port smoke to scripts/onstart_local.sh - Add .github/ISSUE_TEMPLATE/bug_report.yml, feature_request.yml, skill_request.yml (canonical DomI templates) - Refresh .domi-pin to DomI@9911cd7 Resolves #74
Missed from previous commit — replace with full DomI canonical version (21KB vs original 2.6KB). Adds CLAUDE.md check, full git hygiene, consumer repo checks, git hooks setup, recovery cheat-sheet, and onstart_local.sh extension point.
) DomI sync (#78): .domi-pin refreshed 9911cd7 → bc29b51 Quality regression suite (#75): - tests/test_quality_regression.py: 4 @slow tests (TC1 matching/faithful, Block_O matching, WNAT_Hagen matching) skipped unless --runslow - tests/fixtures/quality_baselines.json: baseline store - tests/conftest.py: --runslow flag + skip gate - pyproject.toml: slow marker registration https://claude.ai/code/session_013wH7FC3jVUtuugLM2tUZiT
Session: DomI sync (#78) + quality regression tests (#75). Outcome: partial — baselines conservative (pure-Python CHILmesh too slow for live measurement). Key pain: C++ CHILmesh not compiled in fresh containers → can't run quality tests. https://claude.ai/code/session_013wH7FC3jVUtuugLM2tUZiT
Reduces permission prompts for common GitHub read ops per fewer-permission-prompts skill. All listed tools are read-only (list/get/search). https://claude.ai/code/session_013wH7FC3jVUtuugLM2tUZiT
ADCIRC connectivity_list stores tris as [n1,n2,n3,n1]. Iterating all 4 positions created a spurious (n1,n1) self-loop edge counted 3x per tri element, failing test_conforming[Baranja_Hill.14] with: Non-conforming edges: [((321, 321), 3)] Guard: skip edge when a == b. Applied to both _boundary_edges and test_conforming. Verified: Baranja_Hill.14 and Test_Case_1.14 pass.
added 2 commits
June 4, 2026 12:27
) `_split_opposing_tri` now returns None early when `np_id >= domain.points.shape[0]` instead of building a combined pts array and proceeding. The 39bac0e approach caused it to append new rows to `domain.connectivity_list` for tris in already-consumed layers — those rows were never tracked in `consumed`, leaving 54 orphan boundary tris in the faithful path on Test_Case_1.14. Early return restores pre-regression behaviour (matches the IndexError that `_ccw_tri` previously raised with an out-of-bounds index). All 18 test_no_interior_tris tests pass; 240 fast-suite pass.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Rolling daily-maintenance PR. Updated 2026-06-04T12Z.
2026-06-04T12Z session (commit c3e0695)
_split_opposing_triorphan tris —_split_opposing_trinow returnsNoneearly whennp_id >= domain.points.shape[0](midpoint buffered inwork._extra_pts, not yet flushed). Commit39bac0ehad proceeded using a combined pts array, which appended new rows todomain.connectivity_listthat were never tracked inconsumed, leaving 54 orphan boundary tris inmethod="faithful"onTest_Case_1.14. Early return restores pre-regression behaviour. 18/18test_no_interior_trispass; 240/240 fast suite pass.2026-06-03T12Z session (commit ed09597)
[n1,n2,n3,n1]. Iterating all 4 positions created spurious(n1,n1)self-loop edges, failingtest_conforming[Baranja_Hill.14]withNon-conforming edges: [((321, 321), 3)]. Fix: skip edge whena == b. Applied to both_boundary_edgesandtest_conforming. Verified on Baranja_Hill.14 + Test_Case_1.14.2026-06-03T05Z session (commit 95de755)
.domi-pinrefreshed9911cd7→bc29b51.tests/test_quality_regression.py(4@pytest.mark.slowtests),tests/fixtures/quality_baselines.json,--runslowflag in conftest,slowmarker in pyproject.toml.2026-06-02T12Z session (commits
35523bc,0a24286,f5f8a11)2026-06-02T02Z session
2026-06-01 session
2026-05-31 sessions
Test status
Fast suite (excluding
test_faithful_invariants.pymulti-fixture sweep +--runslowtests): 240 pass, 4 skip. Alltest_no_interior_trispass including faithful path.Skipped (operator decision required)
status: brainstorming/ research-onlyhttps://claude.ai/code/session_01LQqvkgn1uMPUDx3q4qURkx