Skip to content

Commit e483b38

Browse files
authored
fix: land topic brief parity and dompurify hardening (#140)
* fix: land topic brief parity and dompurify hardening * chore: align react and vite dependency maintenance * fix: align topic brief provider defaults * fix: tighten front door and operator UI surfaces * fix: bump basic-ftp override to patched release
1 parent 1d27887 commit e483b38

38 files changed

Lines changed: 1181 additions & 611 deletions

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ All notable changes to this repository will be documented in this file.
2020
of leaving those pages on scattered inspector phrasing
2121
- pinned transitive dashboard security fixes through the maintained pnpm
2222
override surfaces so `axios` now resolves to `1.15.0` and `basic-ftp` to
23-
`5.2.2` in both the root and dashboard lockfiles, clearing the live
23+
`5.3.0` in both the root and dashboard lockfiles, clearing the live
2424
Dependabot alert chain without widening into unrelated dependency upgrades
2525
- added a registry-shaped `manifest.yaml` for the repo-owned
2626
`openvibecoding-adoption-router` skill inside the coding-agent bundle, then

README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,9 @@ A clean first pass should let you:
103103

104104
For the public product story, the current official first proven workflow is
105105
[`news_digest`](https://xiaojiou176-open.github.io/OpenVibeCoding/use-cases/).
106-
`topic_brief` remains a public showcase and discovery lane, and it still does
107-
not belong to the repo-tracked public proof bundle until it has its own
108-
dedicated healthy proof summary, benchmark summary, and share-ready recap.
106+
`topic_brief` now has a tracked search-backed public proof bundle, but it is
107+
still not the official first public baseline and should not be described as
108+
equally release-proven with `news_digest`.
109109
`page_brief` now has a tracked browser-backed public proof bundle, but it is
110110
still not the official first public baseline and should not be described as
111111
equally release-proven with `news_digest`.
@@ -332,13 +332,13 @@ The current dashboard front door now surfaces all three public cases, while
332332
| Public case | Best for | Example input | Proof state |
333333
| --- | --- | --- | --- |
334334
| `news_digest` | the fastest proof-oriented public first run | one topic + 3 public domains + `24h` | **official first public baseline** |
335-
| `topic_brief` | a narrow topic brief with search-backed evidence | one topic + `7d` + max results | public showcase / discovery lane, not yet equally release-proven |
335+
| `topic_brief` | a narrow topic brief with search-backed evidence | one topic + `7d` + max results | tracked search-backed public proof bundle |
336336
| `page_brief` | one URL with browser-backed evidence | one URL + one focused summary request | tracked browser-backed public proof bundle |
337337

338338
For the first public release bundle, `news_digest` is the only official
339-
proof-oriented first-run baseline. `topic_brief` remains part of the broader
340-
public surface as a showcase / discovery path, and it still lacks its own
341-
dedicated healthy proof summary, benchmark summary, and share-ready recap.
339+
proof-oriented first-run baseline. `topic_brief` now has its own tracked
340+
search-backed public proof bundle, but it still should not be described as the
341+
official first baseline or as equally release-proven with `news_digest`.
342342
`page_brief` now has its own tracked browser-backed public proof bundle, but it
343343
still should not be described as the official first baseline or as equally
344344
release-proven with `news_digest`.

apps/dashboard/app/globals.feature.part04.css

Lines changed: 0 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -170,59 +170,13 @@
170170
display: block;
171171
}
172172

173-
.home-briefing-directive {
174-
border: 1px solid var(--color-border);
175-
border-radius: var(--radius-lg);
176-
background:
177-
linear-gradient(180deg, color-mix(in srgb, var(--color-bg-elevated) 98%, white), transparent),
178-
var(--color-surface-subtle);
179-
padding: var(--space-4) var(--space-5);
180-
display: grid;
181-
gap: var(--space-2);
182-
grid-template-columns: repeat(3, minmax(0, 1fr));
183-
}
184-
185-
.home-briefing-directive p,
186173
.planner-priority-summary,
187174
.compare-verdict-summary {
188175
color: color-mix(in srgb, var(--color-text-primary) 80%, var(--color-text-secondary));
189176
font-size: var(--text-sm);
190177
line-height: 1.6;
191178
}
192179

193-
.home-dispatch-item {
194-
display: grid;
195-
gap: var(--space-1);
196-
padding-left: var(--space-3);
197-
border-left: 1px solid color-mix(in srgb, var(--color-primary) 14%, var(--color-border));
198-
}
199-
200-
.home-dispatch-item:first-child {
201-
padding-left: 0;
202-
border-left: 0;
203-
}
204-
205-
.home-dispatch-kicker {
206-
font-family: var(--font-mono);
207-
font-size: var(--text-kicker);
208-
color: var(--color-text-muted);
209-
letter-spacing: 0.06em;
210-
text-transform: uppercase;
211-
}
212-
213-
.home-dispatch-title {
214-
font-size: 16px;
215-
line-height: 1.25;
216-
letter-spacing: -0.02em;
217-
}
218-
219-
.home-dispatch-desc {
220-
margin: 0;
221-
color: color-mix(in srgb, var(--color-text-primary) 74%, var(--color-text-secondary));
222-
font-size: 12px;
223-
line-height: 1.6;
224-
}
225-
226180
.home-briefing-actions,
227181
.planner-primary-actions {
228182
display: flex;
@@ -951,28 +905,12 @@
951905
grid-template-columns: 1fr;
952906
}
953907

954-
.home-briefing-directive {
955-
grid-template-columns: 1fr;
956-
}
957-
958908
.home-briefing-meter-row,
959909
.home-command-grid,
960910
.quick-grid--triage-spotlight {
961911
grid-template-columns: 1fr;
962912
}
963913

964-
.home-dispatch-item {
965-
padding-left: 0;
966-
border-left: 0;
967-
padding-top: var(--space-2);
968-
border-top: 1px solid color-mix(in srgb, var(--color-primary) 14%, var(--color-border));
969-
}
970-
971-
.home-dispatch-item:first-child {
972-
padding-top: 0;
973-
border-top: 0;
974-
}
975-
976914
.home-command-grid,
977915
.planner-empty-grid,
978916
.home-loop-rail {

apps/dashboard/app/globals.layout.part01.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -647,7 +647,7 @@
647647
}
648648

649649
.run-link {
650-
color: var(--color-primary);
650+
color: var(--color-success-ink);
651651
font-weight: 600;
652652
font-family: "SF Mono", "JetBrains Mono", ui-monospace, monospace;
653653
font-size: var(--text-sm);

apps/dashboard/components/DashboardHomeStorySections.tsx

Lines changed: 0 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -329,59 +329,6 @@ export default function DashboardHomeStorySections({
329329
detail: hasRunHistory ? "The homepage routes you; it does not replace proof." : "Write the request first, then let the truth rooms light up.",
330330
},
331331
];
332-
const dispatchBrief =
333-
locale === "zh-CN"
334-
? [
335-
{
336-
kicker: "现在发生什么",
337-
title: hasRunHistory ? `${runningCount} 条运行在推进` : "系统还在等待第一条运行",
338-
desc: hasRunHistory
339-
? "先读 tower,再决定是不是要切到 Workflow Case 或证明室。"
340-
: "先用第一条任务把 command loop 真的跑起来。",
341-
},
342-
{
343-
kicker: "先去哪一桌",
344-
title: failedCount > 0 ? "先去指挥塔或失败事件" : hasRunHistory ? "先去指挥塔" : "先去 PM 入口",
345-
desc: failedCount > 0
346-
? "先分诊高风险线,再考虑继续派发。"
347-
: hasRunHistory
348-
? "首页不是路由墙。先从主驾驶舱看全局。"
349-
: "先写请求,再让系统自己把后续房间点亮。",
350-
},
351-
{
352-
kicker: "为什么可信",
353-
title: hasRunHistory ? "Workflow + Proof 才算真相" : "先跑出第一条证据链",
354-
desc: hasRunHistory
355-
? "不要只看漂亮的首页卡片。真正可托底的是 Workflow Case 和 Proof & Replay。"
356-
: "没有第一条任务,就没有值得相信的 tower / workflow / proof 节奏。",
357-
},
358-
]
359-
: [
360-
{
361-
kicker: "What is live now",
362-
title: hasRunHistory ? `${runningCount} runs are moving` : "The system is still waiting for the first run",
363-
desc: hasRunHistory
364-
? "Read the tower first, then decide whether to branch into Workflow Cases or Proof."
365-
: "Run one real task so the command loop becomes a live system instead of a promise.",
366-
},
367-
{
368-
kicker: "Where to go first",
369-
title: failedCount > 0 ? "Start in Command Tower or Events" : hasRunHistory ? "Start in Command Tower" : "Start in PM intake",
370-
desc: failedCount > 0
371-
? "Triage the risky lane before you queue or promote anything else."
372-
: hasRunHistory
373-
? "This home page should not behave like a route wall. Start from the cockpit."
374-
: "Write the request first, then let the rest of the system light up around it.",
375-
},
376-
{
377-
kicker: "Why this is trustworthy",
378-
title: hasRunHistory ? "Workflow plus Proof is the truth path" : "Earn the first proof chain",
379-
desc: hasRunHistory
380-
? "Do not trust the homepage alone. Workflow Cases and Proof & Replay are where the operator truth actually hardens."
381-
: "Without one real task, the tower, workflow, and proof rooms are still only a shell.",
382-
},
383-
];
384-
385332
return (
386333
<>
387334
<header className="app-section">
@@ -404,15 +351,6 @@ export default function DashboardHomeStorySections({
404351
? "首页第一屏先回答四件事:你现在在哪、系统正在发生什么、哪里堵住了、下一步该进哪条操作路径。"
405352
: "The first screen should answer four questions immediately: where you are, what is happening now, what is blocked, and which surface to open next."}
406353
</p>
407-
<div className="home-briefing-directive" aria-label={locale === "zh-CN" ? "首页 dispatch brief" : "Homepage dispatch brief"}>
408-
{dispatchBrief.map((item) => (
409-
<div key={item.kicker} className="home-dispatch-item">
410-
<span className="home-dispatch-kicker">{item.kicker}</span>
411-
<strong className="home-dispatch-title">{item.title}</strong>
412-
<p className="home-dispatch-desc">{item.desc}</p>
413-
</div>
414-
))}
415-
</div>
416354
<nav aria-label="Home primary actions" className="home-briefing-actions">
417355
<Button asChild variant="default">
418356
<Link href={primaryActionHref} prefetch>{shellCopy.primaryAction}</Link>

apps/dashboard/package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@
2121
"axe-core": "4.11.1",
2222
"class-variance-authority": "0.7.1",
2323
"diff2html": "3.4.56",
24-
"dompurify": "3.3.3",
24+
"dompurify": "3.4.0",
2525
"is-wsl": "2.2.0",
2626
"next": "16.2.3",
2727
"playwright": "1.59.1",
28-
"react": "19.2.4",
29-
"react-dom": "19.2.4",
28+
"react": "19.2.5",
29+
"react-dom": "19.2.5",
3030
"styled-jsx": "5.1.7"
3131
},
3232
"devDependencies": {
@@ -45,7 +45,7 @@
4545
"pnpm": {
4646
"overrides": {
4747
"axios": "1.15.0",
48-
"basic-ftp": "5.2.2",
48+
"basic-ftp": "5.3.0",
4949
"brace-expansion@5": "5.0.5",
5050
"follow-redirects": "1.16.0",
5151
"lodash-es": "4.18.1",
@@ -55,7 +55,7 @@
5555
"picomatch@2": "2.3.2",
5656
"picomatch@4": "4.0.4",
5757
"rollup": "4.59.0",
58-
"vite": "8.0.5"
58+
"vite": "8.0.7"
5959
}
6060
}
6161
}

0 commit comments

Comments
 (0)