chore: rebuild release package
This commit is contained in:
@@ -48,3 +48,9 @@
|
||||
- Firefox `ui.prefersReducedMotion=1` 时:`animation-name: none`、`opacity: 1`、`transform: none`,图标仍正常显示且无描边。
|
||||
- 1672×941、1440×900、500×844、390×844 均检查短计划与 12 图标长计划;标题、长计划和页面横向溢出量均为 0。
|
||||
- 两枚 PNG、manifest、CSS、JS 均返回 HTTP 200;专项、暗金主题、旧 Warframe 主题与全量回归均通过。
|
||||
|
||||
## 最终完成态同步修复
|
||||
|
||||
- 问题:展开列表使用最新 `result`,标题原先优先读取旧 `meta.progress`,会出现列表全部勾选但最后一个图标仍未点亮。
|
||||
- 修复:标题进度来源调整为 `result → input → meta`;无法解析最新结果时仍保留兼容回退。
|
||||
- Firefox 复现数据:`meta/input=7/8`、`result=8/8`;最终解析为 `8/8`,DOM 生成 8 个 `.is-complete`、0 个 `.is-remaining`,横向溢出为 0。
|
||||
|
||||
Binary file not shown.
@@ -6519,7 +6519,8 @@
|
||||
|
||||
function resolveToolPlanProgress(tool) {
|
||||
if (toolKind(tool) !== 'todo_list') return null;
|
||||
const candidates = [tool?.meta?.progress, tool?.input, tool?.result];
|
||||
// result 是展开列表实际使用的最新快照;meta/input 可能仍停留在上一轮更新。
|
||||
const candidates = [tool?.result, tool?.input, tool?.meta?.progress];
|
||||
for (const candidate of candidates) {
|
||||
const progress = planProgressFromPayload(candidate);
|
||||
if (progress) return progress;
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
document.documentElement.dataset.dividerTime = dividerTime;
|
||||
})();
|
||||
</script>
|
||||
<link rel="stylesheet" href="style.css?v=20260720-plan-progress-icons">
|
||||
<link rel="stylesheet" href="style.css?v=20260720-plan-progress-final-state">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css">
|
||||
</head>
|
||||
<body>
|
||||
@@ -183,6 +183,6 @@
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/12.0.1/marked.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.9.1/mermaid.min.js"></script>
|
||||
<script src="app.js?v=20260720-plan-progress-icons"></script>
|
||||
<script src="app.js?v=20260720-plan-progress-final-state"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -618,8 +618,8 @@ function assertFrontendSidebarCollapseContract() {
|
||||
'Rich themes should provide isolated rail treatments on top of the shared semantic fallback'
|
||||
);
|
||||
assert(
|
||||
indexSource.includes('style.css?v=20260720-plan-progress-icons')
|
||||
&& indexSource.includes('app.js?v=20260720-plan-progress-icons'),
|
||||
indexSource.includes('style.css?v=20260720-plan-progress-final-state')
|
||||
&& indexSource.includes('app.js?v=20260720-plan-progress-final-state'),
|
||||
'Sidebar interaction assets should share the reviewed cache-busting version'
|
||||
);
|
||||
}
|
||||
@@ -839,6 +839,18 @@ function assertPlanListProgressContract() {
|
||||
})) === JSON.stringify({ completed: 3, total: 5 }),
|
||||
'Todo tool summaries should resolve progress from runtime metadata'
|
||||
);
|
||||
assert(
|
||||
JSON.stringify(progressApi.resolveToolPlanProgress({
|
||||
kind: 'todo_list',
|
||||
meta: { progress: { completed: 7, total: 8 } },
|
||||
input: { progress: { completed: 7, total: 8 } },
|
||||
result: JSON.stringify({
|
||||
type: 'todo_list',
|
||||
items: Array.from({ length: 8 }, () => ({ completed: true })),
|
||||
}),
|
||||
})) === JSON.stringify({ completed: 8, total: 8 }),
|
||||
'Latest todo result should override stale meta and input progress so the final icon lights up'
|
||||
);
|
||||
assert(progressApi.resolveToolPlanProgress({ kind: 'command_execution' }) === null, 'Non-plan tools should not render plan progress');
|
||||
|
||||
const sent = [];
|
||||
@@ -930,8 +942,8 @@ function assertPlanListProgressContract() {
|
||||
assert(extractorSource.includes('references/source-assets/wasteland-icon-sheet.webp'), 'Plan progress extractor should read the archived source sheet');
|
||||
assert(!extractorSource.includes('sessions/_attachments'), 'Plan progress extractor should not depend on temporary session attachments');
|
||||
|
||||
assert(indexSource.includes('style.css?v=20260720-plan-progress-icons'), 'Plan progress CSS should use the current cache-busted URL');
|
||||
assert(indexSource.includes('app.js?v=20260720-plan-progress-icons'), 'Plan progress frontend logic should use the current cache-busted URL');
|
||||
assert(indexSource.includes('style.css?v=20260720-plan-progress-final-state'), 'Plan progress CSS should use the current cache-busted URL');
|
||||
assert(indexSource.includes('app.js?v=20260720-plan-progress-final-state'), 'Plan progress frontend logic should use the current cache-busted URL');
|
||||
}
|
||||
|
||||
function assertFrontendGildedThemeContract() {
|
||||
@@ -1046,8 +1058,8 @@ function assertFrontendGildedThemeContract() {
|
||||
assert(contrast('#655446', '#fff7ea') >= 4.5, 'Gilded muted text should remain readable on ivory panels');
|
||||
assert(contrast('#fff7ea', '#7a3f20') >= 7, 'Gilded primary action text should reach AAA contrast on copper');
|
||||
assert(themeStyle.includes('@media (prefers-reduced-motion: reduce)'), 'Gilded theme motion should respect reduced-motion preferences');
|
||||
assert(indexSource.includes('style.css?v=20260720-plan-progress-icons'), 'Theme bundle stylesheet should use the current cache-busted asset URL');
|
||||
assert(indexSource.includes('app.js?v=20260720-plan-progress-icons'), 'Theme bundle app script should use the current cache-busted asset URL');
|
||||
assert(indexSource.includes('style.css?v=20260720-plan-progress-final-state'), 'Theme bundle stylesheet should use the current cache-busted asset URL');
|
||||
assert(indexSource.includes('app.js?v=20260720-plan-progress-final-state'), 'Theme bundle app script should use the current cache-busted asset URL');
|
||||
}
|
||||
|
||||
function assertFrontendWastelandThemeContract() {
|
||||
@@ -1300,8 +1312,8 @@ function assertFrontendWastelandThemeContract() {
|
||||
assert(contrast('#c9bda6', backgroundColor) >= 4.5, `Wasteland muted text should reach AA contrast on ${backgroundColor}`);
|
||||
});
|
||||
|
||||
assert(indexSource.includes('style.css?v=20260720-plan-progress-icons'), 'Wasteland stylesheet should share the cache-busted theme bundle URL');
|
||||
assert(indexSource.includes('app.js?v=20260720-plan-progress-icons'), 'Wasteland registration should share the cache-busted theme bundle URL');
|
||||
assert(indexSource.includes('style.css?v=20260720-plan-progress-final-state'), 'Wasteland stylesheet should share the cache-busted theme bundle URL');
|
||||
assert(indexSource.includes('app.js?v=20260720-plan-progress-final-state'), 'Wasteland registration should share the cache-busted theme bundle URL');
|
||||
}
|
||||
|
||||
function assertFrontendCcwebPromptContract() {
|
||||
|
||||
Reference in New Issue
Block a user