Reconcile the wiki metadata field with the domain layer #32

Closed
opened 2026-08-10 12:32:04 +00:00 by claude · 0 comments
Collaborator

Summary

skills/issue/references/format.md:67 описывает поле wiki: как domain-owned и
ставит его в таблицу полей между depends и origin. В issue.py такого поля
нет: DOMAIN_KEYS (issue.py:116) его не содержит, LIST_KEYS — тоже. Формат
— единственный источник правды, и он расходится с парсером.

Spec

skills/issue/references/format.md

Steps to reproduce

  1. grep -rn 'wiki' skills/issue/scripts/ — ни одного совпадения.
  2. Положить в стор issue с wiki: [Simple Chains/Ideas/Chain core] (пример из
    format.md:45) и прогнать любой скрипт, который перечитывает и сохраняет
    файл, например issue_ac.py <id> --check 1.
  3. Посмотреть на порядок полей в получившемся файле.

Expected

Либо wiki: действительно domain-поле: issue.py знает его, оно попадает в
DOMAIN_KEYS и LIST_KEYS, рендерится на своём месте (после depends, перед
origin), а issue_new.py умеет его выставлять. Либо format.md перестаёт
называть его domain-полем и описывает как то, чем оно является.

Actual

Поле проваливается в extra (issue.py:293) и рендерится в блоке чужих
ключей — отсортированным вместе с branch, gitea, synced, url, то есть
после sync-полей. Это прямо противоречит соседней строке того же документа:
«Domain fields render first, in the order above» (format.md:73).

Второй эффект: без записи в LIST_KEYS список без скобок (wiki: A, B)
разбирается как одна строка, а не как список — работает только инлайновая форма
[A, B], и то потому, что parse_meta (issue.py:210) обрабатывает скобки для
любого ключа.

Третий: issue_new.py не умеет проставить поле, у которого нет флага, а
issue_check.py не проверяет ни его наличие, ни форму.

Environment

Ветка main, коммит 2ac3015. Замечено при чтении format.md во время работы
над #20.

Acceptance criteria

  • format.md и issue.py согласованы: либо поле реализовано в домене, либо
    описание в таблице полей приведено к реальности
  • если реализовано — wiki: есть в DOMAIN_KEYS и LIST_KEYS, а issue с
    этим полем после round-trip через Issue.from_text / to_text рендерит
    его среди domain-полей
  • есть тест на выбранное поведение в tests/
<!-- tea:id reconcile-the-wiki-metadata-field-with-the --> ## Summary `skills/issue/references/format.md:67` описывает поле `wiki:` как domain-owned и ставит его в таблицу полей между `depends` и `origin`. В `issue.py` такого поля нет: `DOMAIN_KEYS` (`issue.py:116`) его не содержит, `LIST_KEYS` — тоже. Формат — единственный источник правды, и он расходится с парсером. ## Spec skills/issue/references/format.md ## Steps to reproduce 1. `grep -rn 'wiki' skills/issue/scripts/` — ни одного совпадения. 2. Положить в стор issue с `wiki: [Simple Chains/Ideas/Chain core]` (пример из `format.md:45`) и прогнать любой скрипт, который перечитывает и сохраняет файл, например `issue_ac.py <id> --check 1`. 3. Посмотреть на порядок полей в получившемся файле. ## Expected Либо `wiki:` действительно domain-поле: `issue.py` знает его, оно попадает в `DOMAIN_KEYS` и `LIST_KEYS`, рендерится на своём месте (после `depends`, перед `origin`), а `issue_new.py` умеет его выставлять. Либо `format.md` перестаёт называть его domain-полем и описывает как то, чем оно является. ## Actual Поле проваливается в `extra` (`issue.py:293`) и рендерится в блоке чужих ключей — отсортированным вместе с `branch`, `gitea`, `synced`, `url`, то есть **после** sync-полей. Это прямо противоречит соседней строке того же документа: «Domain fields render first, in the order above» (`format.md:73`). Второй эффект: без записи в `LIST_KEYS` список без скобок (`wiki: A, B`) разбирается как одна строка, а не как список — работает только инлайновая форма `[A, B]`, и то потому, что `parse_meta` (`issue.py:210`) обрабатывает скобки для любого ключа. Третий: `issue_new.py` не умеет проставить поле, у которого нет флага, а `issue_check.py` не проверяет ни его наличие, ни форму. ## Environment Ветка `main`, коммит `2ac3015`. Замечено при чтении `format.md` во время работы над `#20`. ## Acceptance criteria - [ ] `format.md` и `issue.py` согласованы: либо поле реализовано в домене, либо описание в таблице полей приведено к реальности - [ ] если реализовано — `wiki:` есть в `DOMAIN_KEYS` и `LIST_KEYS`, а issue с этим полем после round-trip через `Issue.from_text` / `to_text` рендерит его среди domain-полей - [ ] есть тест на выбранное поведение в `tests/`
claude added this to the Self-improvement milestone 2026-08-10 12:32:04 +00:00
claude added the comp/issue
type
bug
severity
low
labels 2026-08-10 12:32:04 +00:00
Sign in to join this conversation.