(medium) migrate_kg_to_obsidian.py _moc_for_subdir/sort_key: хроносортировка MOC вырождается в обратно-алфавитную из-за None от extract_date #1492

Closed
opened 2026-06-15 05:58:40 +00:00 by bot-backend · 1 comment
Collaborator

Severity: medium · Категория: report · Файл: scripts/migrate_kg_to_obsidian.py:519-528

migrate_kg_to_obsidian.py:519-528. sort_key: d = extract_date(name) or '0000'; sorted(reverse=True). Из-за бага \b (находка по 85-116) extract_date==None для всех датированных entity, ключ у всех = ('0000', name) → сортировка идёт только по name в обратном порядке, не по дате. Дополнительно d_str (525-526) пуст → колонка даты отсутствует в списке Entities, и поле date во frontmatter (328-329) тоже не пишется. Импакт: MOC показывает entity в неверном (обратно-алфавитном) порядке без дат. Починка: устранить корневой баг extract_date; после этого сортировка и метки даты заработают автоматически.

Почему баг: Прямое следствие проверенного бага \b: при d==None для каждого имени кортеж ключа одинаков по первому элементу '0000', значит порядок определяется только reverse-сортировкой по name. Заявленное в комментарии 'сортируем по дате (новые сверху)' не выполняется. В клиентской навигации vault MOC показывает entity в неверном (алфавитном) порядке и без дат.

Как чинить: Починить extract_date (ведущий \b). После этого sort_key начнёт работать; дополнительно для кварталов '2026-Q1' учесть, что строковое сравнение с 'YYYY-MM-DD' корректно сортирует год, но Q vs MM смешивает форматы — при необходимости нормализовать к сопоставимому виду.


deep-audit «армия ботов 2» · verify+harden, confidence 0.93 · unit U111

**Severity:** medium · **Категория:** report · **Файл:** `scripts/migrate_kg_to_obsidian.py:519-528` migrate_kg_to_obsidian.py:519-528. sort_key: d = extract_date(name) or '0000'; sorted(reverse=True). Из-за бага \b (находка по 85-116) extract_date==None для всех датированных entity, ключ у всех = ('0000', name) → сортировка идёт только по name в обратном порядке, не по дате. Дополнительно d_str (525-526) пуст → колонка даты отсутствует в списке Entities, и поле date во frontmatter (328-329) тоже не пишется. Импакт: MOC показывает entity в неверном (обратно-алфавитном) порядке без дат. Починка: устранить корневой баг extract_date; после этого сортировка и метки даты заработают автоматически. **Почему баг:** Прямое следствие проверенного бага \b: при d==None для каждого имени кортеж ключа одинаков по первому элементу '0000', значит порядок определяется только reverse-сортировкой по name. Заявленное в комментарии 'сортируем по дате (новые сверху)' не выполняется. В клиентской навигации vault MOC показывает entity в неверном (алфавитном) порядке и без дат. **Как чинить:** Починить extract_date (ведущий \b). После этого sort_key начнёт работать; дополнительно для кварталов '2026-Q1' учесть, что строковое сравнение с 'YYYY-MM-DD' корректно сортирует год, но Q vs MM смешивает форматы — при необходимости нормализовать к сопоставимому виду. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.93 · unit U111</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:58:40 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:02:13 +00:00
Owner

🔍 week ревью 1 — верификация (ПОДТВЕРЖДЕНО)

Текущее состояние кода: scripts/migrate_kg_to_obsidian.py:518-528 (sort_key внутри генерации MOC).

Корень: :519-521 sort_key = (extract_date(name) or "0000", name), далее sorted(..., reverse=True) (:522). Из-за бага ведущего \b (см. #1491) extract_date возвращает None для всех датированных entity → первый элемент кортежа у всех '0000' → порядок определяется только reverse-сортировкой по name (обратно-алфавитный), а не по дате. Дополнительно d_str (:525-526) пуст → колонка даты в списке Entities отсутствует, и date во frontmatter не пишется. Это прямое следствие #1491, отдельной логической ошибки в sort_key нет.

Что править:

  • Починить корневой extract_date (#1491) — после этого сортировка и метки даты заработают автоматически.
  • Дополнительно: формат кварталов '2026-Q1' (:110) смешивается с 'YYYY-MM-DD' при строковом сравнении — '2026-Q1' сортируется после '2026-12-31' (Q > 1). Нормализовать квартал к сопоставимому виду (напр. '2026-01-Q1' или mid-month дате), если важен точный межформатный порядок.

Что посмотреть:

  • Код: migrate_kg_to_obsidian.py:518-528, :97-116; блокирован #1491.
  • Vault: релевантных заметок не найдено.
**🔍 week ревью 1 — верификация (ПОДТВЕРЖДЕНО)** **Текущее состояние кода:** `scripts/migrate_kg_to_obsidian.py:518-528` (`sort_key` внутри генерации MOC). **Корень:** `:519-521` `sort_key` = `(extract_date(name) or "0000", name)`, далее `sorted(..., reverse=True)` (:522). Из-за бага ведущего `\b` (см. #1491) `extract_date` возвращает `None` для всех датированных entity → первый элемент кортежа у всех `'0000'` → порядок определяется только reverse-сортировкой по `name` (обратно-алфавитный), а не по дате. Дополнительно `d_str` (:525-526) пуст → колонка даты в списке Entities отсутствует, и `date` во frontmatter не пишется. Это прямое следствие #1491, отдельной логической ошибки в sort_key нет. **Что править:** - Починить корневой `extract_date` (#1491) — после этого сортировка и метки даты заработают автоматически. - Дополнительно: формат кварталов `'2026-Q1'` (`:110`) смешивается с `'YYYY-MM-DD'` при строковом сравнении — `'2026-Q1'` сортируется после `'2026-12-31'` (Q > 1). Нормализовать квартал к сопоставимому виду (напр. `'2026-01-Q1'` или mid-month дате), если важен точный межформатный порядок. **Что посмотреть:** - Код: `migrate_kg_to_obsidian.py:518-528`, `:97-116`; блокирован #1491. - Vault: релевантных заметок не найдено.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1492
No description provided.