Session: quiet-singing-bee-subagent-ac4612cd — 2026-04-09

doctolib-doctolib · Claude · branch .invalid · claude-haiku-4-5-20251001 · 2026-04-09 13:50 · 1 msgs · 23 tools · 12 min read · updated 4 weeks ago

Explore test files and design system Paragraph/Badge components for the treatment-plan NhrDocumentList feature.

tools: Read, Glob, Bash
← doctolib-doctolib Download .md .txt .json
Tool calls
Read Read: 16 calls (69.6%) 16 Bash Bash: 4 calls (17.4%) 4 Glob Glob: 3 calls (13.0%) 3
Token usage2.0M total
Input181
Cache creation92.6K
Cache read1.9M
Output6.0K
Cache hit ratio95%· healthy

Project: doctolib-doctolib · Branch: .invalid · Mode: ` · **Model:**claude-haiku-4-5-20251001`

Stats: 1 user messages, 23 tool calls, tools used: Read, Glob, Bash.

Conversation

Turn 1 — User

Explore test files and design system Paragraph/Badge components for the treatment-plan NhrDocumentList feature.

  1. Read all existing test files in: - /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentList.test.tsx - /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListHeader/NhrDocumentListHeader.test.tsx - /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListTable/NhrDocumentListTable.test.tsx - /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListModal.test.tsx

  2. Read these story files: - /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentList.stories.tsx - /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListHeader/NhrDocumentListHeader.stories.tsx

  3. Look for a Paragraph component in the design system at /Users/USER/workspace/doctolib/oxygen/packages/ to find how it's exported and what props it accepts (particularly the font and color props).

  4. Check if there's a Badge or Counter component in /Users/USER/workspace/doctolib/oxygen/packages/ that might be used to display a result count.

  5. Read the NhrDocumentListTable component fully: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListTable/NhrDocumentListTable.tsx

  6. Read the NhrDocumentListModal component: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListModal.tsx

Report the FULL content of each file found.

Turn 1 — Assistant

I'll explore these files systematically to understand the test setup, stories, and design system components. Let me start by reading all the requested files.

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentList.test.tsx

Tool results:

→ result (ok): 1 import { render, screen } from '@testing-library/react' 2 // eslint-disable-next-line import/no-extraneous-dependencies, @doctolib-tpf/no-undeclared-dependencies 3 import { userEvent } from '@testing-library/user-event' 4 import { describe, expect, it, vi } from 'vitest' 5
6 import type { ColumnConfig, FilterConfig, NhrPatientInfo } from '../../types' 7 import { NhrDocumentList } from './NhrDocumentList' 8
9 // Mock child components 10 vi.mock('../NhrDocumentListModal/NhrDocumentListHeader/N …(truncated, 6099 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListHeader/NhrDocumentListHeader.test.tsx

Tool results:

