Skip to content

fix(settings): indent the body under every settings heading - #1443

Merged
kumagallium merged 1 commit into
mainfrom
fix/settings-heading-indent
Nov 2, 2026
Merged

kumagallium merged 1 commit into
mainfrom
fix/settings-heading-indent

Conversation

@kumagallium

Copy link
Copy Markdown
Owner

Summary

In Settings, only the block headings (Voice notes, Model assignment, …) indented what came after them. Item headings such as Model and Language sat in the same column as their radio buttons, so it was hard to see where one item ended.

One rule now: whatever follows a heading is indented one step, at every level.

  • SETTINGS_ITEM_BODY_CLASS (pl-4) in SettingsGroup.tsx, one place for the value
  • SettingSection always indents its summary, details and controls (previously only when it had an icon)
  • Hand-written item headings follow the same rule: Language, MCP servers, Voice notes (Model / Language / Vocabulary / Terms to hide), and the bulk regenerate card (Kinds / two model pickers). The MCP heading icon now uses the shared 12px size
  • Out of scope: headings inside bordered cards (the border already shows the extent) and toggle / checkbox rows (the control is the heading)

No data, schema or wording changes. Docs sync: not applicable (styling only).

Test plan

  • pnpm exec tsc -p tsconfig.json --noEmit
  • pnpm vitest run (702 files / 9104 tests)
  • pnpm run lint:deps
  • pnpm manual:check
  • pnpm build
  • Storybook Organisms/SettingsModal: every heading in all 7 tabs measured in the DOM — body starts 16px right of the heading's left edge (icon included); only the bordered "Connection status" card is 0, as intended
  • Storybook Molecules/MeetingSettingsSection: Model / Language content indented
  • 375px width: no horizontal overflow at the deepest (3-level) nesting
  • Desktop app: Voice notes section in the AI tab

🤖 Generated with Claude Code

Only the block headings (Voice notes, Model assignment, ...) indented their
body, so item headings such as "Model" and "Language" sat in the same column
as their radio buttons and it was hard to see where an item ended.

One rule now: whatever follows a heading is indented one step, at every level.
- SETTINGS_ITEM_BODY_CLASS (pl-4) in SettingsGroup.tsx
- SettingSection always indents its summary, details and controls
  (previously only when it had an icon)
- Hand-written item headings follow the same rule: Language, MCP servers,
  Voice notes (Model / Language / Vocabulary / Terms to hide), and the
  bulk regenerate card (Kinds / two model pickers)
- Headings inside bordered cards stay as they are; the border already
  shows the extent

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

Migration fixtures

Click to expand migration results

> graphium@0.109.2 test:migration /home/runner/work/Graphium/Graphium
> tsx bench/migration.ts

[migration] wrote /home/runner/work/Graphium/Graphium/bench/results/migration-latest.json

========== migration summary ==========
fixtures             : 8
document pass rate   : 100.0%
index pass rate      : 100.0%
duration             : 11 ms

[PASS] document 01-v1-links-split
    ✓ version: version === 6
    ✓ preserved:title: title preserved
    ✓ preserved:createdAt: createdAt preserved
    ✓ noDataLoss:title: title preserved
    ✓ noDataLoss:createdAt: createdAt preserved
    ✓ noDataLoss:blockIds: 0 block id(s) preserved
    ✓ noDataLoss:blockText: 0 text run(s) preserved
[PASS] document 02-v2-label-normalize
    ✓ version: version === 6
    ✓ labels[blk-e]: mapped to "free.観察"
    ✓ noDataLoss:title: title preserved
    ✓ noDataLoss:createdAt: createdAt preserved
    ✓ noDataLoss:blockIds: 0 block id(s) preserved
    ✓ noDataLoss:blockText: 0 text run(s) preserved
[PASS] document 03-v3-result-to-output
    ✓ version: version === 6
    ✓ labels[blk-2]: mapped to "procedure"
    ✓ labels[blk-4]: mapped to "free.note"
    ✓ noDataLoss:title: title preserved
    ✓ noDataLoss:createdAt: createdAt preserved
    ✓ noDataLoss:blockIds: 0 block id(s) preserved
    ✓ noDataLoss:blockText: 0 text run(s) preserved
[PASS] document 04-v4-inline-label-to-highlight
    ✓ version: version === 6
    ✓ labels[blk-heading]: mapped to "procedure"
    ✓ noDataLoss:title: title preserved
    ✓ noDataLoss:createdAt: createdAt preserved
    ✓ noDataLoss:blockIds: 2 block id(s) preserved
    ✓ noDataLoss:blockText: 2 text run(s) preserved
[PASS] document 05-v5-concept-to-claim
    ✓ version: version === 6
    ✓ wikiMeta.kind: kind === "claim"
    ✓ removed:wikiMeta.derivedFromConcepts: wikiMeta.derivedFromConcepts removed
    ✓ removed:wikiMeta.conceptRole: wikiMeta.conceptRole removed
    ✓ noDataLoss:title: title preserved
    ✓ noDataLoss:createdAt: createdAt preserved
    ✓ noDataLoss:blockIds: 0 block id(s) preserved
    ✓ noDataLoss:blockText: 0 text run(s) preserved
