- Task summary:
- Refined the sidebar drawer/panel UX after user feedback.
- Moved the drawer close button into the panel title-line area and removed redundant outer framing behavior.
- Kept robot control docked on the right side with collapsible behavior.
- Added persistent workflow artifacts (
AGENT_SCRATCHPAD.md) and top-level pointers so devlog/scratchpad/skills usage is explicit.
- Changes:
- Updated
web-ui/src/components/SidebarDrawer.tsxfor in-panel close-button placement and drawer sizing. - Updated
web-ui/src/App.tsxandweb-ui/src/ControlPanel.tsxin prior steps for right-aligned collapsible robot-control behavior. - Added
AGENT_SCRATCHPAD.md. - Updated
QUICK_START.mdwith a dedicated workflow pointers section forDEVLOG.md,AGENT_SCRATCHPAD.md, and.cursor/skills/.
- Updated
- Validation:
npm run buildinweb-uicompleted successfully.ReadLintschecks reported no lint errors in changed frontend files.
- Follow-up notes / risks:
- Close button placement depends on panel title spacing; if panel typography changes later, tweak
top/rightoffsets inSidebarDrawer. - If additional drawer panel types are introduced with different widths, keep drawer width and content width synchronized.
- Close button placement depends on panel title spacing; if panel typography changes later, tweak
- Task summary:
- Fixed tab-forcing behavior where STEP load / persisted tree selection auto-switched to Weld and blocked switching to other tabs.
- Kept tree-to-weld synchronization, but limited panel auto-open to explicit tree click actions only.
- Changes:
- Updated
web-ui/src/App.tsx:- removed forced
activePanelreassignment from the selected-tree-node effect. - kept weld segment sync from tree selection (
weldSegmentEdgeId) without overriding active tab. - updated
handleSelectProgramTreeNodeto open a panel only when user directly clicks a tree node.
- removed forced
- Updated
- Validation:
ReadLintsonweb-ui/src/App.tsxreturned no issues.npm run buildinweb-uicompleted successfully.
- Follow-up notes / risks:
- If future tree sync rules are added, keep them non-authoritative over manual sidebar tab selection.
- Task summary:
- Moved
Reset Poseto the bottom of the STEP Import panel as requested. - Addressed multi-selected edge flicker/override behavior by decoupling tree-driven sync from weld-driven selection updates.
- Moved
- Changes:
- Updated
web-ui/src/App.tsx:- relocated
Reset Posebutton to panel footer. - introduced interaction origin tracking (
treevsweld) to prevent selection ping-pong between program tree and weld segment list. - restricted tree-to-weld segment activation to explicit tree-origin events.
- relocated
- Updated
web-ui/src/ArmVisualizer.tsx:- made selected/hovered topology line materials opaque (
transparent=false) to reduce visual flicker when multiple edges are selected.
- made selected/hovered topology line materials opaque (
- Updated
- Validation:
ReadLintson updated frontend files returned no issues.npm run buildinweb-uicompleted successfully.
- Follow-up notes / risks:
- If flicker persists on specific GPU drivers, next step is to move selected-edge rendering fully to non-overlapping mesh overlays and hide base lines for selected edges.
- Task summary:
- Enforced automatic memory-loop behavior so agents consistently use both
AGENT_SCRATCHPAD.mdandDEVLOG.md.
- Enforced automatic memory-loop behavior so agents consistently use both
- Changes:
- Added
.cursor/rules/agent-memory-loops.mdwithalwaysApply: true. - Updated
.cursor/rules/agent-gated-checklist.mdto include mandatory scratchpad/devlog read/write gates. - Rule now requires:
- start-of-task read of both memory files,
- during-task high-signal capture,
- end-of-task writeback to both files.
- Added
- Validation:
- Verified new rule file exists under
.cursor/rules/with frontmatter and actionable workflow steps.
- Verified new rule file exists under
- Follow-up notes / risks:
- Existing already-running sessions may need a fresh user turn to naturally re-anchor on the new rule text.
- Task summary:
- Added explicit pointers from memory-loop docs to the exact source skills and managed files.
- Changes:
- Updated
.cursor/rules/agent-memory-loops.mdwith a required mapping section:.cursor/skills/learning-scratchpad-loop/SKILL.md->AGENT_SCRATCHPAD.md.cursor/skills/devlog-loop/SKILL.md->DEVLOG.md- Included both reference templates under each skill.
- Updated
QUICK_START.mdworkflow pointers to include the same direct skill/template/file paths.
- Updated
- Validation:
- Confirmed reference template paths exist:
.cursor/skills/learning-scratchpad-loop/references/scratchpad-template.md.cursor/skills/devlog-loop/references/devlog-entry-template.md
ReadLintson updated markdown files reported no diagnostics.
- Confirmed reference template paths exist:
- Follow-up notes / risks:
- None for this docs/rules alignment change.
- Task summary:
- Replicated explicit scratchpad/devlog skill mappings across all always-on rules so they stay in context everywhere.
- Changes:
- Updated
.cursor/rules/agent-gated-checklist.mdwith required skill/template/file mapping section. - Updated
.cursor/rules/agent-ambiguity-triggers.mdwith required skill/template/file mapping section. - Updated
.cursor/rules/agent-subagents.mdwith required skill/template/file mapping section. - Updated
.cursor/rules/rtos-ethercat-readme.mdwith required skill/template/file mapping section.
- Updated
- Validation:
- Confirmed
.cursor/rules/files withalwaysApply: truenow all include direct pointers to:.cursor/skills/learning-scratchpad-loop/SKILL.md->AGENT_SCRATCHPAD.md.cursor/skills/devlog-loop/SKILL.md->DEVLOG.md
ReadLintson edited markdown files reported no diagnostics.
- Confirmed
- Follow-up notes / risks:
- New
alwaysApplyrules introduced in future should copy the same mapping section to preserve consistency.
- New
- Task summary:
- Implemented the full "Weld Motion + Tree UX" pass:
- compact Program Tree rows
- chronological/default and grouped/toggle views
- weld section planning with pragmatic transitions
- torch angle controls and backend option plumbing
- improved weld planner diagnostics and runtime robustness.
- Addressed follow-up workflow gap by explicitly logging this session in both
DEVLOG.mdandAGENT_SCRATCHPAD.md.
- Implemented the full "Weld Motion + Tree UX" pass:
- Changes:
- Updated
web-ui/src/components/ProgramFeatureTree.tsxfor compact single-line rows and view-mode controls. - Updated
web-ui/src/previewUtils.tsfor grouped vs chronological tree generation and stable node reuse. - Updated
web-ui/src/App.tsx:- persisted
programTreeViewMode(default chronological), - added weld controls (
workAngleDeg,travelAngleDeg,transitionClearanceMm,postAction), - added section generation for weld/transition/return-to-start planning payloads.
- persisted
- Updated
src/gradient_os/api/main.py:- section payload parsing (
_coerce_plan_sections), - weld option passthrough,
- weld program save/load fields for new weld settings.
- section payload parsing (
- Updated
src/gradient_os/arm_controller/command_api.py:- section-aware weld planning path,
- continuous interior weld planning behavior,
- transition section handling,
- torch-angle orientation generation with fallback,
- preview planned-step cache save for weld previews.
- Updated
- Validation:
- Frontend:
npm run buildpassed. - Frontend:
ReadLintson changed TS/TSX files reported no issues. - Backend:
./.venv/Scripts/python.exe -m py_compile "src/gradient_os/api/main.py" "src/gradient_os/arm_controller/command_api.py"passed. - Backend smoke test:
plan_preview_trajectory_points(..., sections=..., weld_metadata=...)ran successfully after orientation-fallback path engaged for an infeasible torch-angle segment.
- Frontend:
- Follow-up notes / risks:
- Torch-angle requests can still be IK-infeasible for some geometries; fallback to orientation-lock prevents hard failure but may not preserve requested angle.
- Full collision-aware transition planning remains intentionally deferred; tracked as future backlog work.
- Task summary:
- Fixed sidebar menu overflow so panel content does not exceed viewport height.
- Changes:
- Updated
web-ui/src/components/SidebarDrawer.tsx:- clamped drawer height to
max-h-[calc(100dvh-3rem)] - enabled internal vertical scrolling via
overflow-y-auto.
- clamped drawer height to
- Updated
- Validation:
- Frontend:
npm run buildpassed. - Frontend:
ReadLintsonweb-ui/src/components/SidebarDrawer.tsxreported no issues.
- Frontend:
- Follow-up notes / risks:
- If additional absolute/fixed panel variants are introduced, apply the same viewport clamp to keep behavior consistent across all overlays.
- Task summary:
- Fixed drawer header overlap where the close button could cover right-aligned panel header controls (e.g. Weld status badge).
- Changes:
- Updated
web-ui/src/components/SidebarDrawer.tsx:- increased inner content right padding from
pr-1topr-10to reserve a dedicated close-button gutter.
- increased inner content right padding from
- Updated
- Validation:
- Frontend:
npm run buildpassed. - Frontend:
ReadLintsonweb-ui/src/components/SidebarDrawer.tsxreported no issues.
- Frontend:
- Follow-up notes / risks:
- This keeps generic drawer content clear of the close control; if any panel needs full-width header actions later, consider converting the drawer to a shared explicit header row instead of overlay positioning.
- Task summary:
- Added explicit takeover TODO instructions for a new model to continue unresolved drawer/header overlap quality work.
- Changes:
- Updated
QUICK_START.md:- added a top-level "TODO - New model takeover (high priority)" section,
- documented current user-reported issue and required follow-up implementation expectations,
- added concrete acceptance criteria and build-validation requirement.
- Updated
- Validation:
- Documentation-only update; no code/runtime changes.
- Follow-up notes / risks:
- Next implementation should replace absolute-overlay close-control behavior with an explicit shared header layout to eliminate overlap risk by structure, not spacing.
- Task summary:
- Implemented the first takeover item from
QUICK_START.md: fixed drawer header overlap with a structural shared header row. - Kept drawer content viewport-clamped with internal scrolling for long panel content.
- Implemented the first takeover item from
- Changes:
- Updated
web-ui/src/components/SidebarDrawer.tsx:- replaced absolute close-button overlay with a dedicated shared header row (
headerContent+ close action), - preserved viewport constraints and internal scroll behavior with explicit body max-height.
- replaced absolute close-button overlay with a dedicated shared header row (
- Updated
web-ui/src/App.tsx:- added panel-aware
activeDrawerHeadercontent (including weld title +Weld ONbadge), - passed shared header content into
SidebarDrawer, - removed duplicated panel title rows in STEP / Trajectory / Weld panel cards so the shared drawer header is the primary title surface.
- added panel-aware
- Updated
web-ui/src/TelemetryCharts.tsx:- removed duplicate top "Live Charts" title to align with shared drawer header.
- Updated
- Validation:
- Frontend:
npm run buildpassed. - Frontend:
ReadLintson changed files reported no issues:web-ui/src/components/SidebarDrawer.tsxweb-ui/src/App.tsxweb-ui/src/TelemetryCharts.tsx
- Frontend:
- Follow-up notes / risks:
- Visual confirmation on real narrow viewport interaction is still recommended to confirm final spacing feel across all drawer panel variants.
- Task summary:
- Fixed left drawer vertical alignment so it no longer runs to the edge and now uses the same top/bottom inset style as the right robot-control panel.
- Updated
AGENTS.md(renamed fromQUICK_START.md) with a complete installed-skills catalog and clear "when to use" guidance.
- Changes:
- Updated
web-ui/src/components/SidebarDrawer.tsx:- switched drawer wrapper from top + viewport max-height sizing to inset-based sizing (
inset-y-6) with a flex column layout, - made drawer body
flex-1+overflow-y-autoto preserve internal scrolling while maintaining bottom inset.
- switched drawer wrapper from top + viewport max-height sizing to inset-based sizing (
- Updated
AGENTS.md:- changed document heading/context to reflect rename from
QUICK_START.md, - refreshed takeover TODO/acceptance criteria for the current vertical alignment issue,
- added all available skills with path + relevance triggers,
- added explicit design skill guidance (
frontend-design,web-design-guidelines,canvas-design).
- changed document heading/context to reflect rename from
- Updated
- Validation:
- Frontend:
npm run buildpassed. - Frontend/docs lint check:
ReadLintsonweb-ui/src/components/SidebarDrawer.tsxandAGENTS.mdreported no issues.
- Frontend:
- Follow-up notes / risks:
- Recommend one live visual pass at very short viewport heights to confirm the drawer body scroll ergonomics remain comfortable.
- Task summary:
- Styled the left drawer scrollbar so it matches the dark/cyan UI theme instead of using the default browser scrollbar.
- Changes:
- Updated
web-ui/src/components/SidebarDrawer.tsx:- applied a dedicated
gradient-scrollbarclass to the drawer scroll container, - added slight right padding (
pr-1) to keep custom scrollbar visuals from crowding content.
- applied a dedicated
- Updated
web-ui/src/index.css:- added
@layer utilitiesscrollbar styles for.gradient-scrollbar, - included both Firefox (
scrollbar-width,scrollbar-color) and WebKit (::-webkit-scrollbar*) styling, - matched track/thumb colors to existing slate/cyan palette with hover state.
- added
- Updated
- Validation:
- Frontend:
npm run buildpassed. - Frontend lint check:
ReadLintsonweb-ui/src/components/SidebarDrawer.tsxandweb-ui/src/index.cssreported no issues.
- Frontend:
- Follow-up notes / risks:
- If additional panel regions need the same styling, reuse
gradient-scrollbarto keep scroll visuals consistent across the app.
- If additional panel regions need the same styling, reuse
- Task summary:
- Integrated the scrollbar into the drawer panel shell and enforced rounded bottom corners regardless of scroll position.
- Changes:
- Updated
web-ui/src/components/SidebarDrawer.tsx:- merged header + body into one shared clipped shell (
overflow-hidden,rounded-xl), - moved scroller inside the shell under a header divider (
border-b), - kept custom scrollbar styling on the internal body scroller with content padding.
- merged header + body into one shared clipped shell (
- Updated
- Validation:
- Frontend:
npm run buildpassed. - Frontend lint check:
ReadLintsonweb-ui/src/components/SidebarDrawer.tsxreported no issues.
- Frontend:
- Follow-up notes / risks:
- If panel body framing is later simplified (single-shell look), remove inner panel card borders to reduce nested framing.
- Task summary:
- Standardized weld-panel typography sizing so labels, meta text, and control text use a consistent scale.
- Changes:
- Updated
web-ui/src/App.tsx(Weld panel):- introduced shared weld typography class constants (
WELD_LABEL_CLASS,WELD_INPUT_CLASS,WELD_META_TEXT_CLASS,WELD_SECTION_TITLE_CLASS), - normalized base panel text to a consistent body size/line-height,
- aligned metadata/caption sizes across selected edges, section info, and saved-program rows,
- aligned button/input/select text sizing for visual consistency.
- introduced shared weld typography class constants (
- Updated
- Validation:
- Frontend:
npm run buildpassed. - Frontend lint check:
ReadLintsonweb-ui/src/App.tsxreported no issues.
- Frontend:
- Follow-up notes / risks:
- If this typography scale should also be mirrored in STEP/Trajectory panels, extract these tokens into a shared drawer-typography utility in a follow-up pass.
- Task summary:
- Corrected Weld panel text hierarchy so section headers and field labels no longer share the same perceived boldness.
- Changes:
- Updated
web-ui/src/App.tsx:- changed
WELD_LABEL_CLASSfrom medium to normal weight, - increased section-title contrast and size via
WELD_SECTION_TITLE_CLASS(text-[14px], stronger color), - preserved existing spacing and control behavior.
- changed
- Updated
- Validation:
- Frontend:
npm run buildpassed. - Frontend lint check:
ReadLintsonweb-ui/src/App.tsxreported no issues.
- Frontend:
- Follow-up notes / risks:
- If needed, next pass can align STEP/Trajectory section heading hierarchy to exactly the same pattern.
- Task summary:
- Applied the same typography hierarchy strategy to STEP and Trajectory panels and added a living UI consistency doc.
- Added references so future sessions treat the design doc as a first-class source of truth.
- Changes:
- Updated
web-ui/src/App.tsx:- introduced shared drawer typography tokens (
DRAWER_*) and mapped Weld tokens to them, - normalized STEP panel button/label/input/meta text sizes to the shared scale,
- normalized Trajectory panel body/meta/section heading/input/action text to the shared scale.
- introduced shared drawer typography tokens (
- Added
web-ui/design.md:- documented design direction, typography hierarchy, shared tokens, layout rules, and a consistency checklist.
- Updated
AGENTS.md:- referenced
web-ui/design.mdin workflow pointers and design guidance.
- referenced
- Updated
- Validation:
- Frontend:
npm run buildpassed. - Frontend/docs lint check:
ReadLintsonweb-ui/src/App.tsx,AGENTS.md, andweb-ui/design.mdreported no issues.
- Frontend:
- Follow-up notes / risks:
- Some legacy controls outside the drawer panels may still use older text sizing and can be normalized in a dedicated global pass.
- Task summary:
- Reinforced mandatory memory-loop workflow language in
AGENTS.mdsoDEVLOG.mdandAGENT_SCRATCHPAD.mdcan never be skipped.
- Reinforced mandatory memory-loop workflow language in
- Changes:
- Updated
AGENTS.md:- strengthened bullets for
DEVLOG.mdandAGENT_SCRATCHPAD.mdwith explicit MUST wording, - added a "Non-negotiable workflow rule" block that marks missing either update as a blocker/incomplete task.
- strengthened bullets for
- Updated
- Validation:
- Docs lint check:
ReadLintsonAGENTS.mdreported no issues.
- Docs lint check:
- Follow-up notes / risks:
- Continue enforcing this by always appending both files in the same turn as meaningful changes.
- Task summary:
- Removed unnecessary inner panel shell layer inside the drawer to eliminate the double-frame look and give content more horizontal room.
- Changes:
- Updated
web-ui/src/App.tsx:- removed outer card-shell classes from drawer panel roots (Telemetry panel, STEP panel, Trajectory panel, Weld panel),
- kept section-level cards intact for internal grouping while using full drawer width.
- Updated
web-ui/src/TelemetryCharts.tsx:- removed nested full-card shell style and kept a lightweight inner wrapper.
- Updated
web-ui/design.md:- added explicit rule to avoid nested outer shells inside drawer content.
- Updated
- Validation:
- Frontend:
npm run buildpassed. - Frontend/docs lint check:
ReadLintsonweb-ui/src/App.tsxandweb-ui/src/TelemetryCharts.tsxreported no issues.
- Frontend:
- Follow-up notes / risks:
- If any panel now feels too open visually, adjust section card spacing before reintroducing any full nested frame.
- Task summary:
- Updated drawer behavior so panel height follows content by default, while still capping at viewport max-height for tall panels.
- Made Telemetry/Charts drawer wider to avoid horizontal scrolling.
- Changes:
- Updated
web-ui/src/components/SidebarDrawer.tsx:- changed layout from forced full-height (
inset-y) to top-anchored adaptive height withmax-h, - kept internal vertical scrolling and added
overflow-x-hiddento prevent sideways scroll bars. - added
widthClassNameprop to support panel-specific width variants.
- changed layout from forced full-height (
- Updated
web-ui/src/App.tsx:- added
activeDrawerWidthClassso telemetry drawer uses wider width (w-[30rem]) and other panels keep standard width. - passed width class into
SidebarDrawer.
- added
- Updated
web-ui/design.md:- documented adaptive height behavior and telemetry wider-width rule.
- Updated
- Validation:
- Frontend:
npm run buildpassed. - Frontend/docs lint check:
ReadLintsonweb-ui/src/components/SidebarDrawer.tsx,web-ui/src/App.tsx, andweb-ui/design.mdreported no issues.
- Frontend:
- Follow-up notes / risks:
- If telemetry data density increases further, consider a responsive width tier for very wide screens while preserving mobile max-width constraints.
- Task summary:
- Fixed Weld drawer clipping/misalignment by anchoring it to the same
top-6/bottom-6overlay band used by adjacent floating UI. - Fixed angle-help tooltip clipping by moving it to a fixed portal overlay outside the drawer scroll container.
- Codified panel sizing/scroll and tooltip overlay rules in
web-ui/design.md. - Recorded durable regression-prevention notes in
AGENT_SCRATCHPAD.md.
- Fixed Weld drawer clipping/misalignment by anchoring it to the same
- Changes:
- Updated
web-ui/src/components/SidebarDrawer.tsx:- switched drawer wrapper to explicit
top-6 bottom-6anchoring, - set inner shell to
h-fullwith internal scroll region.
- switched drawer wrapper to explicit
- Updated
web-ui/src/App.tsx:- rendered Weld angle tooltip via
createPortal(document.body), - added viewport-clamped fixed positioning (right-side default with left fallback) and outside-click/Escape close handling.
- rendered Weld angle tooltip via
- Updated
web-ui/design.md:- replaced adaptive-height guidance with explicit anchored overlay guidance for drawer baselines,
- added tooltip/popover portal rules to prevent clipping regressions.
- Updated
AGENT_SCRATCHPAD.md:- logged mistake/fix/guardrails for panel baseline and tooltip clipping regressions.
- Updated
- Validation:
- Frontend:
npm run -s buildpassed. - Frontend/docs lint check:
ReadLintsonweb-ui/src/App.tsx,web-ui/src/components/SidebarDrawer.tsx,web-ui/design.md,AGENT_SCRATCHPAD.md, andDEVLOG.mdreported no issues.
- Frontend:
- Follow-up notes / risks:
- If additional field-level help popovers are added, they should reuse the same portal + viewport-clamp pattern instead of inline absolute positioning inside panel content.
- Task summary:
- Corrected weld end-action semantics so
return_to_startnow returns to trajectory start/home-start (planner start pose), not weld start. - Added a new weld end-action
liftfor a short vertical retract from weld end.
- Corrected weld end-action semantics so
- Changes:
- Updated
web-ui/src/App.tsx:- expanded weld post-action type union to include
lift, - updated End Action select with
Liftoption and clearer label text (Return to trajectory start), - normalized load/save parsing to preserve
lift, - removed frontend-generated post-action return segment from weld section builder (backend now owns end-action routing).
- expanded weld post-action type union to include
- Updated
src/gradient_os/api/main.py:- normalized
post_actionparsing to allownone/lift/return_to_startfor both weld-program save and/trajectory/plan-weldoptions payload.
- normalized
- Updated
src/gradient_os/arm_controller/command_api.py:- captured trajectory start pose at planning start,
- added backend post-action planning:
return_to_start: end -> lifted transit -> trajectory start,lift: end -> vertical retract by transition clearance.
- Updated
- Validation:
- Frontend:
npm run -s buildpassed. - Backend syntax:
.venv\\Scripts\\python.exe -m py_compile src\\gradient_os\\api\\main.py src\\gradient_os\\arm_controller\\command_api.pypassed. - Lint check:
ReadLintsonweb-ui/src/App.tsx,src/gradient_os/api/main.py, andsrc/gradient_os/arm_controller/command_api.pyreported no issues.
- Frontend:
- Follow-up notes / risks:
- Current
return_to_starttargets trajectory planning start pose; if product semantics later require a dedicated absolute home pose, add an explicitreturn_homeaction to avoid ambiguity.
- Current
- Task summary:
- Fixed stale weld preview/path visualization when loading saved weld programs (e.g.,
test_0) that have no savedplanned_trajectory.
- Fixed stale weld preview/path visualization when loading saved weld programs (e.g.,
- Changes:
- Updated
web-ui/src/App.tsx:- in pending weld-program restore branch, added explicit clear path when
previewPlanis absent:setPreviewPlan(null)setPlannerPoints([])
- after successful weld-program payload validation, clears preview/path immediately before async restore to avoid stale carry-over visuals.
- in pending weld-program restore branch, added explicit clear path when
- Updated
- Validation:
- Frontend:
npm run -s buildpassed. - Lint check:
ReadLintsonweb-ui/src/App.tsxreported no issues.
- Frontend:
- Follow-up notes / risks:
- If more scene overlays are derived from loaded program payloads in future, include explicit clear branches for null/absent data to prevent similar stale-UI regressions.
- Task summary:
- Fixed intermittent weld-run visualization flicker where the arm briefly snapped toward stale start-like poses during active motion.
- Changes:
- Updated
web-ui/src/App.tsx:- added telemetry packet ordering filter using source timestamp field (
t) to drop out-of-order samples, - added one-frame spike rejection for implausible joint jumps (
>0.8 radwithin<=0.25s), - added ref resets for telemetry filters on disconnect.
- added telemetry packet ordering filter using source timestamp field (
- Updated
- Validation:
- Frontend:
npm run -s buildpassed. - Lint check:
ReadLintsonweb-ui/src/App.tsxreported no issues.
- Frontend:
- Follow-up notes / risks:
- If future work intentionally combines multiple telemetry sources, introduce explicit source IDs and deterministic source selection to avoid timestamp-only arbitration edge cases.
- Task summary:
- Fixed loaded weld program run gating so
Run Weld Previewis enabled based on runnable preview data, not weld-draft editor state. - Updated weld preview execution to always re-plan from current robot state at run time.
- Fixed loaded weld program run gating so
- Changes:
- Updated
web-ui/src/App.tsx:- added
canRunPreviewprop toWeldPanel, - changed run button disable logic from
!draftto!canRunPreview, - passed
canRunPreview={Boolean(previewPlan?.name)}from parent, - changed
/trajectory/runrequest for preview run touse_cache: falseto ensure current-state re-plan and explicit approach to start.
- added
- Updated
- Validation:
- Frontend:
npm run -s buildpassed. - Lint check:
ReadLintsonweb-ui/src/App.tsxreported no issues.
- Frontend:
- Follow-up notes / risks:
- Re-planning on every run is safer but may add slight latency; if needed, expose cache/replan mode explicitly in UI with clear semantics.
- Task summary:
- Fixed left drawer height regression so STEP / Trajectory / Live Charts no longer stretch to full-height empty space.
- Kept Weld Planning in its current full-height behavior.
- Changes:
- Updated
web-ui/src/components/SidebarDrawer.tsx:- added panel-aware
heightModeprop (content|full), - kept shared overlay lane (
top-6 bottom-6) but switched shell sizing:full=>h-full(for dense Weld panel),content=>max-h-full(for sparse panels),
- moved pointer events to panel shell (
pointer-events-noneon wrapper,pointer-events-autoon shell) so transparent overlay space does not block scene interaction.
- added panel-aware
- Updated
web-ui/src/App.tsx:- derived
activeDrawerHeightModefrom active panel (weld=>full, others =>content), - passed
heightModeintoSidebarDrawer.
- derived
- Updated
web-ui/design.md:- documented mixed drawer height policy: content-fit for STEP/Trajectory/Telemetry, full-height for Weld.
- Updated
- Validation:
- Frontend:
npm run -s buildpassed. - Lint check:
ReadLintsonweb-ui/src/components/SidebarDrawer.tsx,web-ui/src/App.tsx, andweb-ui/design.mdreported no issues.
- Frontend:
- Follow-up notes / risks:
- Do one live pass at narrow and wide viewport sizes to confirm click-through behavior in empty drawer-lane space feels correct.
- Task summary:
- Installed all repo-local skills from
.cursor/skillsinto Codex home skills. - Verified installed skills against the source skill set and AGENTS workflow expectations.
- Installed all repo-local skills from
- Changes:
- Installed the following skills into
C:\Users\angus\.codex\skills:agent-browsercanvas-designdevlog-loopfind-skillsfrontend-designlearning-scratchpad-loopnext-best-practicesnext-cache-componentsnext-upgradevercel-composition-patternsvercel-next-deployvercel-react-best-practicesvercel-react-native-skillsweb-design-guidelines
- Confirmed
.cursor/skills-cursordoes not exist in this repository snapshot.
- Installed the following skills into
- Validation:
- Compared source skill directories containing
SKILL.mdin.cursor/skillsagainstC:\Users\angus\.codex\skillsand found no missing installs. - Audit diff reported only expected extra preinstalled directory:
.system.
- Compared source skill directories containing
- Follow-up notes / risks:
- Newly installed skills are loaded on Codex startup; restart is required to pick them up in fresh sessions.
- Task summary:
- Fixed weld preview execution mismatch where robot run could follow sparse endpoint moves instead of the full interpolated weld path.
- Clarified UI wording so editable weld points are treated as control points, not every interpolated sample.
- Changes:
- Updated
web-ui/src/App.tsx:- added
weldPreviewCacheReadystate to track whether a fresh weld preview cache exists for run, - updated weld preview planning (
requestWeldPreview) to return planned preview data and mark cache readiness, - changed run behavior:
- non-weld trajectories continue
use_cache: false(re-plan from current state), - weld previews now execute with
use_cache: trueso runtime uses full high-fidelity planned steps instead of sparsemove_absoluteendpoints, - if weld cache is stale (e.g., restored program state), auto-refreshes weld preview before run and then executes cached plan,
- non-weld trajectories continue
- reset weld cache readiness in clear/disconnect/load flows to avoid stale-cache execution.
- renamed weld waypoint section title to
Editable Control Pointsand added helper text about interpolation.
- added
- Updated
web-ui/src/previewUtils.ts:- extended
TrajectoryFiletype with optionalweldmetadata, - enhanced program-root subtitle to show both move count and path sample count when available.
- extended
- Updated
- Validation:
- Frontend:
npm run -s buildpassed. - Lint check:
ReadLintsonweb-ui/src/App.tsxandweb-ui/src/previewUtils.tsreported no issues.
- Frontend:
- Follow-up notes / risks:
- Program tree still lists coarse operation moves; it now also shows path sample count, but a future pass could add an explicit “interpolated path” node for deeper inspectability.
- Task summary:
- Removed weld preview path downsampling and switched Program Tree to exact path-sample inspection.
- Kept coarse command metadata only as a secondary controller-command view.
- Changes:
- Updated
src/gradient_os/arm_controller/command_api.py:- removed cartesian path downsampling (
sample_stride) in planner payload assembly, - payload
cartesian_pathnow includes every planned cartesian sample for exact UI inspection.
- removed cartesian path downsampling (
- Updated
web-ui/src/previewUtils.ts:- refactored
buildProgramTreeto build from exactplan.pathPoints:- grouped view now includes
Exact Path Samples(full list, no trimming), - chronological view now centers on
Execution Path (Exact)using full path samples, - control points and controller commands are still present as separate groups for editing/diagnostics.
- grouped view now includes
- kept weld feature grouping and root subtitle counters.
- refactored
- Updated
- Validation:
- Frontend:
npm run -s buildpassed. - Backend syntax:
.venv\\Scripts\\python.exe -m py_compile src\\gradient_os\\arm_controller\\command_api.pypassed. - Lint check:
ReadLintsonweb-ui/src/previewUtils.ts,web-ui/src/App.tsx, andsrc/gradient_os/arm_controller/command_api.pyreported no issues.
- Frontend:
- Follow-up notes / risks:
- Very long paths now produce large tree node counts; if UI responsiveness drops on extreme programs, add virtualized rendering rather than reintroducing path trimming.
- Task summary:
- Tightened Program Tree fidelity rules so it no longer uses approximate weld-segment path ranges.
- Kept controller command rows strictly as reference metadata when exact path samples are available.
- Changes:
- Updated
web-ui/src/previewUtils.ts:- removed
estimatePathRangehelper usage for weld segments to avoid proportional/approximate path highlighting, - weld feature nodes now focus only the selected edge (
weldSegmentEdgeId) instead of inferred path range, - simplified command-group logic:
- with exact path samples: show
Controller Commands (Reference), - without exact path samples: show
Controller Commands.
- with exact path samples: show
- removed
- Updated
- Validation:
- Frontend:
npm run -s buildpassed. - Lint check:
ReadLintsonweb-ui/src/previewUtils.tsandweb-ui/src/App.tsxreported no issues.
- Frontend:
- Follow-up notes / risks:
- Tree now avoids misleading approximations; if users want per-segment exact ranges, backend should emit explicit section/sample index mapping in planner payload.
- Task summary:
- Removed waypoint-edit controls from the Weld drawer panel.
- Moved waypoint editing workflow into Program Tree so control-point changes are driven from tree selection.
- Changes:
- Updated
web-ui/src/App.tsx:- removed
Editable Control Pointssection and related props fromWeldPanel, - added Program Tree-driven waypoint state handlers:
- point coordinate edits,
- add/remove control point,
- apply edits (routes to weld replan for weld programs, generic point replan for non-weld plans),
- wired selected
control_point_*Program Tree node to tree-side editor context.
- removed
- Updated
web-ui/src/components/ProgramFeatureTree.tsx:- added inline control-point editor panel (x/y/z fields),
- added add/remove/apply controls for waypoint edits within Program Tree surface.
- Updated
- Validation:
- Frontend:
npm run -s buildpassed. - Lint check:
ReadLintsonweb-ui/src/App.tsx,web-ui/src/components/ProgramFeatureTree.tsx, andweb-ui/src/previewUtils.tsreported no issues.
- Frontend:
- Follow-up notes / risks:
- Editing now requires selecting a
Control Pointnode in Program Tree; if needed, we can add a subtle hint banner when no control point is selected.
- Editing now requires selecting a
- Task summary:
- Aligned Program Tree selection behavior with weld editing workflow after migrating controls to the tree.
- Changes:
- Updated
web-ui/src/previewUtils.ts:- control-point/path/command nodes now target
openPanel: "weld"when current plan carries weld metadata, - preserves
openPanel: "trajectory"for non-weld plans.
- control-point/path/command nodes now target
- Updated
- Validation:
- Frontend:
npm run -s buildpassed. - Lint check:
ReadLintsonweb-ui/src/previewUtils.ts,web-ui/src/App.tsx, andweb-ui/src/components/ProgramFeatureTree.tsxreported no issues.
- Frontend:
- Follow-up notes / risks:
- If users prefer tree selection to never change side panel at all, add a setting to disable panel auto-switch on tree node select.
- Task summary:
- Reduced yellow preview waypoint spheres to match requested small visual footprint (~1mm radius).
- Changes:
- Updated
web-ui/src/ArmVisualizer.tsx:- changed preview marker geometry radius from
0.008to0.001meters in the path/waypoint marker rendering block.
- changed preview marker geometry radius from
- Updated
- Validation:
- Frontend:
npm run -s buildpassed. - Lint check:
ReadLintsonweb-ui/src/ArmVisualizer.tsxreported no issues.
- Frontend:
- Follow-up notes / risks:
- At certain zoom levels 1mm markers may become hard to see; if needed, add a user-configurable marker size slider later.
- Task summary:
- Fixed weld
return_to_startbehavior to reliably use the robot’s current pre-weld pose for each run.
- Fixed weld
- Changes:
- Updated
web-ui/src/App.tsx:- changed weld run flow in
handleRunPreviewto always refresh weld preview plan immediately before/trajectory/run, - keeps execution on cached high-fidelity steps (
use_cache: true) after refresh, but with a run-current start context.
- changed weld run flow in
- This ensures backend planner captures current start pose each run, so
return_to_startno longer targets stale or weld-start positions from older plans.
- Updated
- Validation:
- Frontend:
npm run -s buildpassed. - Lint check:
ReadLintsonweb-ui/src/App.tsxreported no issues.
- Frontend:
- Follow-up notes / risks:
- Weld run now always incurs replan latency before execution; acceptable for correctness, but can be optimized later if needed.
- Task summary:
- Fixed a weld execution-state race that could cause jitter/contending motion loops during preview playback.
- Added a hard jog shutdown before trajectory runs so realtime jog cannot interfere with weld path execution.
- Changes:
- Updated
src/gradient_os/arm_controller/trajectory_execution.py:- added
owns_trajectory_stateguard to_open_loop_executor_threadand_closed_loop_executor_thread, - prevented nested per-step executor calls from clearing global trajectory state (
is_running,thread) mid-run, - updated
_execute_joint_pathto run open-loop withowns_trajectory_state=Falsefor sub-step execution.
- added
- Updated
src/gradient_os/arm_controller/command_api.py:- in
handle_run_trajectory, force-stop active jog mode before starting trajectory execution, - abort run if jog mode cannot be stopped cleanly.
- in
- Updated
- Validation:
- Backend syntax:
& ".\.venv\Scripts\python.exe" -m py_compile "src/gradient_os/arm_controller/trajectory_execution.py" "src/gradient_os/arm_controller/command_api.py"passed. - Lint check:
ReadLintsonsrc/gradient_os/arm_controller/trajectory_execution.pyandsrc/gradient_os/arm_controller/command_api.pyreported no issues.
- Backend syntax:
- Follow-up notes / risks:
- Requires runtime verification in
run-sim+run-apiwith weld preview to confirm jitter and return behavior are fully resolved in motion playback.
- Requires runtime verification in
- Task summary:
- Captured operator runtime validation after restart: weld path now executes correctly without prior jitter/snap behavior.
- Confirmed likely primary fix was the execution-state lifecycle patch; jog-stop guard retained as safety hardening.
- Changes:
- No additional code changes in this step.
- Updated engineering notes based on user validation feedback.
- Validation:
- User-reported live run outcome: "seems to be working now."
- User confirmed issue had also reproduced previously with jog disabled, supporting execution-state race as root cause.
- Follow-up notes / risks:
- Keep jog-stop pre-run guard in place as defense-in-depth even if not primary root cause in this incident.
- Task summary:
- Added/updated repository-facing README documentation for merge to
main. - Prepared a merge-ready commit message for the current branch changes.
- Added/updated repository-facing README documentation for merge to
- Changes:
- Added new root
README.mdwith:- project overview,
- quick start commands (including Windows
.ps1launchers), - current weld workflow behavior notes (exact path samples, return-to-start semantics, execution stability guards),
- pointers to docs and web UI guidance.
- Updated
web-ui/README.mdfrom legacy early-stage description to current production capabilities:- scene/telemetry, trajectory and weld planning, Program Tree exact-path behavior, and operational notes.
- Added new root
- Validation:
- Lint check:
ReadLintsonREADME.mdandweb-ui/README.mdreported no issues.
- Lint check:
- Follow-up notes / risks:
- If release process requires it, align any duplicated quick-start wording between
README.md,AGENTS.md, anddocs/README.mdin a later docs-only cleanup.
- If release process requires it, align any duplicated quick-start wording between
- Task summary:
- Updated
docs/README.md(the main repository README target used by this project) with a branch-highlights summary forSTEP_LOADER. - Prepared a comprehensive merge commit message covering full branch scope.
- Updated
- Changes:
- Updated
docs/README.md:- added a
STEP_LOADER Branch Highlightssection, - documented CAD topology + weld pipeline additions,
- documented trajectory execution correctness fixes (including execution-state lifecycle guard behavior),
- documented Web UI upgrades (STEP/weld/program tree/exact path visibility),
- documented platform/dev workflow updates (Windows launchers, API tests).
- added a
- Updated
- Validation:
- Lint check:
ReadLintsondocs/README.mdreported no issues. - Verified branch scope context using:
git log --oneline master..HEADgit diff --stat master..HEAD
- Lint check:
- Follow-up notes / risks:
- Docs now include both long-form architecture and branch summary; if desired later, split release notes into a dedicated changelog section.
- Task summary:
- Reworked
docs/README.mdinto a clean newcomer onboarding document focused on features, architecture, and practical usage. - Removed release-note style framing and replaced with user/operator starting guidance.
- Reworked
- Changes:
- Rewrote
docs/README.md:- clear "what GradientOS provides" section,
- runtime architecture and data-flow summary,
- Linux/macOS and Windows quick-start/run instructions,
- first-run operator workflow for Web UI,
- motion/weld behavior notes,
- project layout + documentation map + troubleshooting.
- Rewrote
- Validation:
- Lint check:
ReadLintsondocs/README.mdreported no issues.
- Lint check:
- Follow-up notes / risks:
- If needed, older deep-dive narrative content can be moved into dedicated per-subsystem docs to keep this entrypoint concise.
- Task summary:
- Fixed broken diagram rendering in
docs/README.md.
- Fixed broken diagram rendering in
- Changes:
- Rewrote all Mermaid blocks to strict minimal syntax:
- switched flow diagrams to
flowchart TD, - removed HTML tags and complex labels in nodes/notes,
- simplified sequence diagram participant labels and event text.
- switched flow diagrams to
- Rewrote all Mermaid blocks to strict minimal syntax:
- Validation:
- Lint check:
ReadLintsondocs/README.mdreported no issues.
- Lint check:
- Follow-up notes / risks:
- None.