- Client-side buildHTML() replaces server-side Jinja loop rendering
- Greedy lane assignment algorithm (assignLanes) to prevent segment overlap
- assignEventLanes for detached events stacking
- Wheel zoom with cursor-position anchor; drag pan with user-select:none
- Bucket-based positioning: startOfBucket/nextBucket/bucketDelta for precision
- Events positioned on parent segment track lane; detached events in separate row
- resolveScale with explicit ?scale= URL param support
- Backend: add bucket_origin, track, parent_entry_id, parent_track to JSON data
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Add docking_log_list and docking_log_delete routes with dedicated page
- _append_docking_log: detect existing state interval before creating new entry
- _append_undocking_log: find entry by node title+at_time, accept docked_at param
- Fix _entry_state_label and _entry_location to return time-correct values
- Add api_set_sim_time POST endpoint; remove sim_time from all url_for() calls
- _resolve_simulation_time simplified to DB-only (no URL param)
- app.js: add openModal/closeModal/toggleTheme helpers
- base.html: add 对接日志管理 nav item, remove Today button
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Templates:
- mission_timeline_preview: client-side rendering with lane stacking, wheel zoom,
drag pan, percentage-based layout, event dedup, scale labels
- asset_detail: dock/undock modals with time selection, future event warning,
Mission Label column replacing Location/State
- asset_entry_form: all_locations expanded to 72 items (draft board hierarchy),
all_states dynamic from DB, event point dropdown uses same list
- Remove sim_time from all template url_for links
- base.html: remove Today button
JS:
- app.js: sim_time controls use POST /api/v1/sim-time API instead of URL param
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Backend changes:
- Add api_asset_dock with custom dock_time support
- Add api_asset_undock with delete_future/edit_future actions
- Add _append_docking_log, _append_undocking_log, _remove_undocking_log helpers
- Fix _entry_state_label to return time-correct most recent state
- Fix _entry_location to return time-correct most recent location
- Add _all_state_labels() merging DB labels with defaults for dropdown
- Add api_set_sim_time POST endpoint
- Remove sim_time from all url_for() calls
- Simplify _resolve_simulation_time to DB-only (no URL param)
- Update _build_docking_summary to return event_id and undocked_at
- Add location_list to timeline filters (draft board hierarchy)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>