polish(settings): lift every surface to the 使用统计 bar — DataTable primitive, dense health/permission rows, dialect cleanup - #1274

Merged
jackwener merged 8 commits into
mainfrom
fix/polish-wave-table-language
Jul 20, 2026
Merged

polish(settings): lift every surface to the 使用统计 bar — DataTable primitive, dense health/permission rows, dialect cleanup#1274
jackwener merged 8 commits into
mainfrom
fix/polish-wave-table-language

Conversation

@jackwener

Copy link
Copy Markdown
Member

Campaign PR (goal: 其他的部分也要打磨和深度的优化&美化). One audit + two fix waves, accumulated on one branch.

The root fix

#1252's table language was deliberately page-local (single consumer). It now has multiple consumers → promoted to the DataTable primitive in @maka/ui (typed columns: numeric/grow; scoped th; hairline separators; tabular-nums right-aligned numerics). 使用统计 became a thin wrapper — pixel-faithful (class-identity preserved verbatim + new primitive-level tests).

Surfaces converged

  • 健康: bespoke tall signal blocks → dense hairline Item rows in one card; status exception-only (Healthy/Unknown neutral, Error red + Blocks-sending chip); meta single-line tabular-nums. Redundant gray intro banner (repeating the page title) → SectionHeader with badge/timestamp/refresh in the action slot.
  • 权限与能力: bespoke capability blocks + nested gray dl → dense rows with structured secondary lines; a11y names and diagnostics collapse preserved; the OS-row status stripe removed (fix(desktop): status-color restraint — expected states stop shouting green #651). Same intro-banner cleanup.
  • 关于/数据: the .settingsAboutPrivacy brand-blue callout dialect (third parallel callout language) killed — both sites onto SectionHeader + Alert; CSS deleted.
  • 模型: ProvidersPanel section headers onto SectionHeader (counts in the tabular slot, aria-labelledby kept).
  • Minors: search-modal pre-search hint → EmptyState; 开放网关 5-tile strip no longer orphans the fifth tile.

Process notes

  • Wave 1's sandbox couldn't produce pixel captures — it deliberately shipped only structurally-verifiable items and mapped the rest; wave 2 verified direct-CDP first, then shipped the visual redesigns with light+dark before/after evidence (maintainer-accepted).
  • One triage correction caught at merge: a gateway-contract failure earlier labeled pre-existing was actually a missed re-pin from the wave-1 class rename (aria semantics were intact; only the pinned class name changed) — fixed here with the corrected record.
  • Deferred with reasons: per-tab fixture captures need a VisualSmokeState initial-tab field (core type surgery — documented, not forced).

Gates (merged tree)

desktop 2751/2751 · ui 202/202 · typecheck · check-dead-css · knip ×2 · a11y/copy/console · alignment auditor all fixtures clean. ~10 contracts re-pinned across waves, none deleted. Audited AT-BAR surfaces (命令面板/定时任务/每日回顾/模型列表/连接详情) left untouched.

Promote the #1252 hairline table recipe out of usage-settings-page into a
shared DataTable primitive (@maka/ui) now that it has health + permission
consumers. The primitive owns the table markup: muted+medium scoped col
headers, first-cell-as-scoped-row-header, hairline row separators,
right-aligned tabular-nums numeric columns, and one grow column that absorbs
slack while the rest size to content on one line.
UsageStatsTable becomes a thin wrapper: it keeps the usage-local empty-tab
routing (EmptyState icon+copy) that a table primitive deliberately omits, and
delegates the non-empty branch to <DataTable>. Rendering is pixel-identical —
every utility class and the settingsUsageTable pin class are preserved.
Re-pin: the moved table markup is now guarded by packages/ui data-table.test
(renderToStaticMarkup); settings-usage-contract's stats-table assertions follow
the split — keep the wrapper's typed-column + EmptyState signature, assert
delegation to <DataTable>, and forbid a hand-rolled <table>.
The uppercase brand-blue h3 + brand-deep tinted card was a fourth section-
header voice, used by 关于's privacy card AND (confusingly) 数据's 配置导入
导出 header — the reason 数据's export section wore a blue header.
Converge both onto the sanctioned language:
- 关于 privacy → SectionHeader (as=h3) + Alert variant=passive holding the
privacy points (a quiet 'just so you know' callout; matches the passive
Alert language already on the data page's backup notice).
- 数据 config → SectionHeader (as=h3, configHelp as subtitle) over the form
controls, no card chrome (it's a form, not a callout).
Widen SectionHeader's `as` to accept h3 (a section under a page h2). Delete
the .settingsAboutPrivacy CSS block (incl. the green ::marker) for neutral
gap containers. Re-pin radius-converge (drop the stale selector) and
settings-app-info (name now scopes at the section) contracts.
- search-modal: route the pre-search guidance line through the shared
EmptyState inline primitive instead of a bare <p>, so the 'start typing'
hint uses the sanctioned empty-state language (keeps the placeholder pin
class so layout is unchanged).
- open-gateway: the posture strip has five metric tiles but reused the
four-column .settingsUsageSummary grid, orphaning the fifth on a second
row. Give it .settingsGatewaySummary — 5-up on wide, clean 3-up (3 + 2)
wrap when the pane narrows.
Each OS-permission row already shows its state as a Badge; the left-edge
status stripe (amber on 等待授权, red on 已拒绝) was a redundant second status
channel, and the amber stripe read as a standing alarm on an expected waiting
state. Remove both stripe rules and the now-orphaned position:relative anchor;
the row's Chip/text is the single state signal (the denied icon tint stays as
the one exception accent).
The 已连接 and 添加新连接 section titles were a bespoke flex header (bold h3
+ muted help + far-right count) — a fourth section-header dialect. Converge
both onto the shared SectionHeader primitive: title + subtitle, and the
connection count rides SectionHeader's count slot (tabular-nums baked in).
Extend SectionHeader with an optional titleId so the catalog section keeps
its aria-labelledby link. Delete the .providerRootHeader CSS family. Re-pin:
tabular-nums-converge (drop the removed selector, add a SectionHeader
primitive pin) and provider-navigation (catalog title now on SectionHeader
via titleId).
…ge rows
Polish wave (wave 2) — kill the bordered-block dialect on the Health and
Permission Center pages and the redundant gray intro banners.
- Item 2 (健康): HealthSignalRow bordered blocks -> shared Item row
primitive inside one hairline card; prose message + detail keep stacked
secondary lines, status is a squared Chip (exception-only color via its
tone scale), send/capability blockers are exception Chips. Meta on one
tabular-nums line. Deleted the bespoke .settingsHealthSignalRow* CSS.
- Item 3 (权限): CapabilityRow bordered blocks -> dense hairline-divided
rows in one card matching the OS permission list above; the nested gray
boxed .settingsCapabilityLayers dl becomes structured secondary lines
(no nested surface). readiness Badge -> Chip. Kept the dl + aria-label
and the diagnostics collapse.
- Item 5: the second gray-banner PageHeader on each page
(.settingsHealthIntro / .settingsPermissionIntro) restating the page
title -> SectionHeader; unique subtitle kept, badge/timestamp/refresh
moved into the action slot, banner chrome dropped.
Re-pins: radius-converge SELECTOR_TIER drops the retired
.settingsHealthIntro/.settingsPermissionIntro/.settingsCapabilityRow radius
entries and adds the new .settingsCapabilityList/.settingsHealthSignalList
card entries. roadmap-cleanup + capability-audit contracts unchanged.
Verified light+dark via direct CDP over settings-health / settings-permissions.
Gates: desktop main + @maka/ui suites, full typecheck, check-dead-css,
audit-alignment (settings-permissions clean) all green.
…ySummary
Wave 1 renamed the tile strip class (fixing the 4+1 orphan grid) and kept
role=group + aria-label, but the network-gateway contract's regexes pinned
the old settingsUsageSummary class name — the one re-pin the wave missed.
Also corrects the earlier triage: the failure was branch-caused, not
pre-existing on main.
@jackwener
jackwener merged commit 8079570 into mainJul 20, 2026
3 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jackwener
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

polish(settings): lift every surface to the 使用统计 bar — DataTable primitive, dense health/permission rows, dialect cleanup - #1274

Merged
jackwener merged 8 commits into
mainfrom
fix/polish-wave-table-language
Jul 20, 2026
Merged

polish(settings): lift every surface to the 使用统计 bar — DataTable primitive, dense health/permission rows, dialect cleanup#1274
jackwener merged 8 commits into
mainfrom
fix/polish-wave-table-language

Conversation

@jackwener

Copy link
Copy Markdown
Member

Campaign PR (goal: 其他的部分也要打磨和深度的优化&美化). One audit + two fix waves, accumulated on one branch.

The root fix

#1252's table language was deliberately page-local (single consumer). It now has multiple consumers → promoted to the DataTable primitive in @maka/ui (typed columns: numeric/grow; scoped th; hairline separators; tabular-nums right-aligned numerics). 使用统计 became a thin wrapper — pixel-faithful (class-identity preserved verbatim + new primitive-level tests).

Surfaces converged

  • 健康: bespoke tall signal blocks → dense hairline Item rows in one card; status exception-only (Healthy/Unknown neutral, Error red + Blocks-sending chip); meta single-line tabular-nums. Redundant gray intro banner (repeating the page title) → SectionHeader with badge/timestamp/refresh in the action slot.
  • 权限与能力: bespoke capability blocks + nested gray dl → dense rows with structured secondary lines; a11y names and diagnostics collapse preserved; the OS-row status stripe removed (fix(desktop): status-color restraint — expected states stop shouting green #651). Same intro-banner cleanup.
  • 关于/数据: the .settingsAboutPrivacy brand-blue callout dialect (third parallel callout language) killed — both sites onto SectionHeader + Alert; CSS deleted.
  • 模型: ProvidersPanel section headers onto SectionHeader (counts in the tabular slot, aria-labelledby kept).
  • Minors: search-modal pre-search hint → EmptyState; 开放网关 5-tile strip no longer orphans the fifth tile.

Process notes

  • Wave 1's sandbox couldn't produce pixel captures — it deliberately shipped only structurally-verifiable items and mapped the rest; wave 2 verified direct-CDP first, then shipped the visual redesigns with light+dark before/after evidence (maintainer-accepted).
  • One triage correction caught at merge: a gateway-contract failure earlier labeled pre-existing was actually a missed re-pin from the wave-1 class rename (aria semantics were intact; only the pinned class name changed) — fixed here with the corrected record.
  • Deferred with reasons: per-tab fixture captures need a VisualSmokeState initial-tab field (core type surgery — documented, not forced).

Gates (merged tree)

desktop 2751/2751 · ui 202/202 · typecheck · check-dead-css · knip ×2 · a11y/copy/console · alignment auditor all fixtures clean. ~10 contracts re-pinned across waves, none deleted. Audited AT-BAR surfaces (命令面板/定时任务/每日回顾/模型列表/连接详情) left untouched.

Promote the #1252 hairline table recipe out of usage-settings-page into a
shared DataTable primitive (@maka/ui) now that it has health + permission
consumers. The primitive owns the table markup: muted+medium scoped col
headers, first-cell-as-scoped-row-header, hairline row separators,
right-aligned tabular-nums numeric columns, and one grow column that absorbs
slack while the rest size to content on one line.
UsageStatsTable becomes a thin wrapper: it keeps the usage-local empty-tab
routing (EmptyState icon+copy) that a table primitive deliberately omits, and
delegates the non-empty branch to <DataTable>. Rendering is pixel-identical —
every utility class and the settingsUsageTable pin class are preserved.
Re-pin: the moved table markup is now guarded by packages/ui data-table.test
(renderToStaticMarkup); settings-usage-contract's stats-table assertions follow
the split — keep the wrapper's typed-column + EmptyState signature, assert
delegation to <DataTable>, and forbid a hand-rolled <table>.
The uppercase brand-blue h3 + brand-deep tinted card was a fourth section-
header voice, used by 关于's privacy card AND (confusingly) 数据's 配置导入
导出 header — the reason 数据's export section wore a blue header.
Converge both onto the sanctioned language:
- 关于 privacy → SectionHeader (as=h3) + Alert variant=passive holding the
privacy points (a quiet 'just so you know' callout; matches the passive
Alert language already on the data page's backup notice).
- 数据 config → SectionHeader (as=h3, configHelp as subtitle) over the form
controls, no card chrome (it's a form, not a callout).
Widen SectionHeader's `as` to accept h3 (a section under a page h2). Delete
the .settingsAboutPrivacy CSS block (incl. the green ::marker) for neutral
gap containers. Re-pin radius-converge (drop the stale selector) and
settings-app-info (name now scopes at the section) contracts.
- search-modal: route the pre-search guidance line through the shared
EmptyState inline primitive instead of a bare <p>, so the 'start typing'
hint uses the sanctioned empty-state language (keeps the placeholder pin
class so layout is unchanged).
- open-gateway: the posture strip has five metric tiles but reused the
four-column .settingsUsageSummary grid, orphaning the fifth on a second
row. Give it .settingsGatewaySummary — 5-up on wide, clean 3-up (3 + 2)
wrap when the pane narrows.
Each OS-permission row already shows its state as a Badge; the left-edge
status stripe (amber on 等待授权, red on 已拒绝) was a redundant second status
channel, and the amber stripe read as a standing alarm on an expected waiting
state. Remove both stripe rules and the now-orphaned position:relative anchor;
the row's Chip/text is the single state signal (the denied icon tint stays as
the one exception accent).
The 已连接 and 添加新连接 section titles were a bespoke flex header (bold h3
+ muted help + far-right count) — a fourth section-header dialect. Converge
both onto the shared SectionHeader primitive: title + subtitle, and the
connection count rides SectionHeader's count slot (tabular-nums baked in).
Extend SectionHeader with an optional titleId so the catalog section keeps
its aria-labelledby link. Delete the .providerRootHeader CSS family. Re-pin:
tabular-nums-converge (drop the removed selector, add a SectionHeader
primitive pin) and provider-navigation (catalog title now on SectionHeader
via titleId).
…ge rows
Polish wave (wave 2) — kill the bordered-block dialect on the Health and
Permission Center pages and the redundant gray intro banners.
- Item 2 (健康): HealthSignalRow bordered blocks -> shared Item row
primitive inside one hairline card; prose message + detail keep stacked
secondary lines, status is a squared Chip (exception-only color via its
tone scale), send/capability blockers are exception Chips. Meta on one
tabular-nums line. Deleted the bespoke .settingsHealthSignalRow* CSS.
- Item 3 (权限): CapabilityRow bordered blocks -> dense hairline-divided
rows in one card matching the OS permission list above; the nested gray
boxed .settingsCapabilityLayers dl becomes structured secondary lines
(no nested surface). readiness Badge -> Chip. Kept the dl + aria-label
and the diagnostics collapse.
- Item 5: the second gray-banner PageHeader on each page
(.settingsHealthIntro / .settingsPermissionIntro) restating the page
title -> SectionHeader; unique subtitle kept, badge/timestamp/refresh
moved into the action slot, banner chrome dropped.
Re-pins: radius-converge SELECTOR_TIER drops the retired
.settingsHealthIntro/.settingsPermissionIntro/.settingsCapabilityRow radius
entries and adds the new .settingsCapabilityList/.settingsHealthSignalList
card entries. roadmap-cleanup + capability-audit contracts unchanged.
Verified light+dark via direct CDP over settings-health / settings-permissions.
Gates: desktop main + @maka/ui suites, full typecheck, check-dead-css,
audit-alignment (settings-permissions clean) all green.
…ySummary
Wave 1 renamed the tile strip class (fixing the 4+1 orphan grid) and kept
role=group + aria-label, but the network-gateway contract's regexes pinned
the old settingsUsageSummary class name — the one re-pin the wave missed.
Also corrects the earlier triage: the failure was branch-caused, not
pre-existing on main.
@jackwener
jackwener merged commit 8079570 into mainJul 20, 2026
3 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jackwener
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

polish(settings): lift every surface to the 使用统计 bar — DataTable primitive, dense health/permission rows, dialect cleanup - #1274

Merged
jackwener merged 8 commits into
mainfrom
fix/polish-wave-table-language
Jul 20, 2026
Merged

polish(settings): lift every surface to the 使用统计 bar — DataTable primitive, dense health/permission rows, dialect cleanup#1274
jackwener merged 8 commits into
mainfrom
fix/polish-wave-table-language

Conversation

@jackwener

Copy link
Copy Markdown
Member

Campaign PR (goal: 其他的部分也要打磨和深度的优化&美化). One audit + two fix waves, accumulated on one branch.

The root fix

#1252's table language was deliberately page-local (single consumer). It now has multiple consumers → promoted to the DataTable primitive in @maka/ui (typed columns: numeric/grow; scoped th; hairline separators; tabular-nums right-aligned numerics). 使用统计 became a thin wrapper — pixel-faithful (class-identity preserved verbatim + new primitive-level tests).

Surfaces converged

  • 健康: bespoke tall signal blocks → dense hairline Item rows in one card; status exception-only (Healthy/Unknown neutral, Error red + Blocks-sending chip); meta single-line tabular-nums. Redundant gray intro banner (repeating the page title) → SectionHeader with badge/timestamp/refresh in the action slot.
  • 权限与能力: bespoke capability blocks + nested gray dl → dense rows with structured secondary lines; a11y names and diagnostics collapse preserved; the OS-row status stripe removed (fix(desktop): status-color restraint — expected states stop shouting green #651). Same intro-banner cleanup.
  • 关于/数据: the .settingsAboutPrivacy brand-blue callout dialect (third parallel callout language) killed — both sites onto SectionHeader + Alert; CSS deleted.
  • 模型: ProvidersPanel section headers onto SectionHeader (counts in the tabular slot, aria-labelledby kept).
  • Minors: search-modal pre-search hint → EmptyState; 开放网关 5-tile strip no longer orphans the fifth tile.

Process notes

  • Wave 1's sandbox couldn't produce pixel captures — it deliberately shipped only structurally-verifiable items and mapped the rest; wave 2 verified direct-CDP first, then shipped the visual redesigns with light+dark before/after evidence (maintainer-accepted).
  • One triage correction caught at merge: a gateway-contract failure earlier labeled pre-existing was actually a missed re-pin from the wave-1 class rename (aria semantics were intact; only the pinned class name changed) — fixed here with the corrected record.
  • Deferred with reasons: per-tab fixture captures need a VisualSmokeState initial-tab field (core type surgery — documented, not forced).

Gates (merged tree)

desktop 2751/2751 · ui 202/202 · typecheck · check-dead-css · knip ×2 · a11y/copy/console · alignment auditor all fixtures clean. ~10 contracts re-pinned across waves, none deleted. Audited AT-BAR surfaces (命令面板/定时任务/每日回顾/模型列表/连接详情) left untouched.

Promote the #1252 hairline table recipe out of usage-settings-page into a
shared DataTable primitive (@maka/ui) now that it has health + permission
consumers. The primitive owns the table markup: muted+medium scoped col
headers, first-cell-as-scoped-row-header, hairline row separators,
right-aligned tabular-nums numeric columns, and one grow column that absorbs
slack while the rest size to content on one line.
UsageStatsTable becomes a thin wrapper: it keeps the usage-local empty-tab
routing (EmptyState icon+copy) that a table primitive deliberately omits, and
delegates the non-empty branch to <DataTable>. Rendering is pixel-identical —
every utility class and the settingsUsageTable pin class are preserved.
Re-pin: the moved table markup is now guarded by packages/ui data-table.test
(renderToStaticMarkup); settings-usage-contract's stats-table assertions follow
the split — keep the wrapper's typed-column + EmptyState signature, assert
delegation to <DataTable>, and forbid a hand-rolled <table>.
The uppercase brand-blue h3 + brand-deep tinted card was a fourth section-
header voice, used by 关于's privacy card AND (confusingly) 数据's 配置导入
导出 header — the reason 数据's export section wore a blue header.
Converge both onto the sanctioned language:
- 关于 privacy → SectionHeader (as=h3) + Alert variant=passive holding the
privacy points (a quiet 'just so you know' callout; matches the passive
Alert language already on the data page's backup notice).
- 数据 config → SectionHeader (as=h3, configHelp as subtitle) over the form
controls, no card chrome (it's a form, not a callout).
Widen SectionHeader's `as` to accept h3 (a section under a page h2). Delete
the .settingsAboutPrivacy CSS block (incl. the green ::marker) for neutral
gap containers. Re-pin radius-converge (drop the stale selector) and
settings-app-info (name now scopes at the section) contracts.
- search-modal: route the pre-search guidance line through the shared
EmptyState inline primitive instead of a bare <p>, so the 'start typing'
hint uses the sanctioned empty-state language (keeps the placeholder pin
class so layout is unchanged).
- open-gateway: the posture strip has five metric tiles but reused the
four-column .settingsUsageSummary grid, orphaning the fifth on a second
row. Give it .settingsGatewaySummary — 5-up on wide, clean 3-up (3 + 2)
wrap when the pane narrows.
Each OS-permission row already shows its state as a Badge; the left-edge
status stripe (amber on 等待授权, red on 已拒绝) was a redundant second status
channel, and the amber stripe read as a standing alarm on an expected waiting
state. Remove both stripe rules and the now-orphaned position:relative anchor;
the row's Chip/text is the single state signal (the denied icon tint stays as
the one exception accent).
The 已连接 and 添加新连接 section titles were a bespoke flex header (bold h3
+ muted help + far-right count) — a fourth section-header dialect. Converge
both onto the shared SectionHeader primitive: title + subtitle, and the
connection count rides SectionHeader's count slot (tabular-nums baked in).
Extend SectionHeader with an optional titleId so the catalog section keeps
its aria-labelledby link. Delete the .providerRootHeader CSS family. Re-pin:
tabular-nums-converge (drop the removed selector, add a SectionHeader
primitive pin) and provider-navigation (catalog title now on SectionHeader
via titleId).
…ge rows
Polish wave (wave 2) — kill the bordered-block dialect on the Health and
Permission Center pages and the redundant gray intro banners.
- Item 2 (健康): HealthSignalRow bordered blocks -> shared Item row
primitive inside one hairline card; prose message + detail keep stacked
secondary lines, status is a squared Chip (exception-only color via its
tone scale), send/capability blockers are exception Chips. Meta on one
tabular-nums line. Deleted the bespoke .settingsHealthSignalRow* CSS.
- Item 3 (权限): CapabilityRow bordered blocks -> dense hairline-divided
rows in one card matching the OS permission list above; the nested gray
boxed .settingsCapabilityLayers dl becomes structured secondary lines
(no nested surface). readiness Badge -> Chip. Kept the dl + aria-label
and the diagnostics collapse.
- Item 5: the second gray-banner PageHeader on each page
(.settingsHealthIntro / .settingsPermissionIntro) restating the page
title -> SectionHeader; unique subtitle kept, badge/timestamp/refresh
moved into the action slot, banner chrome dropped.
Re-pins: radius-converge SELECTOR_TIER drops the retired
.settingsHealthIntro/.settingsPermissionIntro/.settingsCapabilityRow radius
entries and adds the new .settingsCapabilityList/.settingsHealthSignalList
card entries. roadmap-cleanup + capability-audit contracts unchanged.
Verified light+dark via direct CDP over settings-health / settings-permissions.
Gates: desktop main + @maka/ui suites, full typecheck, check-dead-css,
audit-alignment (settings-permissions clean) all green.
…ySummary
Wave 1 renamed the tile strip class (fixing the 4+1 orphan grid) and kept
role=group + aria-label, but the network-gateway contract's regexes pinned
the old settingsUsageSummary class name — the one re-pin the wave missed.
Also corrects the earlier triage: the failure was branch-caused, not
pre-existing on main.
@jackwener
jackwener merged commit 8079570 into mainJul 20, 2026
3 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jackwener
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

polish(settings): lift every surface to the 使用统计 bar — DataTable primitive, dense health/permission rows, dialect cleanup - #1274

Merged
jackwener merged 8 commits into
mainfrom
fix/polish-wave-table-language
Jul 20, 2026
Merged

polish(settings): lift every surface to the 使用统计 bar — DataTable primitive, dense health/permission rows, dialect cleanup#1274
jackwener merged 8 commits into
mainfrom
fix/polish-wave-table-language

Conversation

@jackwener

Copy link
Copy Markdown
Member

Campaign PR (goal: 其他的部分也要打磨和深度的优化&美化). One audit + two fix waves, accumulated on one branch.

The root fix

#1252's table language was deliberately page-local (single consumer). It now has multiple consumers → promoted to the DataTable primitive in @maka/ui (typed columns: numeric/grow; scoped th; hairline separators; tabular-nums right-aligned numerics). 使用统计 became a thin wrapper — pixel-faithful (class-identity preserved verbatim + new primitive-level tests).

Surfaces converged

  • 健康: bespoke tall signal blocks → dense hairline Item rows in one card; status exception-only (Healthy/Unknown neutral, Error red + Blocks-sending chip); meta single-line tabular-nums. Redundant gray intro banner (repeating the page title) → SectionHeader with badge/timestamp/refresh in the action slot.
  • 权限与能力: bespoke capability blocks + nested gray dl → dense rows with structured secondary lines; a11y names and diagnostics collapse preserved; the OS-row status stripe removed (fix(desktop): status-color restraint — expected states stop shouting green #651). Same intro-banner cleanup.
  • 关于/数据: the .settingsAboutPrivacy brand-blue callout dialect (third parallel callout language) killed — both sites onto SectionHeader + Alert; CSS deleted.
  • 模型: ProvidersPanel section headers onto SectionHeader (counts in the tabular slot, aria-labelledby kept).
  • Minors: search-modal pre-search hint → EmptyState; 开放网关 5-tile strip no longer orphans the fifth tile.

Process notes

  • Wave 1's sandbox couldn't produce pixel captures — it deliberately shipped only structurally-verifiable items and mapped the rest; wave 2 verified direct-CDP first, then shipped the visual redesigns with light+dark before/after evidence (maintainer-accepted).
  • One triage correction caught at merge: a gateway-contract failure earlier labeled pre-existing was actually a missed re-pin from the wave-1 class rename (aria semantics were intact; only the pinned class name changed) — fixed here with the corrected record.
  • Deferred with reasons: per-tab fixture captures need a VisualSmokeState initial-tab field (core type surgery — documented, not forced).

Gates (merged tree)

desktop 2751/2751 · ui 202/202 · typecheck · check-dead-css · knip ×2 · a11y/copy/console · alignment auditor all fixtures clean. ~10 contracts re-pinned across waves, none deleted. Audited AT-BAR surfaces (命令面板/定时任务/每日回顾/模型列表/连接详情) left untouched.

Promote the #1252 hairline table recipe out of usage-settings-page into a
shared DataTable primitive (@maka/ui) now that it has health + permission
consumers. The primitive owns the table markup: muted+medium scoped col
headers, first-cell-as-scoped-row-header, hairline row separators,
right-aligned tabular-nums numeric columns, and one grow column that absorbs
slack while the rest size to content on one line.
UsageStatsTable becomes a thin wrapper: it keeps the usage-local empty-tab
routing (EmptyState icon+copy) that a table primitive deliberately omits, and
delegates the non-empty branch to <DataTable>. Rendering is pixel-identical —
every utility class and the settingsUsageTable pin class are preserved.
Re-pin: the moved table markup is now guarded by packages/ui data-table.test
(renderToStaticMarkup); settings-usage-contract's stats-table assertions follow
the split — keep the wrapper's typed-column + EmptyState signature, assert
delegation to <DataTable>, and forbid a hand-rolled <table>.
The uppercase brand-blue h3 + brand-deep tinted card was a fourth section-
header voice, used by 关于's privacy card AND (confusingly) 数据's 配置导入
导出 header — the reason 数据's export section wore a blue header.
Converge both onto the sanctioned language:
- 关于 privacy → SectionHeader (as=h3) + Alert variant=passive holding the
privacy points (a quiet 'just so you know' callout; matches the passive
Alert language already on the data page's backup notice).
- 数据 config → SectionHeader (as=h3, configHelp as subtitle) over the form
controls, no card chrome (it's a form, not a callout).
Widen SectionHeader's `as` to accept h3 (a section under a page h2). Delete
the .settingsAboutPrivacy CSS block (incl. the green ::marker) for neutral
gap containers. Re-pin radius-converge (drop the stale selector) and
settings-app-info (name now scopes at the section) contracts.
- search-modal: route the pre-search guidance line through the shared
EmptyState inline primitive instead of a bare <p>, so the 'start typing'
hint uses the sanctioned empty-state language (keeps the placeholder pin
class so layout is unchanged).
- open-gateway: the posture strip has five metric tiles but reused the
four-column .settingsUsageSummary grid, orphaning the fifth on a second
row. Give it .settingsGatewaySummary — 5-up on wide, clean 3-up (3 + 2)
wrap when the pane narrows.
Each OS-permission row already shows its state as a Badge; the left-edge
status stripe (amber on 等待授权, red on 已拒绝) was a redundant second status
channel, and the amber stripe read as a standing alarm on an expected waiting
state. Remove both stripe rules and the now-orphaned position:relative anchor;
the row's Chip/text is the single state signal (the denied icon tint stays as
the one exception accent).
The 已连接 and 添加新连接 section titles were a bespoke flex header (bold h3
+ muted help + far-right count) — a fourth section-header dialect. Converge
both onto the shared SectionHeader primitive: title + subtitle, and the
connection count rides SectionHeader's count slot (tabular-nums baked in).
Extend SectionHeader with an optional titleId so the catalog section keeps
its aria-labelledby link. Delete the .providerRootHeader CSS family. Re-pin:
tabular-nums-converge (drop the removed selector, add a SectionHeader
primitive pin) and provider-navigation (catalog title now on SectionHeader
via titleId).
…ge rows
Polish wave (wave 2) — kill the bordered-block dialect on the Health and
Permission Center pages and the redundant gray intro banners.
- Item 2 (健康): HealthSignalRow bordered blocks -> shared Item row
primitive inside one hairline card; prose message + detail keep stacked
secondary lines, status is a squared Chip (exception-only color via its
tone scale), send/capability blockers are exception Chips. Meta on one
tabular-nums line. Deleted the bespoke .settingsHealthSignalRow* CSS.
- Item 3 (权限): CapabilityRow bordered blocks -> dense hairline-divided
rows in one card matching the OS permission list above; the nested gray
boxed .settingsCapabilityLayers dl becomes structured secondary lines
(no nested surface). readiness Badge -> Chip. Kept the dl + aria-label
and the diagnostics collapse.
- Item 5: the second gray-banner PageHeader on each page
(.settingsHealthIntro / .settingsPermissionIntro) restating the page
title -> SectionHeader; unique subtitle kept, badge/timestamp/refresh
moved into the action slot, banner chrome dropped.
Re-pins: radius-converge SELECTOR_TIER drops the retired
.settingsHealthIntro/.settingsPermissionIntro/.settingsCapabilityRow radius
entries and adds the new .settingsCapabilityList/.settingsHealthSignalList
card entries. roadmap-cleanup + capability-audit contracts unchanged.
Verified light+dark via direct CDP over settings-health / settings-permissions.
Gates: desktop main + @maka/ui suites, full typecheck, check-dead-css,
audit-alignment (settings-permissions clean) all green.
…ySummary
Wave 1 renamed the tile strip class (fixing the 4+1 orphan grid) and kept
role=group + aria-label, but the network-gateway contract's regexes pinned
the old settingsUsageSummary class name — the one re-pin the wave missed.
Also corrects the earlier triage: the failure was branch-caused, not
pre-existing on main.
@jackwener
jackwener merged commit 8079570 into mainJul 20, 2026
3 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jackwener
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

polish(settings): lift every surface to the 使用统计 bar — DataTable primitive, dense health/permission rows, dialect cleanup - #1274

Merged
jackwener merged 8 commits into
mainfrom
fix/polish-wave-table-language
Jul 20, 2026
Merged

polish(settings): lift every surface to the 使用统计 bar — DataTable primitive, dense health/permission rows, dialect cleanup#1274
jackwener merged 8 commits into
mainfrom
fix/polish-wave-table-language

Conversation

@jackwener

Copy link
Copy Markdown
Member

Campaign PR (goal: 其他的部分也要打磨和深度的优化&美化). One audit + two fix waves, accumulated on one branch.

The root fix

#1252's table language was deliberately page-local (single consumer). It now has multiple consumers → promoted to the DataTable primitive in @maka/ui (typed columns: numeric/grow; scoped th; hairline separators; tabular-nums right-aligned numerics). 使用统计 became a thin wrapper — pixel-faithful (class-identity preserved verbatim + new primitive-level tests).

Surfaces converged

  • 健康: bespoke tall signal blocks → dense hairline Item rows in one card; status exception-only (Healthy/Unknown neutral, Error red + Blocks-sending chip); meta single-line tabular-nums. Redundant gray intro banner (repeating the page title) → SectionHeader with badge/timestamp/refresh in the action slot.
  • 权限与能力: bespoke capability blocks + nested gray dl → dense rows with structured secondary lines; a11y names and diagnostics collapse preserved; the OS-row status stripe removed (fix(desktop): status-color restraint — expected states stop shouting green #651). Same intro-banner cleanup.
  • 关于/数据: the .settingsAboutPrivacy brand-blue callout dialect (third parallel callout language) killed — both sites onto SectionHeader + Alert; CSS deleted.
  • 模型: ProvidersPanel section headers onto SectionHeader (counts in the tabular slot, aria-labelledby kept).
  • Minors: search-modal pre-search hint → EmptyState; 开放网关 5-tile strip no longer orphans the fifth tile.

Process notes

  • Wave 1's sandbox couldn't produce pixel captures — it deliberately shipped only structurally-verifiable items and mapped the rest; wave 2 verified direct-CDP first, then shipped the visual redesigns with light+dark before/after evidence (maintainer-accepted).
  • One triage correction caught at merge: a gateway-contract failure earlier labeled pre-existing was actually a missed re-pin from the wave-1 class rename (aria semantics were intact; only the pinned class name changed) — fixed here with the corrected record.
  • Deferred with reasons: per-tab fixture captures need a VisualSmokeState initial-tab field (core type surgery — documented, not forced).

Gates (merged tree)

desktop 2751/2751 · ui 202/202 · typecheck · check-dead-css · knip ×2 · a11y/copy/console · alignment auditor all fixtures clean. ~10 contracts re-pinned across waves, none deleted. Audited AT-BAR surfaces (命令面板/定时任务/每日回顾/模型列表/连接详情) left untouched.

Promote the #1252 hairline table recipe out of usage-settings-page into a
shared DataTable primitive (@maka/ui) now that it has health + permission
consumers. The primitive owns the table markup: muted+medium scoped col
headers, first-cell-as-scoped-row-header, hairline row separators,
right-aligned tabular-nums numeric columns, and one grow column that absorbs
slack while the rest size to content on one line.
UsageStatsTable becomes a thin wrapper: it keeps the usage-local empty-tab
routing (EmptyState icon+copy) that a table primitive deliberately omits, and
delegates the non-empty branch to <DataTable>. Rendering is pixel-identical —
every utility class and the settingsUsageTable pin class are preserved.
Re-pin: the moved table markup is now guarded by packages/ui data-table.test
(renderToStaticMarkup); settings-usage-contract's stats-table assertions follow
the split — keep the wrapper's typed-column + EmptyState signature, assert
delegation to <DataTable>, and forbid a hand-rolled <table>.
The uppercase brand-blue h3 + brand-deep tinted card was a fourth section-
header voice, used by 关于's privacy card AND (confusingly) 数据's 配置导入
导出 header — the reason 数据's export section wore a blue header.
Converge both onto the sanctioned language:
- 关于 privacy → SectionHeader (as=h3) + Alert variant=passive holding the
privacy points (a quiet 'just so you know' callout; matches the passive
Alert language already on the data page's backup notice).
- 数据 config → SectionHeader (as=h3, configHelp as subtitle) over the form
controls, no card chrome (it's a form, not a callout).
Widen SectionHeader's `as` to accept h3 (a section under a page h2). Delete
the .settingsAboutPrivacy CSS block (incl. the green ::marker) for neutral
gap containers. Re-pin radius-converge (drop the stale selector) and
settings-app-info (name now scopes at the section) contracts.
- search-modal: route the pre-search guidance line through the shared
EmptyState inline primitive instead of a bare <p>, so the 'start typing'
hint uses the sanctioned empty-state language (keeps the placeholder pin
class so layout is unchanged).
- open-gateway: the posture strip has five metric tiles but reused the
four-column .settingsUsageSummary grid, orphaning the fifth on a second
row. Give it .settingsGatewaySummary — 5-up on wide, clean 3-up (3 + 2)
wrap when the pane narrows.
Each OS-permission row already shows its state as a Badge; the left-edge
status stripe (amber on 等待授权, red on 已拒绝) was a redundant second status
channel, and the amber stripe read as a standing alarm on an expected waiting
state. Remove both stripe rules and the now-orphaned position:relative anchor;
the row's Chip/text is the single state signal (the denied icon tint stays as
the one exception accent).
The 已连接 and 添加新连接 section titles were a bespoke flex header (bold h3
+ muted help + far-right count) — a fourth section-header dialect. Converge
both onto the shared SectionHeader primitive: title + subtitle, and the
connection count rides SectionHeader's count slot (tabular-nums baked in).
Extend SectionHeader with an optional titleId so the catalog section keeps
its aria-labelledby link. Delete the .providerRootHeader CSS family. Re-pin:
tabular-nums-converge (drop the removed selector, add a SectionHeader
primitive pin) and provider-navigation (catalog title now on SectionHeader
via titleId).
…ge rows
Polish wave (wave 2) — kill the bordered-block dialect on the Health and
Permission Center pages and the redundant gray intro banners.
- Item 2 (健康): HealthSignalRow bordered blocks -> shared Item row
primitive inside one hairline card; prose message + detail keep stacked
secondary lines, status is a squared Chip (exception-only color via its
tone scale), send/capability blockers are exception Chips. Meta on one
tabular-nums line. Deleted the bespoke .settingsHealthSignalRow* CSS.
- Item 3 (权限): CapabilityRow bordered blocks -> dense hairline-divided
rows in one card matching the OS permission list above; the nested gray
boxed .settingsCapabilityLayers dl becomes structured secondary lines
(no nested surface). readiness Badge -> Chip. Kept the dl + aria-label
and the diagnostics collapse.
- Item 5: the second gray-banner PageHeader on each page
(.settingsHealthIntro / .settingsPermissionIntro) restating the page
title -> SectionHeader; unique subtitle kept, badge/timestamp/refresh
moved into the action slot, banner chrome dropped.
Re-pins: radius-converge SELECTOR_TIER drops the retired
.settingsHealthIntro/.settingsPermissionIntro/.settingsCapabilityRow radius
entries and adds the new .settingsCapabilityList/.settingsHealthSignalList
card entries. roadmap-cleanup + capability-audit contracts unchanged.
Verified light+dark via direct CDP over settings-health / settings-permissions.
Gates: desktop main + @maka/ui suites, full typecheck, check-dead-css,
audit-alignment (settings-permissions clean) all green.
…ySummary
Wave 1 renamed the tile strip class (fixing the 4+1 orphan grid) and kept
role=group + aria-label, but the network-gateway contract's regexes pinned
the old settingsUsageSummary class name — the one re-pin the wave missed.
Also corrects the earlier triage: the failure was branch-caused, not
pre-existing on main.
@jackwener
jackwener merged commit 8079570 into mainJul 20, 2026
3 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jackwener
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

polish(settings): lift every surface to the 使用统计 bar — DataTable primitive, dense health/permission rows, dialect cleanup - #1274

Merged
jackwener merged 8 commits into
mainfrom
fix/polish-wave-table-language
Jul 20, 2026
Merged

polish(settings): lift every surface to the 使用统计 bar — DataTable primitive, dense health/permission rows, dialect cleanup#1274
jackwener merged 8 commits into
mainfrom
fix/polish-wave-table-language

Conversation

@jackwener

Copy link
Copy Markdown
Member

Campaign PR (goal: 其他的部分也要打磨和深度的优化&美化). One audit + two fix waves, accumulated on one branch.

The root fix

#1252's table language was deliberately page-local (single consumer). It now has multiple consumers → promoted to the DataTable primitive in @maka/ui (typed columns: numeric/grow; scoped th; hairline separators; tabular-nums right-aligned numerics). 使用统计 became a thin wrapper — pixel-faithful (class-identity preserved verbatim + new primitive-level tests).

Surfaces converged

  • 健康: bespoke tall signal blocks → dense hairline Item rows in one card; status exception-only (Healthy/Unknown neutral, Error red + Blocks-sending chip); meta single-line tabular-nums. Redundant gray intro banner (repeating the page title) → SectionHeader with badge/timestamp/refresh in the action slot.
  • 权限与能力: bespoke capability blocks + nested gray dl → dense rows with structured secondary lines; a11y names and diagnostics collapse preserved; the OS-row status stripe removed (fix(desktop): status-color restraint — expected states stop shouting green #651). Same intro-banner cleanup.
  • 关于/数据: the .settingsAboutPrivacy brand-blue callout dialect (third parallel callout language) killed — both sites onto SectionHeader + Alert; CSS deleted.
  • 模型: ProvidersPanel section headers onto SectionHeader (counts in the tabular slot, aria-labelledby kept).
  • Minors: search-modal pre-search hint → EmptyState; 开放网关 5-tile strip no longer orphans the fifth tile.

Process notes

  • Wave 1's sandbox couldn't produce pixel captures — it deliberately shipped only structurally-verifiable items and mapped the rest; wave 2 verified direct-CDP first, then shipped the visual redesigns with light+dark before/after evidence (maintainer-accepted).
  • One triage correction caught at merge: a gateway-contract failure earlier labeled pre-existing was actually a missed re-pin from the wave-1 class rename (aria semantics were intact; only the pinned class name changed) — fixed here with the corrected record.
  • Deferred with reasons: per-tab fixture captures need a VisualSmokeState initial-tab field (core type surgery — documented, not forced).

Gates (merged tree)

desktop 2751/2751 · ui 202/202 · typecheck · check-dead-css · knip ×2 · a11y/copy/console · alignment auditor all fixtures clean. ~10 contracts re-pinned across waves, none deleted. Audited AT-BAR surfaces (命令面板/定时任务/每日回顾/模型列表/连接详情) left untouched.

Promote the #1252 hairline table recipe out of usage-settings-page into a
shared DataTable primitive (@maka/ui) now that it has health + permission
consumers. The primitive owns the table markup: muted+medium scoped col
headers, first-cell-as-scoped-row-header, hairline row separators,
right-aligned tabular-nums numeric columns, and one grow column that absorbs
slack while the rest size to content on one line.
UsageStatsTable becomes a thin wrapper: it keeps the usage-local empty-tab
routing (EmptyState icon+copy) that a table primitive deliberately omits, and
delegates the non-empty branch to <DataTable>. Rendering is pixel-identical —
every utility class and the settingsUsageTable pin class are preserved.
Re-pin: the moved table markup is now guarded by packages/ui data-table.test
(renderToStaticMarkup); settings-usage-contract's stats-table assertions follow
the split — keep the wrapper's typed-column + EmptyState signature, assert
delegation to <DataTable>, and forbid a hand-rolled <table>.
The uppercase brand-blue h3 + brand-deep tinted card was a fourth section-
header voice, used by 关于's privacy card AND (confusingly) 数据's 配置导入
导出 header — the reason 数据's export section wore a blue header.
Converge both onto the sanctioned language:
- 关于 privacy → SectionHeader (as=h3) + Alert variant=passive holding the
privacy points (a quiet 'just so you know' callout; matches the passive
Alert language already on the data page's backup notice).
- 数据 config → SectionHeader (as=h3, configHelp as subtitle) over the form
controls, no card chrome (it's a form, not a callout).
Widen SectionHeader's `as` to accept h3 (a section under a page h2). Delete
the .settingsAboutPrivacy CSS block (incl. the green ::marker) for neutral
gap containers. Re-pin radius-converge (drop the stale selector) and
settings-app-info (name now scopes at the section) contracts.
- search-modal: route the pre-search guidance line through the shared
EmptyState inline primitive instead of a bare <p>, so the 'start typing'
hint uses the sanctioned empty-state language (keeps the placeholder pin
class so layout is unchanged).
- open-gateway: the posture strip has five metric tiles but reused the
four-column .settingsUsageSummary grid, orphaning the fifth on a second
row. Give it .settingsGatewaySummary — 5-up on wide, clean 3-up (3 + 2)
wrap when the pane narrows.
Each OS-permission row already shows its state as a Badge; the left-edge
status stripe (amber on 等待授权, red on 已拒绝) was a redundant second status
channel, and the amber stripe read as a standing alarm on an expected waiting
state. Remove both stripe rules and the now-orphaned position:relative anchor;
the row's Chip/text is the single state signal (the denied icon tint stays as
the one exception accent).
The 已连接 and 添加新连接 section titles were a bespoke flex header (bold h3
+ muted help + far-right count) — a fourth section-header dialect. Converge
both onto the shared SectionHeader primitive: title + subtitle, and the
connection count rides SectionHeader's count slot (tabular-nums baked in).
Extend SectionHeader with an optional titleId so the catalog section keeps
its aria-labelledby link. Delete the .providerRootHeader CSS family. Re-pin:
tabular-nums-converge (drop the removed selector, add a SectionHeader
primitive pin) and provider-navigation (catalog title now on SectionHeader
via titleId).
…ge rows
Polish wave (wave 2) — kill the bordered-block dialect on the Health and
Permission Center pages and the redundant gray intro banners.
- Item 2 (健康): HealthSignalRow bordered blocks -> shared Item row
primitive inside one hairline card; prose message + detail keep stacked
secondary lines, status is a squared Chip (exception-only color via its
tone scale), send/capability blockers are exception Chips. Meta on one
tabular-nums line. Deleted the bespoke .settingsHealthSignalRow* CSS.
- Item 3 (权限): CapabilityRow bordered blocks -> dense hairline-divided
rows in one card matching the OS permission list above; the nested gray
boxed .settingsCapabilityLayers dl becomes structured secondary lines
(no nested surface). readiness Badge -> Chip. Kept the dl + aria-label
and the diagnostics collapse.
- Item 5: the second gray-banner PageHeader on each page
(.settingsHealthIntro / .settingsPermissionIntro) restating the page
title -> SectionHeader; unique subtitle kept, badge/timestamp/refresh
moved into the action slot, banner chrome dropped.
Re-pins: radius-converge SELECTOR_TIER drops the retired
.settingsHealthIntro/.settingsPermissionIntro/.settingsCapabilityRow radius
entries and adds the new .settingsCapabilityList/.settingsHealthSignalList
card entries. roadmap-cleanup + capability-audit contracts unchanged.
Verified light+dark via direct CDP over settings-health / settings-permissions.
Gates: desktop main + @maka/ui suites, full typecheck, check-dead-css,
audit-alignment (settings-permissions clean) all green.
…ySummary
Wave 1 renamed the tile strip class (fixing the 4+1 orphan grid) and kept
role=group + aria-label, but the network-gateway contract's regexes pinned
the old settingsUsageSummary class name — the one re-pin the wave missed.
Also corrects the earlier triage: the failure was branch-caused, not
pre-existing on main.
@jackwener
jackwener merged commit 8079570 into mainJul 20, 2026
3 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jackwener
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

polish(settings): lift every surface to the 使用统计 bar — DataTable primitive, dense health/permission rows, dialect cleanup - #1274

Merged
jackwener merged 8 commits into
mainfrom
fix/polish-wave-table-language
Jul 20, 2026
Merged

polish(settings): lift every surface to the 使用统计 bar — DataTable primitive, dense health/permission rows, dialect cleanup#1274
jackwener merged 8 commits into
mainfrom
fix/polish-wave-table-language

Conversation

@jackwener

Copy link
Copy Markdown
Member

Campaign PR (goal: 其他的部分也要打磨和深度的优化&美化). One audit + two fix waves, accumulated on one branch.

The root fix

#1252's table language was deliberately page-local (single consumer). It now has multiple consumers → promoted to the DataTable primitive in @maka/ui (typed columns: numeric/grow; scoped th; hairline separators; tabular-nums right-aligned numerics). 使用统计 became a thin wrapper — pixel-faithful (class-identity preserved verbatim + new primitive-level tests).

Surfaces converged

  • 健康: bespoke tall signal blocks → dense hairline Item rows in one card; status exception-only (Healthy/Unknown neutral, Error red + Blocks-sending chip); meta single-line tabular-nums. Redundant gray intro banner (repeating the page title) → SectionHeader with badge/timestamp/refresh in the action slot.
  • 权限与能力: bespoke capability blocks + nested gray dl → dense rows with structured secondary lines; a11y names and diagnostics collapse preserved; the OS-row status stripe removed (fix(desktop): status-color restraint — expected states stop shouting green #651). Same intro-banner cleanup.
  • 关于/数据: the .settingsAboutPrivacy brand-blue callout dialect (third parallel callout language) killed — both sites onto SectionHeader + Alert; CSS deleted.
  • 模型: ProvidersPanel section headers onto SectionHeader (counts in the tabular slot, aria-labelledby kept).
  • Minors: search-modal pre-search hint → EmptyState; 开放网关 5-tile strip no longer orphans the fifth tile.

Process notes

  • Wave 1's sandbox couldn't produce pixel captures — it deliberately shipped only structurally-verifiable items and mapped the rest; wave 2 verified direct-CDP first, then shipped the visual redesigns with light+dark before/after evidence (maintainer-accepted).
  • One triage correction caught at merge: a gateway-contract failure earlier labeled pre-existing was actually a missed re-pin from the wave-1 class rename (aria semantics were intact; only the pinned class name changed) — fixed here with the corrected record.
  • Deferred with reasons: per-tab fixture captures need a VisualSmokeState initial-tab field (core type surgery — documented, not forced).

Gates (merged tree)

desktop 2751/2751 · ui 202/202 · typecheck · check-dead-css · knip ×2 · a11y/copy/console · alignment auditor all fixtures clean. ~10 contracts re-pinned across waves, none deleted. Audited AT-BAR surfaces (命令面板/定时任务/每日回顾/模型列表/连接详情) left untouched.

Promote the #1252 hairline table recipe out of usage-settings-page into a
shared DataTable primitive (@maka/ui) now that it has health + permission
consumers. The primitive owns the table markup: muted+medium scoped col
headers, first-cell-as-scoped-row-header, hairline row separators,
right-aligned tabular-nums numeric columns, and one grow column that absorbs
slack while the rest size to content on one line.
UsageStatsTable becomes a thin wrapper: it keeps the usage-local empty-tab
routing (EmptyState icon+copy) that a table primitive deliberately omits, and
delegates the non-empty branch to <DataTable>. Rendering is pixel-identical —
every utility class and the settingsUsageTable pin class are preserved.
Re-pin: the moved table markup is now guarded by packages/ui data-table.test
(renderToStaticMarkup); settings-usage-contract's stats-table assertions follow
the split — keep the wrapper's typed-column + EmptyState signature, assert
delegation to <DataTable>, and forbid a hand-rolled <table>.
The uppercase brand-blue h3 + brand-deep tinted card was a fourth section-
header voice, used by 关于's privacy card AND (confusingly) 数据's 配置导入
导出 header — the reason 数据's export section wore a blue header.
Converge both onto the sanctioned language:
- 关于 privacy → SectionHeader (as=h3) + Alert variant=passive holding the
privacy points (a quiet 'just so you know' callout; matches the passive
Alert language already on the data page's backup notice).
- 数据 config → SectionHeader (as=h3, configHelp as subtitle) over the form
controls, no card chrome (it's a form, not a callout).
Widen SectionHeader's `as` to accept h3 (a section under a page h2). Delete
the .settingsAboutPrivacy CSS block (incl. the green ::marker) for neutral
gap containers. Re-pin radius-converge (drop the stale selector) and
settings-app-info (name now scopes at the section) contracts.
- search-modal: route the pre-search guidance line through the shared
EmptyState inline primitive instead of a bare <p>, so the 'start typing'
hint uses the sanctioned empty-state language (keeps the placeholder pin
class so layout is unchanged).
- open-gateway: the posture strip has five metric tiles but reused the
four-column .settingsUsageSummary grid, orphaning the fifth on a second
row. Give it .settingsGatewaySummary — 5-up on wide, clean 3-up (3 + 2)
wrap when the pane narrows.
Each OS-permission row already shows its state as a Badge; the left-edge
status stripe (amber on 等待授权, red on 已拒绝) was a redundant second status
channel, and the amber stripe read as a standing alarm on an expected waiting
state. Remove both stripe rules and the now-orphaned position:relative anchor;
the row's Chip/text is the single state signal (the denied icon tint stays as
the one exception accent).
The 已连接 and 添加新连接 section titles were a bespoke flex header (bold h3
+ muted help + far-right count) — a fourth section-header dialect. Converge
both onto the shared SectionHeader primitive: title + subtitle, and the
connection count rides SectionHeader's count slot (tabular-nums baked in).
Extend SectionHeader with an optional titleId so the catalog section keeps
its aria-labelledby link. Delete the .providerRootHeader CSS family. Re-pin:
tabular-nums-converge (drop the removed selector, add a SectionHeader
primitive pin) and provider-navigation (catalog title now on SectionHeader
via titleId).
…ge rows
Polish wave (wave 2) — kill the bordered-block dialect on the Health and
Permission Center pages and the redundant gray intro banners.
- Item 2 (健康): HealthSignalRow bordered blocks -> shared Item row
primitive inside one hairline card; prose message + detail keep stacked
secondary lines, status is a squared Chip (exception-only color via its
tone scale), send/capability blockers are exception Chips. Meta on one
tabular-nums line. Deleted the bespoke .settingsHealthSignalRow* CSS.
- Item 3 (权限): CapabilityRow bordered blocks -> dense hairline-divided
rows in one card matching the OS permission list above; the nested gray
boxed .settingsCapabilityLayers dl becomes structured secondary lines
(no nested surface). readiness Badge -> Chip. Kept the dl + aria-label
and the diagnostics collapse.
- Item 5: the second gray-banner PageHeader on each page
(.settingsHealthIntro / .settingsPermissionIntro) restating the page
title -> SectionHeader; unique subtitle kept, badge/timestamp/refresh
moved into the action slot, banner chrome dropped.
Re-pins: radius-converge SELECTOR_TIER drops the retired
.settingsHealthIntro/.settingsPermissionIntro/.settingsCapabilityRow radius
entries and adds the new .settingsCapabilityList/.settingsHealthSignalList
card entries. roadmap-cleanup + capability-audit contracts unchanged.
Verified light+dark via direct CDP over settings-health / settings-permissions.
Gates: desktop main + @maka/ui suites, full typecheck, check-dead-css,
audit-alignment (settings-permissions clean) all green.
…ySummary
Wave 1 renamed the tile strip class (fixing the 4+1 orphan grid) and kept
role=group + aria-label, but the network-gateway contract's regexes pinned
the old settingsUsageSummary class name — the one re-pin the wave missed.
Also corrects the earlier triage: the failure was branch-caused, not
pre-existing on main.
@jackwener
jackwener merged commit 8079570 into mainJul 20, 2026
3 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jackwener
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

polish(settings): lift every surface to the 使用统计 bar — DataTable primitive, dense health/permission rows, dialect cleanup - #1274

Merged
jackwener merged 8 commits into
mainfrom
fix/polish-wave-table-language
Jul 20, 2026
Merged

polish(settings): lift every surface to the 使用统计 bar — DataTable primitive, dense health/permission rows, dialect cleanup#1274
jackwener merged 8 commits into
mainfrom
fix/polish-wave-table-language

Conversation

@jackwener

Copy link
Copy Markdown
Member

Campaign PR (goal: 其他的部分也要打磨和深度的优化&美化). One audit + two fix waves, accumulated on one branch.

The root fix

#1252's table language was deliberately page-local (single consumer). It now has multiple consumers → promoted to the DataTable primitive in @maka/ui (typed columns: numeric/grow; scoped th; hairline separators; tabular-nums right-aligned numerics). 使用统计 became a thin wrapper — pixel-faithful (class-identity preserved verbatim + new primitive-level tests).

Surfaces converged

  • 健康: bespoke tall signal blocks → dense hairline Item rows in one card; status exception-only (Healthy/Unknown neutral, Error red + Blocks-sending chip); meta single-line tabular-nums. Redundant gray intro banner (repeating the page title) → SectionHeader with badge/timestamp/refresh in the action slot.
  • 权限与能力: bespoke capability blocks + nested gray dl → dense rows with structured secondary lines; a11y names and diagnostics collapse preserved; the OS-row status stripe removed (fix(desktop): status-color restraint — expected states stop shouting green #651). Same intro-banner cleanup.
  • 关于/数据: the .settingsAboutPrivacy brand-blue callout dialect (third parallel callout language) killed — both sites onto SectionHeader + Alert; CSS deleted.
  • 模型: ProvidersPanel section headers onto SectionHeader (counts in the tabular slot, aria-labelledby kept).
  • Minors: search-modal pre-search hint → EmptyState; 开放网关 5-tile strip no longer orphans the fifth tile.

Process notes

  • Wave 1's sandbox couldn't produce pixel captures — it deliberately shipped only structurally-verifiable items and mapped the rest; wave 2 verified direct-CDP first, then shipped the visual redesigns with light+dark before/after evidence (maintainer-accepted).
  • One triage correction caught at merge: a gateway-contract failure earlier labeled pre-existing was actually a missed re-pin from the wave-1 class rename (aria semantics were intact; only the pinned class name changed) — fixed here with the corrected record.
  • Deferred with reasons: per-tab fixture captures need a VisualSmokeState initial-tab field (core type surgery — documented, not forced).

Gates (merged tree)

desktop 2751/2751 · ui 202/202 · typecheck · check-dead-css · knip ×2 · a11y/copy/console · alignment auditor all fixtures clean. ~10 contracts re-pinned across waves, none deleted. Audited AT-BAR surfaces (命令面板/定时任务/每日回顾/模型列表/连接详情) left untouched.

Promote the #1252 hairline table recipe out of usage-settings-page into a
shared DataTable primitive (@maka/ui) now that it has health + permission
consumers. The primitive owns the table markup: muted+medium scoped col
headers, first-cell-as-scoped-row-header, hairline row separators,
right-aligned tabular-nums numeric columns, and one grow column that absorbs
slack while the rest size to content on one line.
UsageStatsTable becomes a thin wrapper: it keeps the usage-local empty-tab
routing (EmptyState icon+copy) that a table primitive deliberately omits, and
delegates the non-empty branch to <DataTable>. Rendering is pixel-identical —
every utility class and the settingsUsageTable pin class are preserved.
Re-pin: the moved table markup is now guarded by packages/ui data-table.test
(renderToStaticMarkup); settings-usage-contract's stats-table assertions follow
the split — keep the wrapper's typed-column + EmptyState signature, assert
delegation to <DataTable>, and forbid a hand-rolled <table>.
The uppercase brand-blue h3 + brand-deep tinted card was a fourth section-
header voice, used by 关于's privacy card AND (confusingly) 数据's 配置导入
导出 header — the reason 数据's export section wore a blue header.
Converge both onto the sanctioned language:
- 关于 privacy → SectionHeader (as=h3) + Alert variant=passive holding the
privacy points (a quiet 'just so you know' callout; matches the passive
Alert language already on the data page's backup notice).
- 数据 config → SectionHeader (as=h3, configHelp as subtitle) over the form
controls, no card chrome (it's a form, not a callout).
Widen SectionHeader's `as` to accept h3 (a section under a page h2). Delete
the .settingsAboutPrivacy CSS block (incl. the green ::marker) for neutral
gap containers. Re-pin radius-converge (drop the stale selector) and
settings-app-info (name now scopes at the section) contracts.
- search-modal: route the pre-search guidance line through the shared
EmptyState inline primitive instead of a bare <p>, so the 'start typing'
hint uses the sanctioned empty-state language (keeps the placeholder pin
class so layout is unchanged).
- open-gateway: the posture strip has five metric tiles but reused the
four-column .settingsUsageSummary grid, orphaning the fifth on a second
row. Give it .settingsGatewaySummary — 5-up on wide, clean 3-up (3 + 2)
wrap when the pane narrows.
Each OS-permission row already shows its state as a Badge; the left-edge
status stripe (amber on 等待授权, red on 已拒绝) was a redundant second status
channel, and the amber stripe read as a standing alarm on an expected waiting
state. Remove both stripe rules and the now-orphaned position:relative anchor;
the row's Chip/text is the single state signal (the denied icon tint stays as
the one exception accent).
The 已连接 and 添加新连接 section titles were a bespoke flex header (bold h3
+ muted help + far-right count) — a fourth section-header dialect. Converge
both onto the shared SectionHeader primitive: title + subtitle, and the
connection count rides SectionHeader's count slot (tabular-nums baked in).
Extend SectionHeader with an optional titleId so the catalog section keeps
its aria-labelledby link. Delete the .providerRootHeader CSS family. Re-pin:
tabular-nums-converge (drop the removed selector, add a SectionHeader
primitive pin) and provider-navigation (catalog title now on SectionHeader
via titleId).
…ge rows
Polish wave (wave 2) — kill the bordered-block dialect on the Health and
Permission Center pages and the redundant gray intro banners.
- Item 2 (健康): HealthSignalRow bordered blocks -> shared Item row
primitive inside one hairline card; prose message + detail keep stacked
secondary lines, status is a squared Chip (exception-only color via its
tone scale), send/capability blockers are exception Chips. Meta on one
tabular-nums line. Deleted the bespoke .settingsHealthSignalRow* CSS.
- Item 3 (权限): CapabilityRow bordered blocks -> dense hairline-divided
rows in one card matching the OS permission list above; the nested gray
boxed .settingsCapabilityLayers dl becomes structured secondary lines
(no nested surface). readiness Badge -> Chip. Kept the dl + aria-label
and the diagnostics collapse.
- Item 5: the second gray-banner PageHeader on each page
(.settingsHealthIntro / .settingsPermissionIntro) restating the page
title -> SectionHeader; unique subtitle kept, badge/timestamp/refresh
moved into the action slot, banner chrome dropped.
Re-pins: radius-converge SELECTOR_TIER drops the retired
.settingsHealthIntro/.settingsPermissionIntro/.settingsCapabilityRow radius
entries and adds the new .settingsCapabilityList/.settingsHealthSignalList
card entries. roadmap-cleanup + capability-audit contracts unchanged.
Verified light+dark via direct CDP over settings-health / settings-permissions.
Gates: desktop main + @maka/ui suites, full typecheck, check-dead-css,
audit-alignment (settings-permissions clean) all green.
…ySummary
Wave 1 renamed the tile strip class (fixing the 4+1 orphan grid) and kept
role=group + aria-label, but the network-gateway contract's regexes pinned
the old settingsUsageSummary class name — the one re-pin the wave missed.
Also corrects the earlier triage: the failure was branch-caused, not
pre-existing on main.
@jackwener
jackwener merged commit 8079570 into mainJul 20, 2026
3 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jackwener