Skip to content

chore: add nuget cache files to gitignore#5

Open
DanielKow wants to merge 1 commit into
masterfrom
chore/gitignore-cleanup
Open

chore: add nuget cache files to gitignore#5
DanielKow wants to merge 1 commit into
masterfrom
chore/gitignore-cleanup

Conversation

@DanielKow
Copy link
Copy Markdown
Contributor

Summary

  • Add .nuget-help.db, .nuget/, *.db-shm, and *.db-wal to the C#/.NET section of .gitignore
  • Prevents NuGet/tool cache files from being tracked

🤖 Generated with Claude Code

DanielKow pushed a commit that referenced this pull request Apr 15, 2026
…veLin)

Per ADR-004: collisions are runtime conditions, not programmer errors.
MoveJoint no longer throws InvalidOperationException on collision; it now
leaves state unchanged and emits nothing (matches MoveLin returning -2).
Callers needing a structured failure use TryMoveJoint.

Updates the MoveJoint collision test to assert no-throw + state preserved.
DanielKow pushed a commit that referenced this pull request Apr 15, 2026
…per ADR-004

MoveJoint/MoveLin now return MoveResult and never throw on runtime
conditions (joint-limit violations, unreachable IK, collisions).
Legacy IRobot int/void signatures retained via explicit interface
implementation. TryMoveJoint/TryMoveLin removed as redundant.
DanielKow added a commit that referenced this pull request Apr 15, 2026
* feat: TASK-003 MoveResult evolution with MoveFailureReason and CollisionResult

* feat: TASK-005 ToolModel hierarchy (capsule, mesh, none)

* feat: TASK-004 ICollisionSource + primitive hierarchy + PrimitiveCollisionSource

* feat: TASK-008 RobotProgram + ProgramStep + JSON round-trip

* feat: TASK-009 TeachingPointSet with JSON round-trip

* feat: TASK-010 FkValidator + records with schema-versioned JSON

* feat: TASK-006 CollisionEnvironment with validation

* feat: TASK-007 CollisionDetector with 10 non-adjacent self-collision pairs

* feat: TASK-011 SimulatedRobot collision-aware moves, teaching points, program execution

* fix: PR#6 round 1 MUST fixes (path-level collision, records, hot-path allocs)

- SimulatedRobot.ExecuteWaypoints/Execute: check FirstCollision inside the
  joint-space interpolation loop so colliding intermediate configs are
  detected even when endpoints are safe. Truncate steps at last safe sub-step.
- Add regression test: safe endpoints, colliding mid-swing obstacle.
- ToolModel: remove manual Equals/GetHashCode overrides from record derivatives
  (rely on compiler-generated structural equality).
- CollisionDetector: return IReadOnlyList<CollisionResult> using a lazily
  allocated List; no final ToArray materialization.
- CollisionEnvironment.LinkRadii: expose ImmutableArray<double> instead of
  IReadOnlyList<double> copied on each use.
- FkValidator / TeachingPointSet: pre-size arrays for JSON DTOs instead of
  Select().ToList() in hot export paths.

* fix: PR#6 MUST #4 closed-form segment/box/cylinder SDF

Replace 17-point parametric sampling in ClosestPointOnSegmentToBox and
ClosestPointOnSegmentToCylinderZ with closed-form break-point enumeration:

- Box: endpoints + axis-center crossings + face crossings + outside-quadratic
  stationary point per sign cell. Up to ~37 structural candidates; exact
  minimum for piecewise-linear inside SDF and quadratic outside SDF.
- Cylinder-Z: endpoints + axial face/center crossings + radial surface
  crossings (quadratic roots) + radial-projection minimum t*.

Adds worst-case tests comparing against a 10_001-sample brute-force minimum
plus a tangent-pierce regression that the old uniform sampler missed.

* fix: PR#6 finding #5 MoveJoint silently rejects collision (matches MoveLin)

Per ADR-004: collisions are runtime conditions, not programmer errors.
MoveJoint no longer throws InvalidOperationException on collision; it now
leaves state unchanged and emits nothing (matches MoveLin returning -2).
Callers needing a structured failure use TryMoveJoint.

Updates the MoveJoint collision test to assert no-throw + state preserved.

* refactor: SHOULD #5 — unify MoveJoint/MoveLin to MoveResult contract per ADR-004

MoveJoint/MoveLin now return MoveResult and never throw on runtime
conditions (joint-limit violations, unreachable IK, collisions).
Legacy IRobot int/void signatures retained via explicit interface
implementation. TryMoveJoint/TryMoveLin removed as redundant.

* feat: TASK-012 RobotPresets FR5 DH correction + v6 fleet (FR3/10/16/20/30)

Apply the FR5 DH correction per docs/epics/epic-021-robot-simulator/fairino-preset-reference.md:
- a_{J4}: -392.25 -> -395.01
- d4: 115.7 -> 0 (j3/j4 axes parallel under Craig MDH, not in URDF)
- d5: 92.2 -> 102.1
- d6: 94.0 -> 102.0

Replace the symmetric +/-175 deg joint-limit array with per-axis v6 limits
(J1 +/-178, J2 [-265,+85], J3 +/-162, J4 [-265,+85], J5 +/-178, J6 +/-360).

Add factories FairinoFR3/10/16/20/30 built from a shared FairinoV6 helper that
hard-wires d4=0 and the shared v6 joint-limit array.

Test ground-truth regeneration (OPTION A, user-approved): FK_HOME, FK_CFG_A..E,
and WP1..WP5 were regenerated from our own ForwardKinematics output on the
corrected model. These are REGRESSION-ONLY fixtures, not independent ground
truth. Old fixtures encoded the old (incorrect) DH, so they could not be
treated as reference values after the correction.

Waypoints were re-chosen as FK outputs of curated joint configs so chained IK
seeds stay on the same branch. Limit-violation tests rewritten against the new
per-axis limits. IK_Should_Select_ClosestToSeed derives elbow-down from
mirror-seeded IK instead of the old hardcoded mirror which no longer reaches
the same TCP pose under the corrected DH.

230/230 tests green in csharp/RocketWelder.SDK.Robotics.Core.Tests/.

* test: iter3 round-2 Finding #10 v6 preset FK smoke [Theory]

Adds FairinoV6_Presets_FK_AtHome_ShouldBe_Finite_And_WithinReach to
RobotPresetTests.cs. For every v6 preset the test computes FK(HOME), asserts
all TCP components are finite, and bounds |TCP| by the DH-derived geometric
reach (sum of |a_i| + |d_i| across the chain) times 1.1.

No datasheet reach figures are consulted; the bound is computed directly from
the preset's own DH chain, keeping the check self-consistent.

236/236 tests green (up from 230).

* docs: strip unsourced payload/reach figures from RobotPresets XML (Finding #9)

* test: renumber TASK-003..TASK-012 XML summary refs to TASK-001..TASK-010

---------

Co-authored-by: Daniel Kowalski <daniel.kowalski@modelingevolution.com>
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