Перейти к содержимому

← Skills

declare-when-a-setting-takes-effect

Настройка, которая успешно сохраняется и ничего не меняет до перезапуска, хуже той, что завершается ошибкой. Укажите, когда она вступает в силу, и выводите это из того места, где её читают.

ПаттернПроисхождение: cleanСостояние: activev0.1.0 · Apache-2.0

Присвоено человеком, который прочитал карточку, а не заявлено файлом о самом себе. Карточка, которую агент выводит во время запуска, поглотившего недоверенное содержимое, рождается заражённой и удерживается на разбор, прежде чем её вообще извлекут.

Когда это вспоминается

  • добавляю экран настроек
  • конфиг закеширован
  • почему изменение не применилось
  • нужен перезапуск

Ценность обычно лежит в разделах «Избегать» и «Проверить». «Делать» — это раздел, который пишут все.

Текст карточки выше — перевод. Английский оригинал — это то, что импортирует командная строка, что читает агент во время работы и что подтверждает хеш ниже.

Повод

Вы выставляете настройку в пользовательском интерфейсе, а код, который её потребляет, читает значение не при каждом использовании, а в какой-то другой момент: при старте процесса, при сборке сессии или в кэшируемый объект.

Это не относится к настройке, читаемой при каждом использовании. Такие применяются немедленно и не должны говорить ничего: заметка о задержке, которой нет, воспитывает то же недоверие, что и отсутствующая.

Делать

  1. Для каждой настройки найдите строку, которая её читает. Когда она применяется — свойство этой строки, а не элемента управления.
  2. Предпочтите сделать чтение живым. Свойство, вычисляемое при обращении, обычно ничего не стоит и снимает проблему вместо того, чтобы её описывать.
  3. Там, где это действительно невозможно — что-то запускается на старте, — снабдите настройку меткой и генерируйте метку с сервера или из того же модуля, который знает место чтения, чтобы метка не могла разойтись с реальностью.
  4. Сгруппируйте метки в осмысленные классы: применяется сейчас, применяется со следующего разговора, применяется после перезапуска.

Избегать

Экран настроек, который подтверждает сохранение и тихо ничего не делает. Это хуже ошибки: ошибка отправляет пользователя искать причину, а успех отправляет его винить функцию, модель или самого себя.

Не захардкоживайте список «требует перезапуска» в интерфейсе. Этот список — копия знания, живущего в другом месте, и он протухнет при первом же переезде места чтения, причём молча, — а именно так исходная проблема и возникла.

Избегайте общей заметки «некоторые настройки требуют перезапуска». Она верна, бесполезна и накрывает собой те, которые не требуют.

Проверить

Измените настройку, воспользуйтесь функцией и наблюдайте за поведением, а не за экраном. Прочтите значение обратно из работающей системы, а не из формы, которую вы только что отправили.

Механическая версия: проверьте, что ни одна настройка не помечена как немедленная и что каждая выставленная интерфейсом настройка присутствует в классификации, которую публикует сервер.

Риск

Метки добавляют шум на экран настроек, а экран, где значок стоит в каждой строке, — это экран, где значки не значат ничего. Метка нужна только отложенным.

Более глубокий риск — считать метку решением. Объявить, что элемент управления бездействует до перезапуска, честно; сделать его живым — лучше, и метка не должна превратиться в удобный способ уклониться от более трудного изменения.

Как применить

Карточка — это данные. Склонируйте репозиторий и импортируйте её по пути: всё, что приходит по сети, считается заражённым и удерживается до одобрения — это и есть желаемое поведение, и поэтому здесь нет установщика в одну строку.

git clone https://github.com/brcampidelli/chimera-agent.git
chimera skills-import chimera-agent/skills/declare-when-a-setting-takes-effect/SKILL.md

Целостность

SHA-256 файла в опубликованном виде. Импортёр может проверить, что полученное совпадает с показанным на этой странице.

2f1c9fd86ac24a61af75b11945b5042d1a2b53ef081cd9a87c3031d5fa97fcf3

Читать карточку в репозитории →