feat(daily-review): IA redesign — 每日回顾 从控件汤到清晰的三段式 - #1191

Merged
jackwener merged 2 commits into
mainfrom
feat/daily-review-redesign
Jul 18, 2026
Merged

feat(daily-review): IA redesign — 每日回顾 从控件汤到清晰的三段式#1191
jackwener merged 2 commits into
mainfrom
feat/daily-review-redesign

Conversation

@jackwener

Copy link
Copy Markdown
Member

User verdict on the old page: 很混乱、很不好看、很不好用. This is the IA redesign (the #1187 style pass converged primitives; this round restructures the page).

Problems fixed (diagnosed from live captures)

  1. Control soup — two floating control rows with unclear ownership → PageHeader carries the generation actions (default + secondary) with a compact 分析模型 select (跟随设置) beside them; one time-navigation cluster (segmented + day stepper) under the header.
  2. Broken master-detail report list (2 rows + dead column) → stacked accordion: every report shows an always-visible meta head (05/21 · 深度分析 · 12 对话 · 定时生成 05/22 10:55 · glm-4.5, muted prose), the selected one expands its four sections in place; same lazy getArchive path (archive-body-load contract preserved).
  3. 已生成 chip on an expected state → removed; status color is exception-only (生成失败/缺少模型 raise a warning Chip).
  4. Orphan bottom line 等待记录今天活动… → absorbed as the 概览 section's inline hint.
  5. Stats vanished on empty days → 概览 StatTiles always render with honest zeros, so the review page always shows something reviewable.

Fidelity

Zero data/IPC/behavior change — same props, callbacks, and fail-soft guards; copy-feedback and archive-body-load contracts preserved verbatim; radius contract re-pinned for the archive-body → report surface rename. Documented deviations: export actions stay with the 概览 stats they serialize (contract pins the visibleSummary guard); accordion over all-expanded (avoids N eager body fetches).

Gates

Branch already contains main tip. desktop 2695/2695 · ui 183/183 · typecheck · check-dead-css · knip ×2 = 0 · console/a11y/copy checks OK · alignment auditor clean. CDP before/after light+dark verified (captures in session scratchpad only). Implemented by an opus worktree agent from a maintainer-authored IA brief; visually accepted before merge.

The run model-option default read 使用设置中的分析模型 — too long for the
compact picker that now rides the PageHeader actions slot (it wrapped to two
lines). Shorten to 跟随设置; a run with no explicit override still falls back to
the model configured in Settings (behavior unchanged — the sentinel value and
bridge mapping are untouched).
The page was 很乱/很不好用: two floating control rows with unclear ownership, a
broken master-detail archive list that left its left column half-empty, a
status Chip on the EXPECTED 已生成 state (#651), a floating orphan line at the
page bottom, and a stats section that vanished entirely on a no-activity day.
Rebuild the information architecture (zero data/IPC/behavior change — same
props, callbacks, guards; contract-pinned run/copy/archive plumbing preserved):
- PageHeader is the page shell: title + subtitle, and the 生成每日回顾 /
生成深度分析 actions ride its actions slot (skills-page pattern). The analysis
model select is now a COMPACT generation option in that same cluster, not a
page-wide row. Header moves into the panel so the actions can compose with the
panel's run state; the bridge-less fallback keeps its own static header.
- ONE time-scope row under the header: the 今日/本周/本月 segmented + the
day-stepper are one visual cluster (both are time navigation) instead of two
widgets at opposite page corners.
- 概览 section is ALWAYS rendered: SectionHeader + the StatTile row shown with
honest zeros even on a no-activity scope, plus one inline muted hint. This
absorbs the old bottom-of-page orphan line, which is deleted — the stats
section no longer disappears into a hole.
- 报告 section replaces the broken master-detail with a stacked, newest-first
list of full-width report surfaces. Each shows an always-visible meta head
(date · 模式 · N 对话 · 触发+时间 · 模型 as muted prose — NO 已生成 chip); the
selected report expands its four content sections in place. Status color is
exception-only now: only 生成失败 / 缺少模型 raise a Chip. Single-selection
lazy body load (getArchive) is unchanged — the archive-body-load contract
pins that path.
- Empty report state is the EmptyState primitive with a CTA wired to
生成每日回顾 (respects the pending/running guards).
- Export (复制/粘到输入框/保存) rides the 概览 SectionHeader action slot, gated
to a non-empty scope (guard shape pinned by the copy-feedback contract).
Re-pin: radius-converge-contract's .maka-daily-review-archive-body surface
entry follows the rename to .maka-daily-review-report (the surface owns the
radius; the expanded body divides with a hairline).
@jackwener
jackwener merged commit fa92286 into mainJul 18, 2026
2 of 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

feat(daily-review): IA redesign — 每日回顾 从控件汤到清晰的三段式 - #1191

Merged
jackwener merged 2 commits into
mainfrom
feat/daily-review-redesign
Jul 18, 2026
Merged

feat(daily-review): IA redesign — 每日回顾 从控件汤到清晰的三段式#1191
jackwener merged 2 commits into
mainfrom
feat/daily-review-redesign

Conversation

@jackwener

Copy link
Copy Markdown
Member

User verdict on the old page: 很混乱、很不好看、很不好用. This is the IA redesign (the #1187 style pass converged primitives; this round restructures the page).

Problems fixed (diagnosed from live captures)

  1. Control soup — two floating control rows with unclear ownership → PageHeader carries the generation actions (default + secondary) with a compact 分析模型 select (跟随设置) beside them; one time-navigation cluster (segmented + day stepper) under the header.
  2. Broken master-detail report list (2 rows + dead column) → stacked accordion: every report shows an always-visible meta head (05/21 · 深度分析 · 12 对话 · 定时生成 05/22 10:55 · glm-4.5, muted prose), the selected one expands its four sections in place; same lazy getArchive path (archive-body-load contract preserved).
  3. 已生成 chip on an expected state → removed; status color is exception-only (生成失败/缺少模型 raise a warning Chip).
  4. Orphan bottom line 等待记录今天活动… → absorbed as the 概览 section's inline hint.
  5. Stats vanished on empty days → 概览 StatTiles always render with honest zeros, so the review page always shows something reviewable.

Fidelity

Zero data/IPC/behavior change — same props, callbacks, and fail-soft guards; copy-feedback and archive-body-load contracts preserved verbatim; radius contract re-pinned for the archive-body → report surface rename. Documented deviations: export actions stay with the 概览 stats they serialize (contract pins the visibleSummary guard); accordion over all-expanded (avoids N eager body fetches).

Gates

Branch already contains main tip. desktop 2695/2695 · ui 183/183 · typecheck · check-dead-css · knip ×2 = 0 · console/a11y/copy checks OK · alignment auditor clean. CDP before/after light+dark verified (captures in session scratchpad only). Implemented by an opus worktree agent from a maintainer-authored IA brief; visually accepted before merge.

The run model-option default read 使用设置中的分析模型 — too long for the
compact picker that now rides the PageHeader actions slot (it wrapped to two
lines). Shorten to 跟随设置; a run with no explicit override still falls back to
the model configured in Settings (behavior unchanged — the sentinel value and
bridge mapping are untouched).
The page was 很乱/很不好用: two floating control rows with unclear ownership, a
broken master-detail archive list that left its left column half-empty, a
status Chip on the EXPECTED 已生成 state (#651), a floating orphan line at the
page bottom, and a stats section that vanished entirely on a no-activity day.
Rebuild the information architecture (zero data/IPC/behavior change — same
props, callbacks, guards; contract-pinned run/copy/archive plumbing preserved):
- PageHeader is the page shell: title + subtitle, and the 生成每日回顾 /
生成深度分析 actions ride its actions slot (skills-page pattern). The analysis
model select is now a COMPACT generation option in that same cluster, not a
page-wide row. Header moves into the panel so the actions can compose with the
panel's run state; the bridge-less fallback keeps its own static header.
- ONE time-scope row under the header: the 今日/本周/本月 segmented + the
day-stepper are one visual cluster (both are time navigation) instead of two
widgets at opposite page corners.
- 概览 section is ALWAYS rendered: SectionHeader + the StatTile row shown with
honest zeros even on a no-activity scope, plus one inline muted hint. This
absorbs the old bottom-of-page orphan line, which is deleted — the stats
section no longer disappears into a hole.
- 报告 section replaces the broken master-detail with a stacked, newest-first
list of full-width report surfaces. Each shows an always-visible meta head
(date · 模式 · N 对话 · 触发+时间 · 模型 as muted prose — NO 已生成 chip); the
selected report expands its four content sections in place. Status color is
exception-only now: only 生成失败 / 缺少模型 raise a Chip. Single-selection
lazy body load (getArchive) is unchanged — the archive-body-load contract
pins that path.
- Empty report state is the EmptyState primitive with a CTA wired to
生成每日回顾 (respects the pending/running guards).
- Export (复制/粘到输入框/保存) rides the 概览 SectionHeader action slot, gated
to a non-empty scope (guard shape pinned by the copy-feedback contract).
Re-pin: radius-converge-contract's .maka-daily-review-archive-body surface
entry follows the rename to .maka-daily-review-report (the surface owns the
radius; the expanded body divides with a hairline).
@jackwener
jackwener merged commit fa92286 into mainJul 18, 2026
2 of 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

feat(daily-review): IA redesign — 每日回顾 从控件汤到清晰的三段式 - #1191

Merged
jackwener merged 2 commits into
mainfrom
feat/daily-review-redesign
Jul 18, 2026
Merged

feat(daily-review): IA redesign — 每日回顾 从控件汤到清晰的三段式#1191
jackwener merged 2 commits into
mainfrom
feat/daily-review-redesign

Conversation

@jackwener

Copy link
Copy Markdown
Member

User verdict on the old page: 很混乱、很不好看、很不好用. This is the IA redesign (the #1187 style pass converged primitives; this round restructures the page).

Problems fixed (diagnosed from live captures)

  1. Control soup — two floating control rows with unclear ownership → PageHeader carries the generation actions (default + secondary) with a compact 分析模型 select (跟随设置) beside them; one time-navigation cluster (segmented + day stepper) under the header.
  2. Broken master-detail report list (2 rows + dead column) → stacked accordion: every report shows an always-visible meta head (05/21 · 深度分析 · 12 对话 · 定时生成 05/22 10:55 · glm-4.5, muted prose), the selected one expands its four sections in place; same lazy getArchive path (archive-body-load contract preserved).
  3. 已生成 chip on an expected state → removed; status color is exception-only (生成失败/缺少模型 raise a warning Chip).
  4. Orphan bottom line 等待记录今天活动… → absorbed as the 概览 section's inline hint.
  5. Stats vanished on empty days → 概览 StatTiles always render with honest zeros, so the review page always shows something reviewable.

Fidelity

Zero data/IPC/behavior change — same props, callbacks, and fail-soft guards; copy-feedback and archive-body-load contracts preserved verbatim; radius contract re-pinned for the archive-body → report surface rename. Documented deviations: export actions stay with the 概览 stats they serialize (contract pins the visibleSummary guard); accordion over all-expanded (avoids N eager body fetches).

Gates

Branch already contains main tip. desktop 2695/2695 · ui 183/183 · typecheck · check-dead-css · knip ×2 = 0 · console/a11y/copy checks OK · alignment auditor clean. CDP before/after light+dark verified (captures in session scratchpad only). Implemented by an opus worktree agent from a maintainer-authored IA brief; visually accepted before merge.

The run model-option default read 使用设置中的分析模型 — too long for the
compact picker that now rides the PageHeader actions slot (it wrapped to two
lines). Shorten to 跟随设置; a run with no explicit override still falls back to
the model configured in Settings (behavior unchanged — the sentinel value and
bridge mapping are untouched).
The page was 很乱/很不好用: two floating control rows with unclear ownership, a
broken master-detail archive list that left its left column half-empty, a
status Chip on the EXPECTED 已生成 state (#651), a floating orphan line at the
page bottom, and a stats section that vanished entirely on a no-activity day.
Rebuild the information architecture (zero data/IPC/behavior change — same
props, callbacks, guards; contract-pinned run/copy/archive plumbing preserved):
- PageHeader is the page shell: title + subtitle, and the 生成每日回顾 /
生成深度分析 actions ride its actions slot (skills-page pattern). The analysis
model select is now a COMPACT generation option in that same cluster, not a
page-wide row. Header moves into the panel so the actions can compose with the
panel's run state; the bridge-less fallback keeps its own static header.
- ONE time-scope row under the header: the 今日/本周/本月 segmented + the
day-stepper are one visual cluster (both are time navigation) instead of two
widgets at opposite page corners.
- 概览 section is ALWAYS rendered: SectionHeader + the StatTile row shown with
honest zeros even on a no-activity scope, plus one inline muted hint. This
absorbs the old bottom-of-page orphan line, which is deleted — the stats
section no longer disappears into a hole.
- 报告 section replaces the broken master-detail with a stacked, newest-first
list of full-width report surfaces. Each shows an always-visible meta head
(date · 模式 · N 对话 · 触发+时间 · 模型 as muted prose — NO 已生成 chip); the
selected report expands its four content sections in place. Status color is
exception-only now: only 生成失败 / 缺少模型 raise a Chip. Single-selection
lazy body load (getArchive) is unchanged — the archive-body-load contract
pins that path.
- Empty report state is the EmptyState primitive with a CTA wired to
生成每日回顾 (respects the pending/running guards).
- Export (复制/粘到输入框/保存) rides the 概览 SectionHeader action slot, gated
to a non-empty scope (guard shape pinned by the copy-feedback contract).
Re-pin: radius-converge-contract's .maka-daily-review-archive-body surface
entry follows the rename to .maka-daily-review-report (the surface owns the
radius; the expanded body divides with a hairline).
@jackwener
jackwener merged commit fa92286 into mainJul 18, 2026
2 of 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

feat(daily-review): IA redesign — 每日回顾 从控件汤到清晰的三段式 - #1191

Merged
jackwener merged 2 commits into
mainfrom
feat/daily-review-redesign
Jul 18, 2026
Merged

feat(daily-review): IA redesign — 每日回顾 从控件汤到清晰的三段式#1191
jackwener merged 2 commits into
mainfrom
feat/daily-review-redesign

Conversation

@jackwener

Copy link
Copy Markdown
Member

User verdict on the old page: 很混乱、很不好看、很不好用. This is the IA redesign (the #1187 style pass converged primitives; this round restructures the page).

Problems fixed (diagnosed from live captures)

  1. Control soup — two floating control rows with unclear ownership → PageHeader carries the generation actions (default + secondary) with a compact 分析模型 select (跟随设置) beside them; one time-navigation cluster (segmented + day stepper) under the header.
  2. Broken master-detail report list (2 rows + dead column) → stacked accordion: every report shows an always-visible meta head (05/21 · 深度分析 · 12 对话 · 定时生成 05/22 10:55 · glm-4.5, muted prose), the selected one expands its four sections in place; same lazy getArchive path (archive-body-load contract preserved).
  3. 已生成 chip on an expected state → removed; status color is exception-only (生成失败/缺少模型 raise a warning Chip).
  4. Orphan bottom line 等待记录今天活动… → absorbed as the 概览 section's inline hint.
  5. Stats vanished on empty days → 概览 StatTiles always render with honest zeros, so the review page always shows something reviewable.

Fidelity

Zero data/IPC/behavior change — same props, callbacks, and fail-soft guards; copy-feedback and archive-body-load contracts preserved verbatim; radius contract re-pinned for the archive-body → report surface rename. Documented deviations: export actions stay with the 概览 stats they serialize (contract pins the visibleSummary guard); accordion over all-expanded (avoids N eager body fetches).

Gates

Branch already contains main tip. desktop 2695/2695 · ui 183/183 · typecheck · check-dead-css · knip ×2 = 0 · console/a11y/copy checks OK · alignment auditor clean. CDP before/after light+dark verified (captures in session scratchpad only). Implemented by an opus worktree agent from a maintainer-authored IA brief; visually accepted before merge.

The run model-option default read 使用设置中的分析模型 — too long for the
compact picker that now rides the PageHeader actions slot (it wrapped to two
lines). Shorten to 跟随设置; a run with no explicit override still falls back to
the model configured in Settings (behavior unchanged — the sentinel value and
bridge mapping are untouched).
The page was 很乱/很不好用: two floating control rows with unclear ownership, a
broken master-detail archive list that left its left column half-empty, a
status Chip on the EXPECTED 已生成 state (#651), a floating orphan line at the
page bottom, and a stats section that vanished entirely on a no-activity day.
Rebuild the information architecture (zero data/IPC/behavior change — same
props, callbacks, guards; contract-pinned run/copy/archive plumbing preserved):
- PageHeader is the page shell: title + subtitle, and the 生成每日回顾 /
生成深度分析 actions ride its actions slot (skills-page pattern). The analysis
model select is now a COMPACT generation option in that same cluster, not a
page-wide row. Header moves into the panel so the actions can compose with the
panel's run state; the bridge-less fallback keeps its own static header.
- ONE time-scope row under the header: the 今日/本周/本月 segmented + the
day-stepper are one visual cluster (both are time navigation) instead of two
widgets at opposite page corners.
- 概览 section is ALWAYS rendered: SectionHeader + the StatTile row shown with
honest zeros even on a no-activity scope, plus one inline muted hint. This
absorbs the old bottom-of-page orphan line, which is deleted — the stats
section no longer disappears into a hole.
- 报告 section replaces the broken master-detail with a stacked, newest-first
list of full-width report surfaces. Each shows an always-visible meta head
(date · 模式 · N 对话 · 触发+时间 · 模型 as muted prose — NO 已生成 chip); the
selected report expands its four content sections in place. Status color is
exception-only now: only 生成失败 / 缺少模型 raise a Chip. Single-selection
lazy body load (getArchive) is unchanged — the archive-body-load contract
pins that path.
- Empty report state is the EmptyState primitive with a CTA wired to
生成每日回顾 (respects the pending/running guards).
- Export (复制/粘到输入框/保存) rides the 概览 SectionHeader action slot, gated
to a non-empty scope (guard shape pinned by the copy-feedback contract).
Re-pin: radius-converge-contract's .maka-daily-review-archive-body surface
entry follows the rename to .maka-daily-review-report (the surface owns the
radius; the expanded body divides with a hairline).
@jackwener
jackwener merged commit fa92286 into mainJul 18, 2026
2 of 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

feat(daily-review): IA redesign — 每日回顾 从控件汤到清晰的三段式 - #1191

Merged
jackwener merged 2 commits into
mainfrom
feat/daily-review-redesign
Jul 18, 2026
Merged

feat(daily-review): IA redesign — 每日回顾 从控件汤到清晰的三段式#1191
jackwener merged 2 commits into
mainfrom
feat/daily-review-redesign

Conversation

@jackwener

Copy link
Copy Markdown
Member

User verdict on the old page: 很混乱、很不好看、很不好用. This is the IA redesign (the #1187 style pass converged primitives; this round restructures the page).

Problems fixed (diagnosed from live captures)

  1. Control soup — two floating control rows with unclear ownership → PageHeader carries the generation actions (default + secondary) with a compact 分析模型 select (跟随设置) beside them; one time-navigation cluster (segmented + day stepper) under the header.
  2. Broken master-detail report list (2 rows + dead column) → stacked accordion: every report shows an always-visible meta head (05/21 · 深度分析 · 12 对话 · 定时生成 05/22 10:55 · glm-4.5, muted prose), the selected one expands its four sections in place; same lazy getArchive path (archive-body-load contract preserved).
  3. 已生成 chip on an expected state → removed; status color is exception-only (生成失败/缺少模型 raise a warning Chip).
  4. Orphan bottom line 等待记录今天活动… → absorbed as the 概览 section's inline hint.
  5. Stats vanished on empty days → 概览 StatTiles always render with honest zeros, so the review page always shows something reviewable.

Fidelity

Zero data/IPC/behavior change — same props, callbacks, and fail-soft guards; copy-feedback and archive-body-load contracts preserved verbatim; radius contract re-pinned for the archive-body → report surface rename. Documented deviations: export actions stay with the 概览 stats they serialize (contract pins the visibleSummary guard); accordion over all-expanded (avoids N eager body fetches).

Gates

Branch already contains main tip. desktop 2695/2695 · ui 183/183 · typecheck · check-dead-css · knip ×2 = 0 · console/a11y/copy checks OK · alignment auditor clean. CDP before/after light+dark verified (captures in session scratchpad only). Implemented by an opus worktree agent from a maintainer-authored IA brief; visually accepted before merge.

The run model-option default read 使用设置中的分析模型 — too long for the
compact picker that now rides the PageHeader actions slot (it wrapped to two
lines). Shorten to 跟随设置; a run with no explicit override still falls back to
the model configured in Settings (behavior unchanged — the sentinel value and
bridge mapping are untouched).
The page was 很乱/很不好用: two floating control rows with unclear ownership, a
broken master-detail archive list that left its left column half-empty, a
status Chip on the EXPECTED 已生成 state (#651), a floating orphan line at the
page bottom, and a stats section that vanished entirely on a no-activity day.
Rebuild the information architecture (zero data/IPC/behavior change — same
props, callbacks, guards; contract-pinned run/copy/archive plumbing preserved):
- PageHeader is the page shell: title + subtitle, and the 生成每日回顾 /
生成深度分析 actions ride its actions slot (skills-page pattern). The analysis
model select is now a COMPACT generation option in that same cluster, not a
page-wide row. Header moves into the panel so the actions can compose with the
panel's run state; the bridge-less fallback keeps its own static header.
- ONE time-scope row under the header: the 今日/本周/本月 segmented + the
day-stepper are one visual cluster (both are time navigation) instead of two
widgets at opposite page corners.
- 概览 section is ALWAYS rendered: SectionHeader + the StatTile row shown with
honest zeros even on a no-activity scope, plus one inline muted hint. This
absorbs the old bottom-of-page orphan line, which is deleted — the stats
section no longer disappears into a hole.
- 报告 section replaces the broken master-detail with a stacked, newest-first
list of full-width report surfaces. Each shows an always-visible meta head
(date · 模式 · N 对话 · 触发+时间 · 模型 as muted prose — NO 已生成 chip); the
selected report expands its four content sections in place. Status color is
exception-only now: only 生成失败 / 缺少模型 raise a Chip. Single-selection
lazy body load (getArchive) is unchanged — the archive-body-load contract
pins that path.
- Empty report state is the EmptyState primitive with a CTA wired to
生成每日回顾 (respects the pending/running guards).
- Export (复制/粘到输入框/保存) rides the 概览 SectionHeader action slot, gated
to a non-empty scope (guard shape pinned by the copy-feedback contract).
Re-pin: radius-converge-contract's .maka-daily-review-archive-body surface
entry follows the rename to .maka-daily-review-report (the surface owns the
radius; the expanded body divides with a hairline).
@jackwener
jackwener merged commit fa92286 into mainJul 18, 2026
2 of 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

feat(daily-review): IA redesign — 每日回顾 从控件汤到清晰的三段式 - #1191

Merged
jackwener merged 2 commits into
mainfrom
feat/daily-review-redesign
Jul 18, 2026
Merged

feat(daily-review): IA redesign — 每日回顾 从控件汤到清晰的三段式#1191
jackwener merged 2 commits into
mainfrom
feat/daily-review-redesign

Conversation

@jackwener

Copy link
Copy Markdown
Member

User verdict on the old page: 很混乱、很不好看、很不好用. This is the IA redesign (the #1187 style pass converged primitives; this round restructures the page).

Problems fixed (diagnosed from live captures)

  1. Control soup — two floating control rows with unclear ownership → PageHeader carries the generation actions (default + secondary) with a compact 分析模型 select (跟随设置) beside them; one time-navigation cluster (segmented + day stepper) under the header.
  2. Broken master-detail report list (2 rows + dead column) → stacked accordion: every report shows an always-visible meta head (05/21 · 深度分析 · 12 对话 · 定时生成 05/22 10:55 · glm-4.5, muted prose), the selected one expands its four sections in place; same lazy getArchive path (archive-body-load contract preserved).
  3. 已生成 chip on an expected state → removed; status color is exception-only (生成失败/缺少模型 raise a warning Chip).
  4. Orphan bottom line 等待记录今天活动… → absorbed as the 概览 section's inline hint.
  5. Stats vanished on empty days → 概览 StatTiles always render with honest zeros, so the review page always shows something reviewable.

Fidelity

Zero data/IPC/behavior change — same props, callbacks, and fail-soft guards; copy-feedback and archive-body-load contracts preserved verbatim; radius contract re-pinned for the archive-body → report surface rename. Documented deviations: export actions stay with the 概览 stats they serialize (contract pins the visibleSummary guard); accordion over all-expanded (avoids N eager body fetches).

Gates

Branch already contains main tip. desktop 2695/2695 · ui 183/183 · typecheck · check-dead-css · knip ×2 = 0 · console/a11y/copy checks OK · alignment auditor clean. CDP before/after light+dark verified (captures in session scratchpad only). Implemented by an opus worktree agent from a maintainer-authored IA brief; visually accepted before merge.

The run model-option default read 使用设置中的分析模型 — too long for the
compact picker that now rides the PageHeader actions slot (it wrapped to two
lines). Shorten to 跟随设置; a run with no explicit override still falls back to
the model configured in Settings (behavior unchanged — the sentinel value and
bridge mapping are untouched).
The page was 很乱/很不好用: two floating control rows with unclear ownership, a
broken master-detail archive list that left its left column half-empty, a
status Chip on the EXPECTED 已生成 state (#651), a floating orphan line at the
page bottom, and a stats section that vanished entirely on a no-activity day.
Rebuild the information architecture (zero data/IPC/behavior change — same
props, callbacks, guards; contract-pinned run/copy/archive plumbing preserved):
- PageHeader is the page shell: title + subtitle, and the 生成每日回顾 /
生成深度分析 actions ride its actions slot (skills-page pattern). The analysis
model select is now a COMPACT generation option in that same cluster, not a
page-wide row. Header moves into the panel so the actions can compose with the
panel's run state; the bridge-less fallback keeps its own static header.
- ONE time-scope row under the header: the 今日/本周/本月 segmented + the
day-stepper are one visual cluster (both are time navigation) instead of two
widgets at opposite page corners.
- 概览 section is ALWAYS rendered: SectionHeader + the StatTile row shown with
honest zeros even on a no-activity scope, plus one inline muted hint. This
absorbs the old bottom-of-page orphan line, which is deleted — the stats
section no longer disappears into a hole.
- 报告 section replaces the broken master-detail with a stacked, newest-first
list of full-width report surfaces. Each shows an always-visible meta head
(date · 模式 · N 对话 · 触发+时间 · 模型 as muted prose — NO 已生成 chip); the
selected report expands its four content sections in place. Status color is
exception-only now: only 生成失败 / 缺少模型 raise a Chip. Single-selection
lazy body load (getArchive) is unchanged — the archive-body-load contract
pins that path.
- Empty report state is the EmptyState primitive with a CTA wired to
生成每日回顾 (respects the pending/running guards).
- Export (复制/粘到输入框/保存) rides the 概览 SectionHeader action slot, gated
to a non-empty scope (guard shape pinned by the copy-feedback contract).
Re-pin: radius-converge-contract's .maka-daily-review-archive-body surface
entry follows the rename to .maka-daily-review-report (the surface owns the
radius; the expanded body divides with a hairline).
@jackwener
jackwener merged commit fa92286 into mainJul 18, 2026
2 of 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

feat(daily-review): IA redesign — 每日回顾 从控件汤到清晰的三段式 - #1191

Merged
jackwener merged 2 commits into
mainfrom
feat/daily-review-redesign
Jul 18, 2026
Merged

feat(daily-review): IA redesign — 每日回顾 从控件汤到清晰的三段式#1191
jackwener merged 2 commits into
mainfrom
feat/daily-review-redesign

Conversation

@jackwener

Copy link
Copy Markdown
Member

User verdict on the old page: 很混乱、很不好看、很不好用. This is the IA redesign (the #1187 style pass converged primitives; this round restructures the page).

Problems fixed (diagnosed from live captures)

  1. Control soup — two floating control rows with unclear ownership → PageHeader carries the generation actions (default + secondary) with a compact 分析模型 select (跟随设置) beside them; one time-navigation cluster (segmented + day stepper) under the header.
  2. Broken master-detail report list (2 rows + dead column) → stacked accordion: every report shows an always-visible meta head (05/21 · 深度分析 · 12 对话 · 定时生成 05/22 10:55 · glm-4.5, muted prose), the selected one expands its four sections in place; same lazy getArchive path (archive-body-load contract preserved).
  3. 已生成 chip on an expected state → removed; status color is exception-only (生成失败/缺少模型 raise a warning Chip).
  4. Orphan bottom line 等待记录今天活动… → absorbed as the 概览 section's inline hint.
  5. Stats vanished on empty days → 概览 StatTiles always render with honest zeros, so the review page always shows something reviewable.

Fidelity

Zero data/IPC/behavior change — same props, callbacks, and fail-soft guards; copy-feedback and archive-body-load contracts preserved verbatim; radius contract re-pinned for the archive-body → report surface rename. Documented deviations: export actions stay with the 概览 stats they serialize (contract pins the visibleSummary guard); accordion over all-expanded (avoids N eager body fetches).

Gates

Branch already contains main tip. desktop 2695/2695 · ui 183/183 · typecheck · check-dead-css · knip ×2 = 0 · console/a11y/copy checks OK · alignment auditor clean. CDP before/after light+dark verified (captures in session scratchpad only). Implemented by an opus worktree agent from a maintainer-authored IA brief; visually accepted before merge.

The run model-option default read 使用设置中的分析模型 — too long for the
compact picker that now rides the PageHeader actions slot (it wrapped to two
lines). Shorten to 跟随设置; a run with no explicit override still falls back to
the model configured in Settings (behavior unchanged — the sentinel value and
bridge mapping are untouched).
The page was 很乱/很不好用: two floating control rows with unclear ownership, a
broken master-detail archive list that left its left column half-empty, a
status Chip on the EXPECTED 已生成 state (#651), a floating orphan line at the
page bottom, and a stats section that vanished entirely on a no-activity day.
Rebuild the information architecture (zero data/IPC/behavior change — same
props, callbacks, guards; contract-pinned run/copy/archive plumbing preserved):
- PageHeader is the page shell: title + subtitle, and the 生成每日回顾 /
生成深度分析 actions ride its actions slot (skills-page pattern). The analysis
model select is now a COMPACT generation option in that same cluster, not a
page-wide row. Header moves into the panel so the actions can compose with the
panel's run state; the bridge-less fallback keeps its own static header.
- ONE time-scope row under the header: the 今日/本周/本月 segmented + the
day-stepper are one visual cluster (both are time navigation) instead of two
widgets at opposite page corners.
- 概览 section is ALWAYS rendered: SectionHeader + the StatTile row shown with
honest zeros even on a no-activity scope, plus one inline muted hint. This
absorbs the old bottom-of-page orphan line, which is deleted — the stats
section no longer disappears into a hole.
- 报告 section replaces the broken master-detail with a stacked, newest-first
list of full-width report surfaces. Each shows an always-visible meta head
(date · 模式 · N 对话 · 触发+时间 · 模型 as muted prose — NO 已生成 chip); the
selected report expands its four content sections in place. Status color is
exception-only now: only 生成失败 / 缺少模型 raise a Chip. Single-selection
lazy body load (getArchive) is unchanged — the archive-body-load contract
pins that path.
- Empty report state is the EmptyState primitive with a CTA wired to
生成每日回顾 (respects the pending/running guards).
- Export (复制/粘到输入框/保存) rides the 概览 SectionHeader action slot, gated
to a non-empty scope (guard shape pinned by the copy-feedback contract).
Re-pin: radius-converge-contract's .maka-daily-review-archive-body surface
entry follows the rename to .maka-daily-review-report (the surface owns the
radius; the expanded body divides with a hairline).
@jackwener
jackwener merged commit fa92286 into mainJul 18, 2026
2 of 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

feat(daily-review): IA redesign — 每日回顾 从控件汤到清晰的三段式 - #1191

Merged
jackwener merged 2 commits into
mainfrom
feat/daily-review-redesign
Jul 18, 2026
Merged

feat(daily-review): IA redesign — 每日回顾 从控件汤到清晰的三段式#1191
jackwener merged 2 commits into
mainfrom
feat/daily-review-redesign

Conversation

@jackwener

Copy link
Copy Markdown
Member

User verdict on the old page: 很混乱、很不好看、很不好用. This is the IA redesign (the #1187 style pass converged primitives; this round restructures the page).

Problems fixed (diagnosed from live captures)

  1. Control soup — two floating control rows with unclear ownership → PageHeader carries the generation actions (default + secondary) with a compact 分析模型 select (跟随设置) beside them; one time-navigation cluster (segmented + day stepper) under the header.
  2. Broken master-detail report list (2 rows + dead column) → stacked accordion: every report shows an always-visible meta head (05/21 · 深度分析 · 12 对话 · 定时生成 05/22 10:55 · glm-4.5, muted prose), the selected one expands its four sections in place; same lazy getArchive path (archive-body-load contract preserved).
  3. 已生成 chip on an expected state → removed; status color is exception-only (生成失败/缺少模型 raise a warning Chip).
  4. Orphan bottom line 等待记录今天活动… → absorbed as the 概览 section's inline hint.
  5. Stats vanished on empty days → 概览 StatTiles always render with honest zeros, so the review page always shows something reviewable.

Fidelity

Zero data/IPC/behavior change — same props, callbacks, and fail-soft guards; copy-feedback and archive-body-load contracts preserved verbatim; radius contract re-pinned for the archive-body → report surface rename. Documented deviations: export actions stay with the 概览 stats they serialize (contract pins the visibleSummary guard); accordion over all-expanded (avoids N eager body fetches).

Gates

Branch already contains main tip. desktop 2695/2695 · ui 183/183 · typecheck · check-dead-css · knip ×2 = 0 · console/a11y/copy checks OK · alignment auditor clean. CDP before/after light+dark verified (captures in session scratchpad only). Implemented by an opus worktree agent from a maintainer-authored IA brief; visually accepted before merge.

The run model-option default read 使用设置中的分析模型 — too long for the
compact picker that now rides the PageHeader actions slot (it wrapped to two
lines). Shorten to 跟随设置; a run with no explicit override still falls back to
the model configured in Settings (behavior unchanged — the sentinel value and
bridge mapping are untouched).
The page was 很乱/很不好用: two floating control rows with unclear ownership, a
broken master-detail archive list that left its left column half-empty, a
status Chip on the EXPECTED 已生成 state (#651), a floating orphan line at the
page bottom, and a stats section that vanished entirely on a no-activity day.
Rebuild the information architecture (zero data/IPC/behavior change — same
props, callbacks, guards; contract-pinned run/copy/archive plumbing preserved):
- PageHeader is the page shell: title + subtitle, and the 生成每日回顾 /
生成深度分析 actions ride its actions slot (skills-page pattern). The analysis
model select is now a COMPACT generation option in that same cluster, not a
page-wide row. Header moves into the panel so the actions can compose with the
panel's run state; the bridge-less fallback keeps its own static header.
- ONE time-scope row under the header: the 今日/本周/本月 segmented + the
day-stepper are one visual cluster (both are time navigation) instead of two
widgets at opposite page corners.
- 概览 section is ALWAYS rendered: SectionHeader + the StatTile row shown with
honest zeros even on a no-activity scope, plus one inline muted hint. This
absorbs the old bottom-of-page orphan line, which is deleted — the stats
section no longer disappears into a hole.
- 报告 section replaces the broken master-detail with a stacked, newest-first
list of full-width report surfaces. Each shows an always-visible meta head
(date · 模式 · N 对话 · 触发+时间 · 模型 as muted prose — NO 已生成 chip); the
selected report expands its four content sections in place. Status color is
exception-only now: only 生成失败 / 缺少模型 raise a Chip. Single-selection
lazy body load (getArchive) is unchanged — the archive-body-load contract
pins that path.
- Empty report state is the EmptyState primitive with a CTA wired to
生成每日回顾 (respects the pending/running guards).
- Export (复制/粘到输入框/保存) rides the 概览 SectionHeader action slot, gated
to a non-empty scope (guard shape pinned by the copy-feedback contract).
Re-pin: radius-converge-contract's .maka-daily-review-archive-body surface
entry follows the rename to .maka-daily-review-report (the surface owns the
radius; the expanded body divides with a hairline).
@jackwener
jackwener merged commit fa92286 into mainJul 18, 2026
2 of 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