Skip to content

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 24 Jul 17:57
9316447

Changelog

  • c45aca5 Preparation
  • b9dac50 chore(github): публикация оформлена — шаблоны, dependabot, релиз по тегу
  • 4aa5486 chore(live): id проектов переезжают в некоммитящийся .env
  • 88ae353 chore(live): у живого сьюта больше нет проекта по умолчанию
  • 824ea0f chore(reference): удалён второй источник правды, форма первого закреплена
  • cc6ad88 ci: actions закреплены на SHA, релизы получают provenance
  • 2be657c ci: govulncheck добавлен, staticcheck закреплён — пины противоположны намеренно
  • 9fc539e docs!: доки исполнены после миграции; три утверждения были ложью и до неё
  • f93bc97 docs(CLAUDE): два новых инварианта и то, чем они куплены
  • 3896f34 docs(CLAUDE): инвариант 15 — атомарная запись, и чем куплена каждая деталь
  • 95ad719 docs(claude): инвариант 22 фиксирует подсказку и её охрану
  • 775a70e docs(cmd): выправить doc-комментарии, отставшие от разъезда пакетов
  • 84994cc docs(contributing): main защищён — правила merge названы, а не подразумеваются
  • 7606e19 docs(files): у cp появилось описание; README перечисляет реальные ключи
  • bc78a4a docs(protocol): длинная строка нечитаема одним лейном и читаема другим — измерено
  • 5efebc7 docs(protocol): отсутствие окна у get_conversation доказано контролем, а не совпадением хэша
  • 4686911 docs(protocol): у get_conversation окна нет — 29 полей проверены, все игнорируются
  • 16f0f6b docs(readme): снято ещё одно ложное утверждение о том, что делает только fetch
  • a7cc292 docs(sync): dsx pin, README и CLAUDE.md — леджер под .dsx/, инвариант 17
  • 0dc263a docs(syncer): комментарий цитировал строку, которую сам же и переписал
  • 5724606 docs(syncer): ответы на два замечания ревью, одно из них на ложной посылке
  • ad2ade7 docs(syncer): снята переоценка в комментарии — глотание ошибки не единственное
  • fdb9cc0 docs(syncer): убрано ложное утверждение про diff в комментарии и CLAUDE.md
  • dc1ee97 feat(binary): открыт server→disk для файлов, которые read_file не отдаёт
  • 9316447 feat(ci,docs): поставляемые бинари запускаются перед выкладкой; установка без Go
  • 205c70b feat(cli)!: help --json отдаёт реестр вместо человеческой прозы
  • 80ae20d feat(cli)!: project, ds и plan становятся существительными; support-js уезжает к проекту
  • 0d76581 feat(cli)!: двухтокенная адресация noun+verb; conv переведён первым
  • 1350330 feat(cli): dsx -C — глобальный, до глагола, как у git
  • 072858c feat(cli): dsx projects печатает колонки id/name
  • bd02fa6 feat(cli): put предупреждает о леджере рядом
  • b1e42b3 feat(cli): tree и cat читают привязку каталога
  • eca408a feat(cli): мёртвая плоская форма называет замену, а не только dsx help
  • a354cf2 feat(cli): показать флаги команды по -h и перестать врать в usageFooter
  • 64fa6ad feat(cmd): ответ инструмента проходит через одно место и по умолчанию читаем
  • 8079bb4 feat(cmd): три необёрнутых инструмента, и починен справочник, из-за которого их не замечали
  • 0839a96 feat(conv): --json отдаёт разбираемый документ вместо строки в {"text":…}
  • 178d08d feat(conv): обрезанное тело спасается до целых элементов, а не до всего, что распарсилось
  • 711471d feat(conv): обрезанный транскрипт отвечает строкой, а не четвертью мегабайта
  • 02e27de feat(files)!: files становится существительным; preview переезжает под него
  • f2691de feat(mcp): уведомление о повторе на stderr
  • c348146 feat(members)!: member становится существительным; sharing уезжает к проекту
  • 0b2539e feat(reply): измеренные ответы инструментов рисуются для человека
  • 2fb83ad feat(sync)!: pull -n и push -n возвращают 3 при конфликтах — как настоящий запуск
  • a5551a9 feat(sync)!: status отвечает с диска, без единого запроса к серверу
  • a3d0672 feat(sync)!: sync-глаголы не берут аргументов вовсе
  • eaf0b9d feat(sync)!: только clone и pin называют проект; остальные читают его из леджера
  • 38739df feat(sync): clone — первый pull, названный своим именем
  • 6b1aa94 feat(sync): dsx diff — same/local-only/remote-only/differs, без хексов в контексте
  • d7af87b feat(sync): dsx fetch — узнать серверные байты, не трогая дерево
  • b55703e feat(sync): dsx push --force-with-lease; cmdSync разделён на cmdPull и cmdPush
  • edb36d3 feat(sync): dsx unpin — выход из привязки, которая ещё ничего не синкала
  • cd1bf33 feat(sync): fetch записывает весь листинг сервера, не только доказанное
  • 87ace80 feat(sync): глаголы находят корень снизу — dsx pull работает из подкаталога
  • 142b976 feat(sync): движок --force-with-lease — перезапись только того, что не двигалось
  • 5548ee4 feat(syncer): FindRoot — поиск леджера вверх по дереву, как git ищет .git
  • c6eb5aa feat(syncer): pull записывает снимок листинга, который и так держал в руках
  • 510ebc3 feat(syncer): stale proof — доказательство устарело, а не "не проверяли"
  • dc93939 feat(syncer): доказанное совпадение байт — Verified, не Conflicts
  • fe1c718 feat(syncer): конфликт называет способ посмотреть
  • c0442ad feat(syncer): счётчик передачи на stderr
  • 84327ef feat(syncer): фундамент бейзлайна fetch — отдельный файл, отдельный тип
  • 37ccdbd feat: cross-platform auth, exit codes, .dsxignore, doctor
  • 34dbc1a feat: dsx — прямой клиент Claude Design MCP
  • 04f2fde fix(cli)!: флаг перед глаголом больше не глотает команду с exit 0
  • dbca5a9 fix(cli): completion раздаёт флаги по команде, а не один список всем
  • 90aba7f fix(cli): «UUID вместо каталога» перестаёт советовать вред
  • 7839ff3 fix(cli): отчёт на пути ошибки перестаёт выглядеть успехом
  • 06c127f fix(cli): сухой прогон больше не создаёт каталог
  • 4418d80 fix(cli): убрать мёртвый код, разблокировать staticcheck
  • ec01dfe fix(cmd): хвостовой лишний аргумент — usage-ошибка, не тихий exit 0
  • 9de1308 fix(completion): fish проверяет позицию, а не вхождение слова
  • 49f3fa0 fix(completion): глагол без аргументов не предлагает файлы
  • 564e68e fix(dsxerr): назвать отказы файловой системы и протокола своими именами
  • 04d8cfb fix(files)!: снят мёртвый --render, и закрыта причина, по которой он таким стал
  • cd7d663 fix(files): tree и cat находят ledger, поднимаясь вверх, как sync-глаголы
  • 2339478 fix(live): судья fetch отстал от preview-лейна и падал раньше, чем судил
  • eabbd30 fix(mcp): ужесточить сборку оконного read_file
  • 4b4446d fix(members): add называет ту ошибку, которую нашёл, а не соседнюю
  • 5dcf9f9 fix(push): status после push кричал «server moved ahead» на то, что push и записал
  • 0cc7f20 fix(reply): состязательный разбор — 15 находок, каждая с мутацией
  • e1c36df fix(sync): clone отказывает каталогу с чужим .dsx
  • 3233aab fix(sync): отказ без леджера больше не обещает память, которой нет
  • 0cc4b58 fix(syncer)!: LoadState отказывается от повреждённого леджера
  • 565c0fa fix(syncer)!: endpoint в леджере — охранник, а не мёртвое поле
  • df3e1fd fix(syncer)!: push перестал воскрешать удалённое и конфликтовать вечно
  • 739bd9a fix(syncer)!: леджер переезжает в .dsx/state.json, без миграции
  • 3ccf599 fix(syncer)!: отчёт — запись прогона, а не снимок плана
  • 54840cf fix(syncer): .dsx — builtin-игнор ещё до переезда леджера
  • 4854416 fix(syncer): аренда покрывает и удаление — --force-with-lease --prune больше не стирает чужое
  • 075aeb3 fix(syncer): временные файлы леджера попадают под builtinIgnores
  • caf0c1d fix(syncer): доказанное расхождение — не "никогда не проверяли"
  • eb78982 fix(syncer): закрыть потерю данных на симлинк-корне, prune и коллизиях
  • ca4ae45 fix(syncer): непроверенный конфликт больше не врёт про diff и force
  • 5524340 fix(syncer): первый pull в грязный каталог не пишет ни байта
  • 6098d7e fix(syncer): термин-гард WalkTree, хинты prune, симметрия etag + parity-тест
  • 0985489 fix(syncer): файлы пользователя пишутся атомарно, как леджер
  • a0e3604 fix: close every defect the adversarial review confirmed
  • e4d6751 fix: close the residuals round two reported but did not reach
  • c0e491f fix: close what round two found, including four fixes that did not hold
  • 5f58d80 fix: decide path identity by asking the filesystem, not by folding in Go
  • e3f8880 fix: report a partial write, and refuse arguments a command does not take
  • 3ce8b05 fix: stop splicing the server's truncation notice into reassembled files
  • 4b4d381 fix: the case probe must not be able to litter the directory it probes
  • 67d9ffd fix: закрыть 11 дефектов dsx, найденных состязательным ревью
  • 1d70c0e fix: закрыть UX/DX/тест/безопасность-разрывы по мультиролевому гейту
  • c86ea1d fix: закрыть дыры, которые нашло состязательное ревью Фазы 1
  • 2597219 fix: клампить concurrency там, где строится семафор, а не в вызывающих
  • 31620c5 fix: сплавить двусторонний фильтр в survey — инвариант 9 у поставщика
  • 43048a3 merge: Фаза 1 — укрепить инварианты, не создавая ни одного пакета
  • 7a37934 merge: Фаза 2 — разложить плоский main по шести пакетам; в корне остался main.go
  • 011ab5d merge: Фаза 3 — реестр команд и разъезд групп по пакетам internal/cmd
  • 2f727ef perf(diff): tracked-путь доказывается ledger'ом, а не повторной загрузкой
  • 2b64f76 perf(syncer): всё дерево одним вызовом, с отказом от любого ответа не той формы
  • 270e6b2 refactor(cli): --json только через хелпер, -j через константу и один дом документации
  • 502fd80 refactor(cli): вынести emit и разбор аргументов в свои файлы
  • cd7d94c refactor(cli): реестр команд — три списка свести к одному
  • 18ee1d3 refactor(cmd): выделить ядро команд в internal/cmd
  • fe43f61 refactor(cmd): вынести группу conv в internal/cmd/conv
  • e4de025 refactor(cmd): вынести группу escape в internal/cmd/escape
  • f0f54f9 refactor(cmd): вынести группу files в internal/cmd/files
  • ad4d716 refactor(cmd): вынести группу members в internal/cmd/members
  • 6415ccc refactor(cmd): вынести группу plans в internal/cmd/plans
  • 4bd5544 refactor(cmd): вынести группу projects в internal/cmd/projects
  • c486d0b refactor(cmd): вынести группу sync в internal/cmd/sync
  • 78eab3f refactor(pkg): вынести CLI в internal/cli — в корне остался main.go
  • 19ee0f5 refactor(pkg): вынести auth в internal/auth
  • 20a847a refactor(pkg): вынести exit.go в internal/dsxerr — первый лист
  • b4b6b4f refactor(pkg): вынести truncate и humanBytes в internal/fmtutil
  • 3bb08d0 refactor(pkg): вынести синхронизацию в internal/syncer — корень 35 → 14
  • beca533 refactor(pkg): вынести транспорт в internal/mcp и фейк в internal/mcptest
  • aaaaf65 refactor(pkg): расщепить review-тесты по границе syncer и увести ConflictOutcome
  • 6ce1c32 refactor(pkg): экспортировать будущую поверхность syncer, не двигая файлы
  • e163e59 refactor(sync): три литеральных NewFlagSet вместо выражения
  • 3f4ec18 refactor(syncer): StatePath заменяет StateFileName, путь пока старый
  • 86f5745 refactor(syncer): заморозить legacyStateFileName отдельно от StateFileName
  • 6aec11e refactor: снять придирки перед показом — мёртвый код, идиома, UX-утечка
  • 459dfc7 refactor: собрать путь finalize_plan в grant.go
  • 57161ad refactor: удалить sortStrings и asToolError в пользу stdlib
  • b7ea876 test(cli),ci: закрыть alias-слепоту гарда групп и убрать тест-хелперы из coverpkg
  • e8b3e39 test(cli): extraargs-гард ведётся реестром, не ручным списком
  • 0237880 test(cli): flagSetOwners объединяет, а не перетирает
  • c71c31e test(cli): охрана имён расширена на всё, что инструктирует, а не только README
  • 6c46547 test(cli): сквозные таблицы диспатчат по имени, а не зовут функцию
  • abff5e5 test(completion): позиционный тест fish проверяется на префиксе глагола
  • 9cccbec test(conv): обе формулировки сноски закреплены живьём, каждая с парным контролем
  • 746fe1f test(files): голая dsx ls внутри привязанного каталога — отказ под охраной
  • 5564bbc test(live)+docs(PROTOCOL): форма ответа list_projects
  • 0cb6a06 test(live): зонд — этаг выводится из содержимого или из ревизии?
  • b8c79e4 test(live): песочница вместо боевой дизайн-системы по умолчанию
  • 84ade70 test(live): решение вынесено из-под тега, плюс страж на пустые тесты
  • 5d06d28 test(live): судья для fetch-бейзлайна вынесен из-под тега
  • 3ce6557 test(live): судья для push→pull round trip; шаг 2 закончен
  • 4509ed4 test(live): этаг-зонд стал утверждением; тест fetch-бейзлайна починен
  • a1cdffd test(sync): .dsx-проба clone закрыта для файла и симлинка, не только каталога
  • 23323be test(sync): снимок обязан записываться уже отфильтрованным
  • 5f8c89c test(syncer): baseline.json — рукописный golden, а не самосогласованный
  • c4bc742 test(syncer): diverged догнал proven и staleProof по стражам
  • 099b078 test(syncer): закрыт пробел, на который указало ревью — снимок, который УЖЕ есть
  • 60677ad test(syncer): прогон, упавший на середине, снимок всё равно оставляет

Curated, caller-facing notes: CHANGELOG.md.
The list above is the raw commit history.