From ffade3bad773c655a97f51ba0580604010fefc29 Mon Sep 17 00:00:00 2001 From: Codex Date: Wed, 20 May 2026 17:18:23 +0800 Subject: [PATCH] Fix Chinese i18n workbench controls --- SESSION.md | 1 + TASKS.md | 1 + ...8n-overview-controls-zh-final-1366x768.png | Bin 0 -> 60369 bytes src/web/app.js | 2 +- src/web/i18n.js | 33 +++++++++++++++--- src/web/styles.css | 4 +-- tests/unit/test_api_static_server.py | 10 ++++++ 7 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 output/playwright/i18n-overview-controls-zh-final-1366x768.png diff --git a/SESSION.md b/SESSION.md index 3914f97..e3e6a24 100644 --- a/SESSION.md +++ b/SESSION.md @@ -804,6 +804,7 @@ Automation execution-layer PXX remains closed and its known scope stays frozen. - First real Trader Mode R2 use loop executed on 2026-05-20: used remote `/trader-mode` as the primary screen, observed `Observe Only: Watch Candidate #4610: FVG retrace`, and recorded a real `No Trade` action from the UI because Candidate `4610` remained `blocked` / `executable=false`. This correctly updated `shadow_paper_observations` instead of creating a fake paper ticket: `operator_feedback_count` increased from `1` to `2`, `shadow_observation_count` increased from `14` to `15`, while `paper_ticket_count=0` and `paper_execution_count=0` stayed unchanged. Saved after-close draft note `operator_notes.id=3` with scope `weekly_review_draft`; `/trading/journal/generate` returned `created=0`, so `weekly_review_entry_count` remains `0` until a real execution-derived journal entry exists. Evidence screenshot saved at `output/playwright/trader-mode-r2-real-use-loop-390x844.png`. Current R2 gate remains `paper_ticket_sample_gate`; do not mark R2 completed. - Trader Mode unified shell closure passed on 2026-05-20: `/trader-mode` now resolves to the same left-menu/right-workspace `index.html` shell instead of the standalone page, with the Trader Mode section active from the route and the sidebar `Trader Mode` tree item selected. The embedded Trader Mode surface keeps the fast-read status, live readout, fast queue, freshness, focus, action buttons, after-close draft, R2 evidence, and read-only boundary controls, while the generic workbench filter bar is hidden only for this section. `trader_mode.js` is scoped so it can run inside the workbench without leaking globals into `app.js`; keyboard shortcuts and auto-refresh are active only while the Trader Mode section is visible. Remote validation passed deploy smoke over 11 endpoints, gstack browser checks on `http://192.168.3.90:8000/trader-mode` (`bodySection=trader-mode`, active nav=`Trader Mode`, sidebar present, generic controls hidden, loaded status=`Observe Only`), `run_readonly_live_analysis_smoke.py`, and `run_remote_ops_smoke.py`. Evidence screenshot saved at `output/playwright/trader-mode-unified-shell-1366x768-loaded.png`. No change was made to `execution_allowed`, `decision_support_ready`, `real_live_ready`, risk governor, trust bucket, or operator confirmation protocol. - Frontend Chinese/English i18n closure passed on 2026-05-20: added shared `/static/i18n.js`, default locale `zh-CN`, persistent `ai_ict_locale_v1`, topbar language switchers on the workbench, standalone Trader Mode fallback page, and training page. `app.js`, `trader_mode.js`, and `training.js` now route dynamic `setText` output through the same translation layer, so both static shell labels and live Trader Mode status/readout labels can switch between Chinese and English without changing backend payloads. Mutation handling was hardened to avoid self-triggered translation loops during language changes. Remote validation confirmed default Chinese with no stored locale (`lang=zh-CN`, heading `AI ICT 交易工作台`, status `仅观察`, readout `为什么不交易`) and English switching (`lang=en`, heading `AI ICT Trading Workbench`, status `Observe Only`), with no browser console errors. Evidence screenshots saved at `output/playwright/i18n-trader-mode-zh-default-1366x768.png` and `output/playwright/i18n-trader-mode-en-1366x768.png`. Local validation passed i18n/app/trader/training JS syntax checks, focused static/read-only/operator tests, script static checks, full unit discovery (`789` tests), deploy smoke over 11 endpoints, `run_remote_ops_smoke.py`, and `run_readonly_live_analysis_smoke.py`. No change was made to `execution_allowed`, `decision_support_ready`, `real_live_ready`, risk governor, trust bucket, or operator confirmation protocol. +- Frontend i18n regression follow-up passed on 2026-05-20: fixed whitespace-preserving text-node translation so Chinese mode now translates top controls such as `Instrument ID`, `Timeframe`, `Limit`, `Auto Refresh`, `Execution Status`, `Session Focus`, `Trust Class`, and `Search` on `/trader-mode#overview`. The workbench active-section marker moved from `body[data-workbench-section]` to `body[data-active-workbench-section]` to avoid selector collisions with real content sections during browser automation and Trader Mode visibility checks. Added missing Chinese button labels for dynamic workbench actions including `Generate Active Plan`, `Run Watch`, `Risk Check`, `Cleanup Old Captures`, `Reconcile Real Trades`, `Cancel`, `Close`, `Sync`, note/review-packet buttons, and visual feedback buttons. Local validation passed `node --check src/web/app.js`, `node --check src/web/i18n.js`, 27 focused static/read-only/operator tests, secret static checks, script static checks, full unit discovery (`789` tests), and `git diff --check` with only LF/CRLF warnings. Live deploy completed with 11 deploy smoke endpoints; `run_remote_ops_smoke.py` and `run_readonly_live_analysis_smoke.py` passed, with `ready_for_readonly_live_analysis=true`, `must_not_trade=true`, and `submit_cancel_or_live_execution_called=false`. gstack browser automation cold-started `http://192.168.3.90:8000/trader-mode?verify=20260520b#overview`, confirmed `lang=zh-CN`, no old body selector collision, Chinese top controls, 17 left-menu pages navigable, no console errors, and clicked only safe `刷新` while skipping write/record/reconcile buttons to avoid polluting live state. Evidence screenshot saved at `output/playwright/i18n-overview-controls-zh-final-1366x768.png`. No change was made to `execution_allowed`, `decision_support_ready`, `real_live_ready`, risk governor, trust bucket, or operator confirmation protocol. - Current assisted-analysis next gate: keep R1/R2 focused on `decision_support_ready` trust/sample/quality evidence and shadow/paper/operator feedback collection. OKX trade-permission sandbox smoke is deferred until the project explicitly re-enters execution adapter or real-trading preparation. ## Exact Next Step diff --git a/TASKS.md b/TASKS.md index eb9bddf..bc7a94f 100644 --- a/TASKS.md +++ b/TASKS.md @@ -921,6 +921,7 @@ - [x] P0-5 minimal operations loop: `/trader-mode` supports one-click daily observation, operator agreement/disagreement/no-trade/more-evidence, and quick notes without requiring paper ticket samples - [x] Trader Mode usefulness compression: first screen and watchlist now answer why not to trade, what to watch next, why the unique focus matters, whether data is stale, and what to wait for when there is no candidate; remote deploy, ops smoke, read-only live analysis smoke, and 390/1366 gstack screenshots passed - [x] First real Trader Mode R2 usage loop: recorded UI `No Trade` for blocked Candidate #4610, increased operator feedback from 1 to 2, saved after-close draft note, and verified paper ticket/execution/weekly journal counts were not fabricated +- [x] Frontend i18n regression follow-up: Chinese mode now translates whitespace-padded top controls on `/trader-mode#overview`, dynamic workbench buttons such as `Run Watch` / `Risk Check` / `Reconcile Real Trades`, and active-section automation no longer collides with body attributes; deploy smoke, remote ops smoke, read-only live smoke, and 17-page gstack browser click audit passed - [ ] R2 paper-ticket sample gate is waiting on a real executable candidate; do not fabricate paper tickets from blocked candidates - [ ] R2 operator feedback sample gate still needs at least 3 more real feedback samples (`operator_feedback_count=2/5`) - [ ] R2 weekly review visible gate still needs a real execution-derived journal/weekly review entry (`weekly_review_entry_count=0`) diff --git a/output/playwright/i18n-overview-controls-zh-final-1366x768.png b/output/playwright/i18n-overview-controls-zh-final-1366x768.png new file mode 100644 index 0000000000000000000000000000000000000000..927b621cd683debac16e93d150cb80d44e56a064 GIT binary patch literal 60369 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 C&bHJ5 literal 0 HcmV?d00001 diff --git a/src/web/app.js b/src/web/app.js index 71469ce..d28285b 100644 --- a/src/web/app.js +++ b/src/web/app.js @@ -192,7 +192,7 @@ function activateWorkbenchSection(sectionId, options = {}) { section.classList.toggle('is-active', isActive); section.toggleAttribute('hidden', !isActive); }); - document.body.dataset.workbenchSection = activeId; + document.body.dataset.activeWorkbenchSection = activeId; workbenchNavButtons.forEach((button) => { const isActive = button.dataset.workbenchTarget === activeId; button.classList.toggle('is-active', isActive); diff --git a/src/web/i18n.js b/src/web/i18n.js index 2965044..39c554b 100644 --- a/src/web/i18n.js +++ b/src/web/i18n.js @@ -37,6 +37,25 @@ 'Trust Class': '信任分组', 'Search': '搜索', 'Refresh': '刷新', + 'Generate Active Plan': '生成当前计划', + 'Run Watch': '运行观察', + 'Run Observe': '运行观察', + 'Run Confirm Check': '运行确认检查', + 'Risk Check': '风险检查', + 'Confirm': '确认', + 'Paper Execute': '纸面执行', + 'Semi-Auto Submit': '半自动提交', + 'Reconcile Real Trades': '对账真实成交', + 'Cleanup Old Captures': '清理旧截图', + 'Generate Journal': '生成日志', + 'Generate Review Packet': '生成复核包', + 'Generate Journal Backfill': '生成日志回填', + 'Save Note': '保存备注', + 'Prefill Focus Note': '预填焦点备注', + 'Useful': '有用', + 'Misleading': '误导', + 'Actionable': '可执行', + 'Capture Feedback': '记录反馈', 'All': '全部', 'All Sessions': '全部时段', 'Whitelist': '白名单', @@ -47,6 +66,9 @@ 'Pending': '待处理', 'Rejected': '已拒绝', 'Cancelled': '已取消', + 'Cancel': '取消', + 'Close': '关闭', + 'Sync': '同步', 'Filters: none': '筛选:无', 'Loading workspace...': '正在加载工作台...', 'Loading Trader Mode...': '正在加载交易员模式...', @@ -238,12 +260,15 @@ function translateText(value, locale = currentLocale) { const source = value == null ? '' : String(value); if (locale === 'en' || !source.trim()) return source; - const exact = zhExact[source.trim()]; - if (exact && source.trim() === source) return exact; + const leading = source.match(/^\s*/)?.[0] || ''; + const trailing = source.match(/\s*$/)?.[0] || ''; + const core = source.slice(leading.length, source.length - trailing.length); + const exact = zhExact[core]; + if (exact) return `${leading}${exact}${trailing}`; for (const [pattern, replacement] of zhPatterns) { - if (pattern.test(source)) return applyPhraseTranslations(source.replace(pattern, replacement)); + if (pattern.test(core)) return `${leading}${applyPhraseTranslations(core.replace(pattern, replacement))}${trailing}`; } - return applyPhraseTranslations(source); + return `${leading}${applyPhraseTranslations(core)}${trailing}`; } function setDocumentLanguage() { diff --git a/src/web/styles.css b/src/web/styles.css index d775875..3070173 100644 --- a/src/web/styles.css +++ b/src/web/styles.css @@ -176,8 +176,8 @@ body { .workbench-content { min-width: 0; } -body[data-workbench-section="trader-mode"] #workbenchContent > .controls, -body[data-workbench-section="trader-mode"] #workbenchContent > .filters-bar { +body[data-active-workbench-section="trader-mode"] #workbenchContent > .controls, +body[data-active-workbench-section="trader-mode"] #workbenchContent > .filters-bar { display: none; } .workbench-content .controls, diff --git a/tests/unit/test_api_static_server.py b/tests/unit/test_api_static_server.py index 041be73..e0d9927 100644 --- a/tests/unit/test_api_static_server.py +++ b/tests/unit/test_api_static_server.py @@ -157,6 +157,7 @@ class ApiStaticServerTests(unittest.TestCase): "initializeWorkbenchNavigation", "getPathWorkbenchSection", "workbench-section-change", + "activeWorkbenchSection", "aiIctActiveWorkbenchSection", "request_timeout", "AbortController", @@ -167,6 +168,7 @@ class ApiStaticServerTests(unittest.TestCase): ".workbench-sidebar", ".workbench-nav button.is-active", ".workspace-section.is-active", + "data-active-workbench-section", ".language-switcher", ): self.assertIn(expected, styles_css) @@ -188,8 +190,16 @@ class ApiStaticServerTests(unittest.TestCase): "仅观察", "不要使用", "只读实盘分析", + "Generate Active Plan", + "Run Watch", + "Reconcile Real Trades", + "Cleanup Old Captures", + "'Cancel':", + "'Sync':", "ai_ict_locale_v1", "ai-ict-locale-change", + "const core = source.slice(leading.length", + "zhExact[core]", ): self.assertIn(expected, i18n_js)