fix(memory+spec): drop host segment from memory path + spec-status argv off-by-one #12
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/memory-spec/drop-host-and-offbyone"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что сделано
Фикс 1 — Memory path (убрать host сегмент)
pipeline-status.py:_resolve_memory_base— путь изменён сrepos/{host}/{org}/наrepos/{org}/(host сегмент убран)pipeline-status.py:21— docstring MEMORY phase обновлёнmemory-syncer.md— все упоминания{host}/{org}/{repo}→{org}/{repo}memory/SKILL.md— path format обновлёнgit mvизrepos/github.com/slaid098/вrepos/slaid098/(отдельный commit в memory repo)tests/test_pipeline_status.py— обновленыtest_resolve_memory_base*, добавленtest_memory_path_no_host_segment, обновленыtest_get_memory_files_*Фикс 2 — spec-status.py off-by-one
spec-status.py:153-156— dispatchgh issue view N --repo R:args[2]→args[3](номер issue, не"view"),len(args) > 2→len(args) > 3tests/test_spec_status.py— добавлены 3 теста (dispatch, non-digit, too-few-args)Почему
Фикс 1
Host сегмент
repos/github.com/slaid098/дублировал git host как уровень директории без пользы. Убирание упрощает path.Фикс 2
args[2]="view"(никогда не digit),args[3]= номер issue. Проверкаargs[2].isdigit()всегда False → dispatch ломался. Зеркальный баг к #283908d(pipeline-status, уже фиксирован).Watch out
~/.local/share/opencode/opencode-memory(commit2dba97e) — отдельный git-репо, НЕ часть этого PR.parse_remote_urlсигнатура не менялась — host просто не используется в path.pipeline-status.pyуже имел правильный dispatch (args[3]) — off-by-one был только вspec-status.py.Pending
related:в frontmatter memory файлов не обновлялись (metadata, не path).Closes #11
Code Review Summary
Два точечных багфикса: (1) убран host-сегмент из memory path
repos/{host}/{org}/{repo}.md→repos/{org}/{repo}.md, (2) исправлен off-by-one вspec-status.pydispatchgh issue view(args[2]→args[3]). Оба фикса корректны, тесты покрывают оба, writer↔reader (memory-syncer.md ↔ pipeline-status.py) обновлены совместно в одном PR. CI green.Positives
_resolve_memory_baseвозвращаетMEMORY_DIR / org(host отбрасывается через_host— conventional unused-var).get_memory_files()иcheck_memory()используют_resolve_memory_base()→ не сломаны.get_repo_full_name()уже возвращалorg/repo(host не использовался) → не затронут.parse_remote_urlсигнатура не менялась — обратная совместимость сохранена.args = ["gh", "issue", "view", "123", "--repo", ...]→args[2]="view"(никогда не digit),args[3]="123"(issue number). Старая проверкаargs[2].isdigit()всегда False → dispatch ломался. Новыеargs[3]+len(args) > 3(IndexError guard) — правильно. Зеркальный баг к pipeline-status (уже фиксирован ранее)._resolve_memory_base*обновлены, добавлен regression-тестtest_memory_path_no_host_segment(проверяет чтоgithub.comНЕ path component). 4 тестаget_memory_files_*обновлены (tmp_path / "slaid098"вместоtmp_path / "github.com" / "slaid098"). 3 новых теста для spec-status dispatch (digit, non-digit, too-few-args). Все тесты содержат осмысленные assertions.memory-syncer.md— 5 вхождений,memory/SKILL.md— 2 вхождения) и reader (pipeline-status.py:_resolve_memory_base) обновлены в одном PR — окно сломанного main закрыто.## Что сделано,## Почему,## Watch out,## Pending) заполнены осмысленно. Миграция memory repo (22 файлаgit mv) задокументирована в Watch out.Suggestions (info, not blocking)
repos/{host}/{org}/{repo}.mdне обновлено — осталось stale после drop host segment. Это описание workflow в issue skill (документация, не исполняемый промпт). Memory-syncer читает свой собственный.md(обновлён) +skill("memory")(обновлён) → runtime path корректен, но текст рассинхронизирован. Fix:repos/{host}/{org}/{repo}.md→repos/{org}/{repo}.md.repos/{host}/{org}/{repo}.mdи{host}/{org}/{repo}— не обновлено. Template E ссылается наmemory-syncer.md:38для деталей (источник истины обновлён), но inline-ярлык в шаблоне вводит в заблуждение. Fix: обе строки →{org}/{repo}.Verdict: APPROVE