[PASS] document 06-v5-procedure-heading-to-step
    ✓ version: version === 6
    ✓ labels[blk-p-eval]: mapped to "free.観察"
    ✓ removed:pages[0].labels.blk-h-synth: pages[0].labels.blk-h-synth removed
    ✓ removed:pages[0].labels.blk-h-sps: pages[0].labels.blk-h-sps removed
    ✓ removed:pages[0].labels.blk-h-plan: pages[0].labels.blk-h-plan removed
    ✓ path:pages[0].blocks.length: === 3
    ✓ path:pages[0].blocks[0].id: === "blk-h-synth"
    ✓ path:pages[0].blocks[0].type: === "step"
    ✓ path:pages[0].blocks[0].content[0].text: === "ZnSb の合成"
    ✓ path:pages[0].blocks[0].children.length: === 4
    ✓ path:pages[0].blocks[0].children[0].id: === "blk-p-weigh"
    ✓ path:pages[0].blocks[0].children[0].content[0].styles.inlineMaterial: === "ent_blk-p-weigh"
    ✓ path:pages[0].blocks[0].children[1].id: === "blk-h-plan"
    ✓ path:pages[0].blocks[0].children[1].type: === "heading"
    ✓ path:pages[0].blocks[0].children[2].id: === "blk-p-plan"
    ✓ path:pages[0].blocks[0].children[3].id: === "blk-h-sps"
    ✓ path:pages[0].blocks[0].children[3].type: === "step"
    ✓ path:pages[0].blocks[0].children[3].children.length: === 1
    ✓ path:pages[0].blocks[0].children[3].children[0].id: === "blk-p-sps"
    ✓ path:pages[0].blocks[1].id: === "blk-h-eval"
    ✓ path:pages[0].blocks[1].type: === "heading"
    ✓ path:pages[0].blocks[2].id: === "blk-p-eval"
    ✓ path:pages[0].provLinks[0].sourceBlockId: === "blk-h-sps"
    ✓ path:pages[0].provLinks[0].targetBlockId: === "blk-h-synth"
    ✓ noDataLoss:title: title preserved
    ✓ noDataLoss:createdAt: createdAt preserved
    ✓ noDataLoss:blockIds: 8 block id(s) preserved
    ✓ noDataLoss:blockText: 10 text run(s) preserved
[PASS] index    01-v14-pre-eta
    ✓ index.version: version === 14
    ✓ index.noteCount: notes.length === 2
[PASS] index    02-v15-current
    ✓ index.version: version === 15
    ✓ index.noteCount: notes.length === 2

@github-actions

github-actions Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

Performance regression

Click to expand performance results

> graphium@0.109.2 bench:performance /home/runner/work/Graphium/Graphium
> tsx bench/performance.ts

[perf] wrote /home/runner/work/Graphium/Graphium/bench/results/performance-latest.json

========== performance summary ==========
corpus size       : 100
duration (median) : 4.29 ms
heap delta peak   : 5.30 MiB
atoms json size   : 35.5 KiB
counts            : 100c / 100a

baseline comparison (recorded 2026-09-25T06:01:51.106Z, darwin-arm64 node v22.14.0):
  duration_ms         : baseline 2.61 ms → current 4.29 ms (+64.4%) ok
  heap_peak_bytes     : baseline 5.44 MiB → current 5.30 MiB (-2.5%) ok
  atoms_json_bytes    : baseline 36303 B → current 36303 B (+0.0%) ok
  (warns only when worse by more than: duration_ms +20% and +50.00 ms, heap_peak_bytes +20% and +16.00 MiB, atoms_json_bytes +20%. Smaller changes are measurement noise)

@github-actions

github-actions Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

Bench delta

  • left (baseline / dry-run / n=1 / 2026-08-03T11:05:19.939Z)
  • right (baseline / dry-run / n=1 / 2026-11-02T05:33:54.355Z)
metric left right Δ Δ%
lift_score 0.597 0.597 · 0 0
epistemic_preservation 0.912 0.912 · 0 0
adversarial_pass_rate 0.917 0.917 · 0 0
claim_count_total 168 168 · 0 0
atom_count_total 62 62 · 0 0
observation_atom_ratio 0.774 0.774 · 0 0
cross_language_consistency 0 0 · 0 -
domain_balance_score 0.533 0.533 · 0 0

@kumagallium
kumagallium merged commit 25c3dcb into main Nov 2, 2026
9 checks passed
@kumagallium kumagallium mentioned this pull request Nov 2, 2026
@kumagallium
kumagallium deleted the fix/settings-heading-indent branch November 2, 2026 05:45
Sign up for free to 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