feat(task-board): refine running state indicator
This commit is contained in:
@@ -466,6 +466,24 @@ async function main() {
|
||||
assert(/grid-auto-columns:/.test(css), '看板列数和宽度应动态生成');
|
||||
assert(css.includes(':focus-visible'), 'CSS 应提供键盘焦点样式');
|
||||
assert(css.includes('@media (prefers-reduced-motion: reduce)'), 'CSS 应尊重减少动态效果偏好');
|
||||
assert(
|
||||
css.includes("html[data-theme='wasteland'] .ccweb-task-board__card[data-runtime-state='running']::before")
|
||||
&& css.includes("html[data-theme='wasteland'] .ccweb-task-board__card[data-runtime-state='running']::after"),
|
||||
'暗金荒野运行卡片应保留左侧竖条和活动轨迹',
|
||||
);
|
||||
assert(
|
||||
!/html\[data-theme='wasteland'\] \.ccweb-task-board__card\[data-runtime-state='running'\]\s*\{/.test(css)
|
||||
&& !css.includes('@keyframes ccweb-task-board-wasteland-runtime-card'),
|
||||
'暗金荒野不得再给整张运行卡片添加背景、边框或呼吸泛光',
|
||||
);
|
||||
assert(
|
||||
css.includes('@keyframes ccweb-task-board-wasteland-runtime-tracer'),
|
||||
'暗金荒野运行卡片应提供独立的边缘活动轨迹',
|
||||
);
|
||||
assert(
|
||||
/@media \(prefers-reduced-motion: reduce\)[\s\S]*?\.ccweb-task-board__card\[data-runtime-state='running'\]::after\s*\{[^}]*animation:\s*none;/.test(css),
|
||||
'减少动态效果时左侧活动点必须停止移动',
|
||||
);
|
||||
assert(css.includes('.ccweb-task-tracking'), 'CSS 应覆盖可复用任务跟踪开关');
|
||||
assert(!source.includes('refs.board.replaceChildren'), '数据更新不得清空并重建整个看板');
|
||||
assert(source.includes('getBoundingClientRect'), '卡片移动应记录更新前后的几何位置');
|
||||
@@ -650,6 +668,10 @@ async function main() {
|
||||
assert.strictEqual(byClass(firstCard, 'ccweb-task-board__business-state').length, 0, '卡片不得渲染业务状态胶囊');
|
||||
assert.strictEqual(byAction(firstCard, 'set-status')[0].value, 'queue-x', '状态选择器应作为业务状态的唯一卡片入口');
|
||||
assert(firstCard.textContent.includes('运行:运行中'), '卡片应独立显示运行态');
|
||||
assert.strictEqual(firstTaskState.isRunning, true, '前端公开任务状态应保留服务端明确下发的运行布尔值');
|
||||
assert.strictEqual(firstCard.dataset.runtimeState, 'running', '运行卡片应暴露稳定的 data-runtime-state 契约');
|
||||
const idleCard = byClass(root, 'ccweb-task-board__card').find((card) => card.dataset.sessionId === 'session-three');
|
||||
assert.strictEqual(idleCard.dataset.runtimeState, 'idle', '未运行卡片应保持静态 idle 契约');
|
||||
assert.strictEqual(firstCard.textContent.includes('Agent Alpha'), false, '任务卡不得显示 Agent 运行器名称');
|
||||
assert(firstCard.textContent.includes('<img src=x onerror=alert(1)>'), '标题应作为纯文本保留');
|
||||
assert.strictEqual(walk(firstCard).some((node) => node.tagName === 'IMG'), false, '恶意标题不得解析成 DOM');
|
||||
|
||||
Reference in New Issue
Block a user