Skip to content

feat: quality regression test suite + DomI sync (#75, #78)#65

Draft
domattioli wants to merge 26 commits into
mainfrom
daily-maintenance
Draft

feat: quality regression test suite + DomI sync (#75, #78)#65
domattioli wants to merge 26 commits into
mainfrom
daily-maintenance

Conversation

@domattioli
Copy link
Copy Markdown
Owner

@domattioli domattioli commented May 31, 2026

Summary

Rolling daily-maintenance PR. Updated 2026-06-04T12Z.

2026-06-04T12Z session (commit c3e0695)

  • fix: regression 39bac0e_split_opposing_tri orphan tris_split_opposing_tri now returns None early when np_id >= domain.points.shape[0] (midpoint buffered in work._extra_pts, not yet flushed). Commit 39bac0e had proceeded using a combined pts array, which appended new rows to domain.connectivity_list that were never tracked in consumed, leaving 54 orphan boundary tris in method="faithful" on Test_Case_1.14. Early return restores pre-regression behaviour. 18/18 test_no_interior_tris pass; 240/240 fast suite pass.

2026-06-03T12Z session (commit ed09597)

  • fix: test_conforming + _boundary_edges self-loop guard — ADCIRC connectivity_list stores tris as [n1,n2,n3,n1]. Iterating all 4 positions created spurious (n1,n1) self-loop edges, failing test_conforming[Baranja_Hill.14] with Non-conforming edges: [((321, 321), 3)]. Fix: skip edge when a == b. Applied to both _boundary_edges and test_conforming. Verified on Baranja_Hill.14 + Test_Case_1.14.

2026-06-03T05Z session (commit 95de755)

2026-06-02T12Z session (commits 35523bc, 0a24286, f5f8a11)

2026-06-02T02Z session

  • DomI sync, routine update, introspect corpus.

2026-06-01 session

2026-05-31 sessions

  • feat: truss_smoother
  • DomI sync, spec updates, test fixes.

Test status

Fast suite (excluding test_faithful_invariants.py multi-fixture sweep + --runslow tests): 240 pass, 4 skip. All test_no_interior_tris pass including faithful path.

Skipped (operator decision required)

Issue Reason
#46 — onion domain ADMESH-Domains#93 still open
#20 — label triage 5 repo-specific labels need operator decision
#75 — faithful/WNAT baselines Tighten once C++ CHILmesh backend compiled
#17, #18, #26, #28, #38 status: brainstorming / research-only
#21 — size function drift Research; requires C++ backend for timely execution
#76 — profiling Research; same constraint
#77 — boundary-type seeding Blocked on CHILmesh #129

https://claude.ai/code/session_01LQqvkgn1uMPUDx3q4qURkx

Claude (default) 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
Copy link
Copy Markdown
Owner Author

Testing & refinements complete

Pushed: centroid L0 fix, local h0 per-node, repulsive-only forces, per-step inversion guard.

Block-O results (after topo cleanup):

Strategy mean min notes
FEM only (baseline) 0.741 0.094 current QuADMESH+
Truss only 0.461 0.000 repulsive-only, no FEM
Truss→FEM 0.741 0.094 same as FEM alone

Key finding: Truss smoother is structural stabilizer (pushes apart compressed edges) but can't improve mean quality without proper size function fh(x,y). Global h0=median causes overshoot on 44× variable-density mesh. Centroid springs + local h0 + repulsive-only forces eliminate inversion risk but reveal architectural limitation.

Next: #28 hypothesis only holds if ADMESH's fh threaded through pipeline. Otherwise, truss is useful for pre-conditioning / deflating compressed zones before FEM, not standalone quality improvement.

See #28 comment for full findings.


Generated by Claude Code

Claude (default) and others added 2 commits May 31, 2026 21:08
…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"
domattioli added 11 commits May 31, 2026 18:13
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.
Session session_01Uzf7kkhAirHH278vJYWyoS. Issues closed: #55 (skeleton), #66 (domi-sync). Issue progressed: #9 (catalog gaps filled). 65/65 tests pass.
…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.
@domattioli domattioli changed the title feat: truss_smoother — size-function-respecting quad smoother via 4-tri fan chore: sync DomI@9911cd7 + startup script canonical v2 (#74) Jun 2, 2026
)

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
@domattioli domattioli changed the title chore: sync DomI@9911cd7 + startup script canonical v2 (#74) feat: quality regression test suite + DomI sync (#75, #78) Jun 3, 2026
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.
Claude (dom macbook) 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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant