Skip to content

feat(0127-LegAnkleFootLandmarkSpecsCaptureCompare): leg/ankle/foot landmark capture, compare, and placement consume - #129

Merged
Ryan-AI-Studios merged 1 commit into
mainfrom
feature/0127-LegAnkleFootLandmarkSpecsCaptureCompare
Aug 23, 2026
Merged

feat(0127-LegAnkleFootLandmarkSpecsCaptureCompare): leg/ankle/foot landmark capture, compare, and placement consume#129
Ryan-AI-Studios merged 1 commit into
mainfrom
feature/0127-LegAnkleFootLandmarkSpecsCaptureCompare

Conversation

@Ryan-AI-Studios

@Ryan-AI-Studios Ryan-AI-Studios commented Aug 23, 2026

Copy link
Copy Markdown
Owner

What

Track 0127: frozen form-read gastroc/malleolus/arch/ball/Achilles ids → fuse XYZ (left Y overlay + back X/Z, no new DEPTH_PAIRS) → sidecar leg_foot_metrics.json → CLI blockout-leg-foot-compare + MCP 51 (mesh_proportion_blockout_leg_foot_compare) → new-id calf_cyl p0 Y after B6 + arch_soft Z only.

Why

Package A has knee/ankle + calf diameters + calf DEPTH, but not gastroc/malleoli/arch/ball/Achilles form-read. Agents were guessing calf belly Y and arch Z from 0108/0096 H-frac priors.

Honesty (N6)

LEG_FOOT_COMPARE_HONESTY = proportion_leg_foot_compare_not_mesh_or_print_success. Compare is authoring QA only — not mesh or print success. Capsule _delta_mm uses p0 (live calf_cyl center=null). Y/Z-only _suggest ignores delta.x. Hold 0108/0096/0071/0042/0056. No remake/D7 (Package A lacks new ids). Report stay 1.2.0. Recipe stay 1.4.0.

Tests

A–F suites + pin-retarget catalog 50→51 (61 asserts / 52 files). Four gates green locally (ledgerful verify).


Note

Medium Risk
Touches fuse XYZ and recipe calf/arch placement, so wrong consume could shift blockout geometry. Scope is authoring QA with hold-priors for most ids and no schema bump.

Overview
Adds track 0127 form-read landmarks (gastroc, malleoli, arch, Achilles, ball) through capture, fuse, authoring compare, and limited recipe consume.

New blockout-leg-foot-compare (CLI + MCP, catalog 51) writes leg_foot_compare.json and optional leg_foot_metrics.json. Compare is authoring QA only (LEG_FOOT_COMPARE_HONESTY); suggestions stay in a closed set, with soft_adjust only for gastroc Y and arch Z. Capsule deltas use p0; X is ignored.

Fuse overlays left-view Y and back-view X/Z for the new ids (no new DEPTH_PAIRS, no invented Y). Recipe consume is narrow: measured gastroc_med_* Y onto calf_cyl p0 after B6 (then split mid), and measured arch_apex_* Z onto arch_soft. Existing 0108/0096 priors and report/recipe schemas stay 1.2.0 / 1.4.0.

Reviewed by Cursor Bugbot for commit 8d80d1b. Bugbot is set up for automated code reviews on this repo. Configure here.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 8d80d1b. Configure here.

return "hold_priors"
if max(vals) < 1.0:
return "hold_priors"
return "soft_adjust"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gastroc soft_adjust never clears

Medium Severity

_suggest treats any large delta.y or delta.z as soft_adjust for all soft-adjust ids, but consume is axis-specific (gastroc_med_* writes only Y onto capsule p0; arch_apex_* writes only Z). Capsule p0 sits at knee height while photo gastroc Z is belly height, so delta.z stays large after a successful Y consume and soft_adjust never settles to hold_priors.

Additional Locations (2)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 8d80d1b. Configure here.

dest = [float(cyl.p1[0]), float(cyl.p1[1]), float(cyl.p1[2])]
if dest is not None:
mid = _calf_split_mid(list(cyl.p0), dest)
cyl.p1 = list(mid)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Legacy calf capsule shortened

Low Severity

When no calf_taper_dist exists, _apply_measured_calf_cyl_y still runs _calf_split_mid and writes the result into calf_cyl.p1. That turns a full-shank one-cyl capsule into a proximal 42% stub and leaves a gap to the ankle. Sibling thigh-adduction logic correctly leaves legacy p1 at the ankle and only moves p0.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 8d80d1b. Configure here.

@Ryan-AI-Studios
Ryan-AI-Studios merged commit fb3f0ca into main Aug 23, 2026
3 checks passed
@Ryan-AI-Studios
Ryan-AI-Studios deleted the feature/0127-LegAnkleFootLandmarkSpecsCaptureCompare branch August 23, 2026 19:25
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