→ result (ok): 1 import { setup } from '@doctolib/test-helpers' 2 import { screen } from '@testing-library/react' 3 import { describe, expect, it, vi } from 'vitest' 4
5 import { NhrDocumentListHeader } from './NhrDocumentListHeader' 6
7 const mockPatient = { 8 fullName: 'Camille Devailly', 9 gender: 'female' as const, 10 birthDate: '20/03/1967', 11 age: 60, 12 } 13
14 describe('NhrDocumentListHeader', () => { 15 it('should render patient full name', () => { 16 setup(<NhrDocumentListHeader pat …(truncated, 2204 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListTable/NhrDocumentListTable.test.tsx

Tool results:

→ result (ok): 1 import { setup } from '@doctolib/test-helpers' 2 import { screen } from '@testing-library/react' 3 import { describe, expect, it } from 'vitest' 4
5 import { mockColumns, mockRows } from '../../../test-helpers' 6 import { NhrDocumentListTable } from './NhrDocumentListTable' 7
8 describe('NhrDocumentListTable', () => { 9 it('should render a table', () => { 10 setup(<NhrDocumentListTable columns={mockColumns} />) 11
12 expect(screen.getByRole('table')).toBeInTheDocument() 13 }) 14 …(truncated, 1652 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListModal.test.tsx

Tool results:

→ result (ok): 1 import type { DesignSystemIconComponent } from '@doctolib/design-system-icons' 2 import { setup } from '@doctolib/test-helpers' 3 import { createTestQueryClient } from '@doctolib/tpf-commons/test-helpers' 4 import { QueryClientProvider } from '@tanstack/react-query-v5' 5 import { screen } from '@testing-library/react' 6 import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' 7
8 import { mockColumns, mockPatientInfo } from '../../test-helpers' 9 import { nhrDocumentFixtureBui …(truncated, 7389 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentList.stories.tsx

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListHeader/NhrDocumentListHeader.stories.tsx

Tool results:

→ result (ok): 1 import { MonitorWaveformRegularIcon } from '@doctolib/design-system-icons/MonitorWaveformRegularIcon' 2 import type { NhrDocument } from '@doctolib/tpf-national-health-records' 3 import type { Meta, StoryObj } from '@storybook/react' 4
5 import { createMoreActionsAction } from '../../business/factories/actions/createMoreActionsAction' 6 import { createViewDocumentAction } from '../../business/factories/actions/createViewDocumentAction' 7 import { createNhrDocumentCategoryColumn } from '../../ …(truncated, 13812 more chars)

Tool results:

→ result (ok): 1 import type { Meta, StoryObj } from '@storybook/react' 2
3 import { NhrDocumentListHeader } from './NhrDocumentListHeader' 4
5 const meta = { 6 component: NhrDocumentListHeader, 7 title: 'NhrDocumentListModal/NhrDocumentListHeader', 8 tags: ['autodocs'], 9 } satisfies Meta<typeof NhrDocumentListHeader> 10
11 export default meta 12 type Story = StoryObj<typeof meta> 13
14 const mockPatient = { 15 fullName: 'Camille Devailly', 16 gender: 'female' as const, 17 birthDate: '20/03/19 …(truncated, 347 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListTable/NhrDocumentListTable.tsx

Tool results:

→ result (ok): 1 import { Pagination } from '@doctolib/design-system/Pagination' 2 import { Table } from '@doctolib/design-system/Table' 3 import type { NhrDocument } from '@doctolib/tpf-national-health-records' 4
5 import type { ActionConfig, ColumnConfig } from '../../../types' 6 import { NhrDocumentListTableBody } from './NhrDocumentListTableBody/NhrDocumentListTableBody' 7 import { NhrDocumentListTableHead } from './NhrDocumentListTableHead/NhrDocumentListTableHead' 8
9 export type NhrDocumentListTablePr …(truncated, 593 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListModal.tsx

Tool results:

→ result (ok): 1 import { useDocuments } from '#data/documents' 2 import { wrapActions } from '#helpers/actions' 3 import { Modal } from '@doctolib/design-system/Modal' 4 import { ModalBody } from '@doctolib/design-system/ModalBody' 5 import { useMemo, useState } from 'react' 6
7 import type { ActionConfig, ColumnConfig, FilterConfig, NhrPatientInfo, SearchDocumentsFn } from '../../types' 8 import { NhrDocumentList } from '../NhrDocumentList/NhrDocumentList' 9
10 export type NhrDocumentListModalProps = { 11
…(truncated, 1354 more chars)

Now let me search for the Paragraph and Badge components in the oxygen design system:

Tools used:

  • Glob: /Users/USER/workspace/doctolib/oxygen/packages/**/Paragraph*

Tools used:

  • Glob: /Users/USER/workspace/doctolib/oxygen/packages/**/Badge*

Tools used:

  • Glob: /Users/USER/workspace/doctolib/oxygen/packages/**/Counter*

Tool results:

→ result (ok): /Users/USER/workspace/doctolib/oxygen/packages/b2b/src/dataDisplay/Paragraph.ts /Users/USER/workspace/doctolib/oxygen/packages/b2c/src/dataDisplay/Paragraph.ts /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/text/Paragraph.figma.tsx /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/text/Paragraph.stories.tsx /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/text/Paragraph.tsx [result-id: r9]

Tool results:

→ result (ok): /Users/USER/workspace/doctolib/oxygen/packages/b2b/src/dataDisplay/Badge.ts /Users/USER/workspace/doctolib/oxygen/packages/b2c/src/dataDisplay/Badge.ts /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/Badge/Badge.scss /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/Badge/Badge.stories.tsx /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/Badge/Badge.tsx [result-id: r10]

Tool results:

→ result (ok): No files found

Now let me read the Paragraph and Badge components:

Tools used:

  • Read: /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/text/Paragraph.tsx

Tool results:

→ result (ok): 1 import { _Text as Text } from './private/_Text' 2
3 type TextProps = React.ComponentProps<typeof Text> 4 export type ParagraphProps = Omit<TextProps, 'component' | 'isBlock' | 'aria-hidden'> 5
6 / Paragraph component. This will always render a p HTML element. 7 * 8 * Guidelines: 9 * - Use this element to mark up a paragraph 10 * - Don't nest multiple Paragraph. Use the Text component if you need to do that 11 * - Ellipsis** are forbidden for a11y reasons. See the [documentat …(truncated, 641 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/Badge/Badge.tsx

Tool results:

→ result (ok): 1 import type { ReactNode } from 'react' 2 import classNames from 'classnames' 3 import { Span } from '../text/Span' 4 import './Badge.scss' 5
6 export type BadgeStyle = 7 | 'info' 8 | 'error' 9 | 'success' 10 | 'warning' 11 | 'dark-info' 12 | 'mute' 13 | 'no-background' 14 | 'neutral' 15 | 'disabled' 16
17 export type BadgeProps = { 18 walkmeId?: string | undefined 19 'aria-label'?: string | undefined 20 children?: ReactNode | undefined 21 size?: 'small' | 'medium' | …(truncated, 1090 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/oxygen/packages/b2b/src/dataDisplay/Paragraph.ts

Tools used:

  • Read: /Users/USER/workspace/doctolib/oxygen/packages/b2b/src/dataDisplay/Badge.ts

Tool results:

→ result (ok): 1 export * from '@doctolib/design-system/Paragraph' 2

Tool results:

→ result (ok): 1 export * from '@doctolib/design-system/Badge' 2

Perfect! Now let me read the Paragraph and Badge stories to understand their usage better:

Tools used:

  • Read: /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/text/Paragraph.stories.tsx

Tool results:

→ result (ok): 1 import type { ComponentProps } from 'react' 2
3 import { Heading } from './Heading' 4 import { Paragraph } from './Paragraph' 5 import type { StoryConfiguration } from '@doctolib/storybook-config/types' 6 import { TextColorBadge } from './TextColorBadge' 7
8 export default { 9 tags: ['stage:stable'], 10 component: Paragraph, 11 parameters: { 12 design: { 13 type: 'devOnly', 14 }, 15 hasTestingHelpers: { rubyInMonolith: 'paragraph' }, 16 relatedComponents: ['Text', …(truncated, 3152 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/Badge/Badge.stories.tsx

Tool results:

→ result (ok): 1 import type { ComponentProps } from 'react' 2 import type { StoryObj } from '@storybook/react-vite' 3
4 import { Badge } from './Badge' 5 import type { StoryConfiguration } from '@doctolib/storybook-config/types' 6
7 type Story = StoryObj<ComponentProps<typeof Badge>> 8
9 export default { 10 tags: ['stage:stable'], 11 title: 'dataDisplay/Badge', 12 component: Badge, 13 args: {}, 14 parameters: { 15 design: { 16 type: 'figma', 17 url: 'https://www.figma.com/file/TtB …(truncated, 1170 more chars)

Perfect! Now let me create a comprehensive report. Let me check if there are any index files that export these components:

Tools used:

  • Read: /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/text

Tool results:

→ result (ERROR): EISDIR: illegal operation on a directory, read '/Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/text'

Tools used:

  • Read: /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/Badge

Tool results:

→ result (ERROR): EISDIR: illegal operation on a directory, read '/Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/Badge'

Let me check with glob for index files:

Tools used:

  • Bash: find /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/text -name "index*" -type f

Tools used:

  • Bash: find /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/Badge -name "index*" -type f

Tool results:

→ result (ok): (Bash completed with no output)

Tool results:

→ result (ok): (Bash completed with no output)

Now let me check how these components are exported from the main oxygen packages:

Tools used:

  • Bash: grep -r "export.*Paragraph" /Users/USER/workspace/doctolib/oxygen/packages/core/src/index.ts 2>/dev/null | head -5

Tool results:

→ result (ok): (Bash completed with no output)

Tools used:

  • Bash: grep -r "export.*Badge" /Users/USER/workspace/doctolib/oxygen/packages/core/src/index.ts 2>/dev/null | head -5

Tool results:

→ result (ok): (Bash completed with no output)

Based on all the information I've gathered, let me provide a comprehensive report:

COMPREHENSIVE EXPLORATION REPORT

1. TEST FILES CONTENT

NhrDocumentList.test.tsx

Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentList.test.tsx

Key Test Cases: - Renders header with patient info - Renders table with columns - Opens/closes filter panel - Updates applied filters - Reflects applied filters count in header button - Controlled mode tests: Supports both uncontrolled and controlled mode with appliedFilters + onApplyFilters props - Mocks child components: NhrDocumentListHeader, NhrDocumentListTable, NhrDocumentListFilterPanel

NhrDocumentListHeader.test.tsx

Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListHeader/NhrDocumentListHeader.test.tsx

Key Test Cases: - Renders patient full name - Renders patient gender capitalized - Renders patient birthdate and age - Doesn't render separator when birthDate is empty - Doesn't render age when age is negative (< 0) - Renders "Filters" when filterCount is 0 - Renders "Filters (3)" when filterCount is 3 - Calls onOpenFilters callback when Filters button is clicked - Uses @doctolib/test-helpers setup utility

NhrDocumentListTable.test.tsx

Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListTable/NhrDocumentListTable.test.tsx

Key Test Cases: - Renders a table element - Renders all column header labels from config - Renders skeleton loading rows by default - Renders rows using column render functions - Renders pagination component - Uses mockColumns and mockRows from test-helpers - Expected columns: Document category, Document name, Procedure date, Share date, Shared by, Status, Visibility

NhrDocumentListModal.test.tsx

Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListModal.test.tsx

Key Test Cases: - Not visible when isOpen is false - Visible when isOpen is true - Displays modal title - Calls onClose when close button clicked - Renders document table when open - Renders patient info in header - Calls searchDocuments with empty filters on mount - Renders with filters without error - Shows loading overlay during pending action onClick - Hides loading overlay after action resolves - Re-fetches documents with applied filters when filters are submitted - Wraps actions with loading state management using wrapActions helper - Uses QueryClientProvider with test query client


2. STORY FILES CONTENT

NhrDocumentList.stories.tsx

Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentList.stories.tsx

Story Variants: - Default: Basic component with mock data - Loading: Shows loading state - WithStatusColumn: Demonstrates status column with variants (success, mute, error, warning, neutral) - WithSharedByColumn: Shows author information with patient detection - WithProcedureDateColumn: Displays procedure dates from serviceInformation - WithShareDateColumn: Shows submission dates - WithDocumentNameColumn: Document title display - WithVisibilityColumn: Visibility status display - WithMultipleFilters: Category and status filter examples - WithDocumentCategoryColumn: Uses icons from design-system-icons, demonstrates category with LOINC codes - WithActions: View document and more actions buttons - WithActionsLoadingOverlay: Shows loading overlay during action execution

Sample Data Structure: - NhrDocument fields: id, title, creationDate, submissionDate, status, visibility, format, authors, classification - Authors have: id, firstName, lastName, role - Classification has codes with system (LOINC) and code values

NhrDocumentListHeader.stories.tsx

Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListHeader/NhrDocumentListHeader.stories.tsx

Story Variants: - NoFilters: filterCount = 0 - WithFilters: filterCount = 3


3. PARAGRAPH COMPONENT (DESIGN SYSTEM)

Location: /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/text/Paragraph.tsx

Key Details:

export type ParagraphProps = Omit<TextProps, 'component' | 'isBlock' | 'aria-hidden'>

export function Paragraph({
  font = 'Body/S/Regular',
  color = 'shared/text/bodyText/default',
  ...textProps
}: ParagraphProps)

Default Props: - font: 'Body/S/Regular' (can be: Body/XS/Regular, Body/XS/Bold, Body/S/Regular, Body/S/Bold, Body/M/Regular, Body/M/Bold) - color: 'shared/text/bodyText/default'

Available Colors: - Body Text: shared/text/bodyText/weaker, shared/text/bodyText/weak, shared/text/bodyText/default - Body Text Inverted: bodyText/inverted/default, bodyText/inverted/weak, bodyText/inverted/weaker - Minor Text: shared/text/minorText/weak, shared/text/minorText/default - Minor Text Inverted: minorText/inverted/default, minorText/inverted/weak

Guidelines: - Always renders <p> HTML element - Don't nest multiple Paragraph - use Text component instead - Ellipsis forbidden for a11y reasons - Content structure important for assistive technologies

Export Path: @doctolib/design-system/Paragraph (from b2b package)


4. BADGE COMPONENT (DESIGN SYSTEM)

Location: /Users/USER/workspace/doctolib/oxygen/packages/core/src/dataDisplay/Badge/Badge.tsx

Key Details:

export type BadgeProps = {
  walkmeId?: string | undefined
  'aria-label'?: string | undefined
  children?: ReactNode | undefined
  size?: 'small' | 'medium' | 'large' | undefined
  uiStyle?: BadgeStyle | undefined
  className?: string | undefined
  dataTestId?: string | undefined
}

export type BadgeStyle = 
  | 'info' | 'error' | 'success' | 'warning' 
  | 'dark-info' | 'mute' | 'no-background' 
  | 'neutral' | 'disabled'

Default Props: - uiStyle: 'warning' - size: 'medium'

Font Sizing by Size: - large: Body/S/Bold - small or medium: Body/XS/Bold

Styles (uiStyle): info, error, success, warning, dark-info, mute, no-background, neutral, disabled

Features: - Renders as <span> with .dl-badge class - Uses Span component internally with color='inherit' - Supports empty badge (when children is not 0) - Fully accessible with aria-label support

Export Path: @doctolib/design-system/Badge (from b2b package)


5. NhrDocumentListTable.tsx - FULL CONTENT

Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListTable/NhrDocumentListTable.tsx

import { Pagination } from '@doctolib/design-system/Pagination'
import { Table } from '@doctolib/design-system/Table'
import type { NhrDocument } from '@doctolib/tpf-national-health-records'

import type { ActionConfig, ColumnConfig } from '../../../types'
import { NhrDocumentListTableBody } from './NhrDocumentListTableBody/NhrDocumentListTableBody'
import { NhrDocumentListTableHead } from './NhrDocumentListTableHead/NhrDocumentListTableHead'

export type NhrDocumentListTableProps = {
  columns: ColumnConfig[]
  isLoading?: boolean
  rows?: NhrDocument[]
  actions?: ActionConfig[]
}

export const NhrDocumentListTable = ({ columns, isLoading = true, rows = [], actions }: NhrDocumentListTableProps) => (
  <div>
    <Table>
      <NhrDocumentListTableHead columns={columns} />
      <NhrDocumentListTableBody columns={columns} isLoading={isLoading} rows={rows} actions={actions} />
    </Table>
    <Pagination cur

…(truncated, 3358 more chars)

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date