- Auto-inject human-review gate when agent asks question but forgets gate entry
- Add complex_dev/complex_base field docs to program.md metric_diff table
- Fix submit_sft.sh minor issues
- jupyter_runtime improvements
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
SkillInsertDialog dispatches SKILL_TOGGLED_EVENT on user click.
AssistantWorkspace listens for that event to set applied state.
Completely eliminates poll-based state inference that caused flash.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Don't restore applied state from localStorage on mount (was causing
first-frame flash when skill was already enabled)
- Always start with applied=false; only set true on user click
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Track skill.loading → only trigger applied=true on user-initiated
skill enable (not on initial page load where skill was already on).
Clear stale localStorage applied state on load if skill is off.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Remove auto-detection from user message patterns and pipeline polling.
Panel now opens only when user explicitly enables model-iteration skill
via the UI button, and closes via "退出训练模式" or disabling the skill.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- submit_sft.sh: pure SFT submission, prints JobID and exits (no embedded watcher)
- submit_cml_eval.sh: pure CML eval, reads workflow_id/version from config.yaml
- jupyter_runtime write_text: rewrite to use Contents API instead of terminal websocket
- SKILL.md: restrict trigger to explicit UI click only
- program.md: update §5.2 docs to reflect two-script workflow
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>