Документация
Ручное сквозное рабочее испытание
Руководство проверяет реализованные сценарии и важные пользовательские сбои. Среда — macOS с zsh/bash. Сначала пройдите рабочий путь в настоящих клиентах. Намеренное повреждение, смену привязок и полный reset выполняйте в отдельном лабораторном терминале.
Для каждого случая запишите PASS, FAIL либо SKIPPED и доказательство. Пропуск не считается успехом. Точные по времени аварии, конкуренция, сбои диска и истечение токенов остаются в автоматических тестах.
Сначала получите работающий Hub
Короткий путь — быстрый старт: проверьте ahub quick, подтвердите план в терминале либо примените выданную команду, перезапустите клиентов. Это общие инструменты, навыки и инструкции без проекта. Необязательный ahub project connect /path/to/project отдельно подключает память, контекст и hooks Git-проекта. В UI действия Set up shared Hub и Connect project memory разделены.
Нумерованный путь ниже намеренно использует отдельные команды и явные ID для подробного испытания. Если project connect уже зарегистрировал checkout, проверьте memory project ls и используйте его привязку, не назначая другой ID примера. Сбои проверяйте в лаборатории.
0. Подготовьте рабочий терминал
Установите CLI по быстрому старту. Используйте установленный ahub без shell-wrapper и привязки cwd к исходникам. Путь runtime нужен только для явного запуска Memory MCP ниже.
command -v ahub
ahub --version
export AHUB_NODE="$(command -v node)"
export AHUB_CLI="$(node -e 'process.stdout.write(require("node:fs").realpathSync(process.argv[1]))' "$(command -v ahub)")"
export AHUB_RUN="$(mktemp -d /tmp/agent-hub-manual.XXXXXX)"
chmod 700 "$AHUB_RUN"
node --version
ahub status
ahub memory project ls
Запишите коммит, версии клиентов, реальную папку Hub, профиль DSH, пути, backup ID и наблюдения в локальный лист результатов. Оригиналы и архивы должны оставаться закрытыми.
Используйте свои AGENT_HUB_HOME и переопределения клиентов; по умолчанию Hub — ~/.agent-hub. Ahub init --yes выполняйте только при намеренном создании нового Hub: init пишет файлы и не является preview.
Создайте два одноразовых репозитория:
export AHUB_PROJECT="$AHUB_RUN/project-a"
export AHUB_OTHER="$AHUB_RUN/project-b"
mkdir -p "$AHUB_PROJECT" "$AHUB_OTHER"
git -C "$AHUB_PROJECT" init -q
git -C "$AHUB_OTHER" init -q
Проекты одноразовые, но рабочий путь после подтверждения меняет настоящие настройки клиентов. Во время записи держите клиентов неактивными. До первого применения скопируйте затрагиваемые настройки и инструкции в закрытое место, отметьте отсутствующие файлы и цели ссылок. Сохраните recovery Hub: первый baseline может быть старше испытания.
Правило preview/apply
Для каждого dry run:
- Проверьте пути, действия и конфликты.
- Выполните точную выданную команду в том же настроенном терминале с --expect и любым --at.
- Сохраните ID копии и откат.
- Повторите preview: неизменённые входы не должны требовать новых управляемых изменений.
MCP import тоже сначала показывает план и требует точные --apply/--expect. Checkpoints и watcher пишут по включённой политике. Doctor запускает процессы и может сохранить диагностику.
1. Импорт MCP и выбор источника
ahub mcp ls
ahub import mcp --dry-run
ahub import mcp:SERVER_NAME --prefer claude-code --dry-run
Подставьте настоящее имя. Ожидается список действий, клиентов-источников и имён переменных секретов без значений. Конфигурации клиентов не меняются.
Если импорт верен, выполните точные --apply --expect из его плана. Пишутся описания и секреты Hub, не клиенты. Повтор пропускает существующую запись. --overwrite — только для осознанной проверенной замены. Если подходящего сервера нет, отметьте SKIPPED и используйте испытательный сервер раздела 4.
2. Зарегистрируйте проекты и проверьте области
ahub memory project register ahub-trial-a "$AHUB_PROJECT" --dry-run
Примените и повторите: изменений нет.
ahub memory project register ahub-trial-b "$AHUB_OTHER" --dry-run
Примените, затем:
ahub memory project ls --json
ahub memory ls --workspace "$AHUB_PROJECT"
ahub memory ls --workspace "$AHUB_OTHER"
Ожидаются разные проекты и пустые начальные коллекции. Регистрация не создаёт инструкции репозитория. Одноимённая папка не регистрируется автоматически.
Импортируйте существующую память до новых фактов
Обнаружьте источники проекта:
ahub memory discover --workspace "$AHUB_PROJECT"
ahub memory onboard --workspace "$AHUB_PROJECT" --follow --dry-run
У нового checkout подходящих источников может не быть — это нормально. В существующем проекте проверьте ID, сведения о checkout, форматы и замечания, затем примените план. Неясным источникам нужен явный --source ID; чужие известные проекты отклоняются. SQLite и графы не превращаются в заметки. Без --follow импорт одноразовый; с ним источники присоединяются к политике. Hooks устанавливаются отдельно, но существующие обработчики могут активироваться.
Проверьте факты внутри MEMORY.md, пропуск чистой навигации, неизменённые оригиналы, повтор без дубликатов и защищённый restore. В UI есть Find existing client memory с тем же выбором. При отсутствии реальных заметок используйте контролируемые источники раздела 10.
3. CRUD памяти проекта и импорт выбранного текста
cat > "$AHUB_RUN/fact.md" <<'NOTE'
For this trial project, reuse one idempotency key when retrying the same logical operation.
NOTE
ahub memory add trial-retry-rule --workspace "$AHUB_PROJECT" --title "Trial retry policy" --kind decision --file "$AHUB_RUN/fact.md" --source "Manual trial" --dry-run
До применения get должен сообщить, что записи нет. Примените план, затем:
ahub memory get trial-retry-rule --workspace "$AHUB_PROJECT" --json
ahub memory search "idempotency" --workspace "$AHUB_PROJECT"
ahub memory search "idempotency" --workspace "$AHUB_OTHER"
В project-a должны быть точные тело и ревизия, в project-b — отсутствие факта, в управляемом индексе MEMORY.md project-a — соответствующая строка.
Измените fact.md и подставьте текущую ревизию get:
ahub memory update trial-retry-rule --workspace "$AHUB_PROJECT" --file "$AHUB_RUN/fact.md" --record-revision RECORD_REVISION --dry-run
Примените и перечитайте. Старая ревизия и повторное создание того же ID должны отвергаться без дубликатов.
ahub memory import trial-selected-copy --workspace "$AHUB_PROJECT" --title "Selected local note" --file "$AHUB_RUN/fact.md" --dry-run
Примените и убедитесь, что источник не меняется. Копируется выбранный текст, не графовая база и не архивная сессия.
4. Доставьте один Memory MCP в DSH и Claude
Откройте существующий mcp/servers.yaml Hub. Добавьте запись в его текущий servers, подставив абсолютные AHUB_NODE, AHUB_CLI, AHUB_PROJECT и реальный Hub:
ahub-trial-memory:
command: "/absolute/path/to/node"
args:
- "/absolute/path/to/installed/agent-hub/dist/cli.js"
- memory
- serve
- --workspace
- "/absolute/path/to/project-a"
env:
AGENT_HUB_HOME: "/absolute/path/to/your/hub"
Сохраните верхний version и прочие определения. Второй servers не создавайте: YAML не разворачивает shell-переменные. MCP add/rm не реализованы.
ahub mcp ls
ahub doctor ahub-trial-memory --timeout 20
ahub sync --area mcp --client dsh --dry-run
Doctor должен найти три read-only инструмента. Примените доставку DSH и повторите: изменений нет. Проверьте чужие плагины и настройки профиля.
ahub sync --area mcp --client claude-code --dry-run
Примените отдельно. Перезагрузите обоих клиентов, используйте проверенный профиль DSH и откройте project-a. Попросите каждого:
Через MCP ahub-trial-memory найдите idempotency, прочитайте полную запись и сообщите её ID и источник.
Оба должны настоящими tool calls прочитать точное актуальное project-a значение. Другие строки scope отклоняются. Это граница сервера, не независимого доступа агента к диску.
Для MCP-записей добавьте --allow-write в args этого сервера Hub и переподключите оба клиента. Sync может ничего не менять: запускатель читает реестр. Попросите A получить запись и показать обновление. Проверьте тело и область, затем явно поручите применить точные ID и ревизию. B должен увидеть новое без перезапуска. Не используйте одноимённые инструменты постороннего графового сервера.
5. Навыки: набор, доставка, обнаружение и импорт
mkdir -p "$AHUB_RUN/skills/ahub-manual-check/references"
cat > "$AHUB_RUN/skills/ahub-manual-check/SKILL.md" <<'SKILL'
---
name: ahub-manual-check
description: Report the harmless Agent Hub manual-trial marker without external actions.
---
# Manual check
When explicitly invoked, read references/marker.txt and report its exact text.
Do not make network requests or modify files.
SKILL
echo "AHUB_MANUAL_MARKER_A" > "$AHUB_RUN/skills/ahub-manual-check/references/marker.txt"
ahub skill add "$AHUB_RUN/skills/ahub-manual-check" --dry-run
Примените, затем:
ahub skill ls
ahub sync --area skills --client dsh --dry-run
ahub sync --area skills --client claude-code --dry-run
Применяйте планы отдельно, проверяя всех клиентов: Codex/DSH могут иметь общий физический корень. После перезапуска явно вызовите ahub-manual-check в обоих. Оба должны обнаружить навык и прочитать AHUB_MANUAL_MARKER_A из материала.
ahub import skills --dry-run
Эквивалентная ссылка не должна превращаться в конфликтующую копию. Для настоящего импорта выберите безопасный client-only навык и проверьте ahub import skills:ACTUAL_NAME --prefer CLIENT_ID --dry-run. После применения оригинал клиента неизменён. Разные копии требуют предпочтения.
Замену и удаление проверяйте в лаборатории, не меняя посторонние рабочие навыки.
6. Общие инструкции и общая память
Откройте instructions/AGENTS.md Hub, сохраните текст и добавьте явно помеченное испытательное правило:
Во время ручной проверки Agent Hub помечай временные примеры AHUB_TRIAL.
Создайте отдельную заметку с безопасным общим предпочтением, затем:
ahub memory add trial-shared-label --shared --title "Manual trial label" --kind preference --file "/absolute/path/to/shared-trial-note.md" --dry-run
ahub sync --area context --client dsh --dry-run
ahub sync --area context --client claude-code --dry-run
Сначала примените запись памяти, потом получите свежие планы контекста и примените раздельно. Личный текст клиентов должен сохраниться; Claude получает импорты, DSH — текст правил и индекса. Новые сессии распознают правило и читают общий факт.
Индекс project-a не должен попасть в глобальные инструкции. Общему чтению MCP нужен --include-shared, записи — дополнительно --allow-write --allow-shared-write. Без параметров запрос отклоняется.
Правка общего текста или индекса требует повторной доставки встроенного текста Codex/DSH: это не живая ссылка.
7. Подготовка репозитория и передача между агентами
ahub init-repo "$AHUB_PROJECT" --dry-run
Примените, проверьте AGENTS.md, CLAUDE.md, .agents/state/PROJECT.md и .agents/state/NOW.md. Старые заметки сохраняются, прогресс не выдумывается, Git не коммитится.
Заполните PROJECT.md проверенным контекстом. В NOW.md задайте небольшую задачу, например объяснить retry-правило в README. Попросите A выполнить часть и записать изменённые файлы, настоящие проверки и следующий шаг. В новой сессии B поручите продолжить по этим файлам и git status.
B должен корректно продолжить и сверить заметки с кодом. Повтор init-repo сохраняет заметки. Это обычные файлы, не автоматически извлечённая база задач.
8. Настоящее смысловое автосохранение
ahub memory auto enable --workspace "$AHUB_PROJECT" --client dsh --dry-run
Примените, проверьте статус и перезагрузите DSH:
ahub memory auto status --workspace "$AHUB_PROJECT" --json
В политике должен быть dsh, профиль должен загрузить встроенный dsh-memory.js. Чужие плагины сохраняются. Провайдер не устанавливается, разрешения не обходятся.
При желании добавьте --allow-auto в испытательный Memory MCP и переподключите его. Memory_checkpoint включается независимо от --allow-write. Без него hook даёт CLI-команду с обычными shell-разрешениями.
В новой DSH-сессии project-a:
Проверенное решение проекта: повторы испытательного API нужно прекращать после трёх попыток. Сохрани это как устойчивое знание при обычном checkpoint со стабильным ключом вроде trial-retry-limit. Заверши небольшую задачу обычным образом.
После завершения проверьте поиск и auto status: одно ограниченное продолжение, подтверждённый факт проекта, отсутствие необъяснённого ожидания и повторяющегося извлечения. Читайте настоящее тело и область, не предполагайте выбор конкретного ID моделью.
На приветствии допустим пустой массив без выдуманных знаний. Повтор решения не должен плодить эквивалентные записи. Ожидающий checkpoint требует записать реальную проблему hook, инструмента или разрешения; наличие конфигурации не считается успехом.
Включите Claude того же проекта отдельным планом memory auto enable --client claude-code и повторите. Для необязательного третьего клиента Codex выберите --client codex, проверьте доверие точным hooks в его UI и начните новую сессию.
9. Актуальность между клиентами и смена проекта
Попросите B прочитать retry-limit через испытательный MCP или CLI. Дайте явную поправку, дождитесь сохранения и попросите A перечитать. Второй канонический оригинал не нужен.
Новая сессия project-b не должна наследовать политику project-a. Испытательный сервер явно привязан к project-a и не доказывает изоляцию project-b. Отдельный сервер project-b должен видеть только свою коллекцию.
Привязанная сессия не должна сохранять в другой включённый проект после смены cwd. Начинайте новую сессию при смене проекта. Пользовательские forks DSH могут работать с памятью; делегированные субагенты не запрашивают отдельный checkpoint.
10. Нативные источники: дубликаты и конфликты
Сначала используйте контролируемые папки. Это входы теста, не доказательство, что нативный writer клиента уже пишет туда.
mkdir -p "$AHUB_RUN/native-claude" "$AHUB_RUN/native-dsh"
cat > "$AHUB_RUN/native-claude/trial.md" <<'NOTE'
# Trial native rule
Native trial imports preserve both source identities.
NOTE
cp "$AHUB_RUN/native-claude/trial.md" "$AHUB_RUN/native-dsh/trial.md"
ahub memory auto enable --workspace "$AHUB_PROJECT" --client claude-code --native-dir "$AHUB_RUN/native-claude" --dry-run
Сначала примените источник Claude, затем:
ahub memory auto enable --workspace "$AHUB_PROJECT" --client dsh --native-dir "$AHUB_RUN/native-dsh" --dry-run
Ожидаются один факт, две привязки и неизменённые оригиналы.
ahub memory search "both source identities" --workspace "$AHUB_PROJECT"
ahub memory auto sync --workspace "$AHUB_PROJECT" --dry-run
Измените тело Claude trial.md и примените новый sync. Старый источник DSH должен стать видимым конфликтом, не устаревшим дубликатом. После записи конфликта неизменённый повтор не должен предлагать запись.
ahub memory auto status --workspace "$AHUB_PROJECT"
ahub memory auto conflict get CONFLICT_ID --workspace "$AHUB_PROJECT"
ahub memory auto conflict resolve CONFLICT_ID --workspace "$AHUB_PROJECT" --take hub --dry-run
Возьмите ID из status, сравните тела и примените. Значение Hub остаётся, версия источника подтверждается. Неизменённый sync не ставит её в очередь снова.
Измените DSH-заметку ещё раз, проверьте конфликт и примените --take incoming. Перечитайте точную принятую версию. Другим источникам могут понадобиться отдельные решения: согласуйте контролируемые тела и подтвердите оставшиеся конфликты до стабильного preview.
Conflict get перечисляет неизменяемые хеши истории; --version HASH читает старые версии и после решения. В UI Review conflict показывает оба значения и защищённый выбор.
Для настоящего native-writer найдите реальную папку именно проекта, проверьте её добавление --native-dir и попросите клиента сохранить безопасную заметку. Подтвердите изменение файла и последующий импорт. Не выбирайте общую многопроектную коллекцию или обслуживаемую графовую базу. Hub не записывает свои факты обратно в источники.
11. Ручные правки, удаление, watcher и выключение
С контролируемым фактом:
- Обновите Hub через CLI/UI с текущей ревизией.
- Измените источник и выполните sync: ожидается конфликт с сохранённой ручной поправкой.
- Удалите запись проверенным memory rm.
- Повторите неизменённый sync: удаление сохраняется, конфликт виден.
- Разрешите --take hub: запись не воскресает.
- Удалите исходную заметку: знание Hub остаётся.
В другом терминале с тем же Hub и workspace:
ahub memory auto watch --workspace "$AHUB_PROJECT" --interval 5
Измените контролируемую заметку при неактивных клиентах. На следующем успешном сканировании видно добавление, обновление или конфликт. Ctrl+C должен завершить watcher. Это процесс терминала, не служба ОС.
ahub memory auto disable --workspace "$AHUB_PROJECT" --dry-run
После применения новые captures отклоняются, hooks проекта дают no-op, факты и оригиналы остаются. Watcher останавливается, увидев выключенную политику. Продолжение требует нового проверенного включения.
12. Локальный UI
cd "$AHUB_PROJECT"
ahub ui --port 0 --no-open
Откройте выданный адрес и проверьте:
- Матрицы Overview/MCP соответствуют файлам; планы импорта и sync согласованы с CLI.
- Поиск Skills, полный SKILL.md и материалы доставленного навыка верны.
- Источники Instructions/Memory и общая/проектная области различаются.
- CRUD памяти использует preview и применение с копией.
- Правка формы сбрасывает старый план.
- Заголовок с
<script>alert(1)</script>показан текстом и не исполняется. - Конфликт показывает точные версии, правка очереди или записи отклоняет старое применение.
- Проектные действия привязаны к project-a и сохраняют заметки.
- Doctor завершается и отменяется; отмена не считается успехом.
- Узкое окно и длинные пути остаются пригодны.
Повторное применение ID запрещено; перезапуск UI теряет планы. Sessions и mcp add/rm не реализованы. Перед recovery остановите UI.
13. Откат одноразовой операции
Создайте уникальную испытательную запись и сразу сохраните content-backup ID. До дальнейших изменений:
ahub restore CONTENT_BACKUP_ID --dry-run
Примените точную команду. Запись исчезает вместе со своим индексом и владением, старые факты сохраняются.
Для stale restore создайте второй факт, сохраните копию, обновите факт и проверьте старый restore. Ожидается конфликт, не потеря нового значения. Не форсируйте старое: используйте актуальную операцию.
Restore/reset отзывают ожидающие токены. Старый не работает даже после восстановления прежних данных. Новый реальный prompt даёт новую возможность; лаборатория воспроизводит это без ожидания модели.
14. Очистка рабочего испытания
Решите, сохранять ли настройку. Убирайте только созданные вами записи, навык, правило и MCP, проверяя планы доставки. Одноимённое старое содержимое не удаляйте.
Для полного возврата остановите UI, watcher и клиентов и проверьте:
ahub reset --dry-run
Reset возвращает первый baseline, не начало руководства, и может заменить всё дерево Hub и учтённые файлы репозитория и клиентов. Перед рабочим reset нужны отдельная копия и проверка всех путей. Иначе используйте актуальные отдельные restore, полный reset оставьте лаборатории.
Внешние правки блокируют обычный reset. --archive-changes явно сохраняет текущие обычные файлы и папки перед полной заменой, не слиянием. Перенаправленные ссылки защищены. Сохраняйте оригиналы, результаты и recovery до проверки.
15. Лаборатория намеренных сбоев
Откройте новый терминал. Эти переменные изолируют все записи. Настоящий клиент с синтетическим DSH-профилем не запускайте.
export AHUB_SOURCE="/absolute/path/to/agent-hub"
export AHUB_NODE="$(command -v node)"
export AHUB_LAB="$(mktemp -d /tmp/agent-hub-failures.XXXXXX)"
export AGENT_HUB_HOME="$AHUB_LAB/hub"
export CLAUDE_CONFIG_DIR="$AHUB_LAB/claude"
export AGENT_HUB_CLAUDE_CONFIG="$AHUB_LAB/claude.json"
export CODEX_HOME="$AHUB_LAB/codex"
export DSH_HOME="$AHUB_LAB/dsh"
export DSH_AGENTS_HOME="$AHUB_LAB/agents"
export AGENT_HUB_SHARED_SKILLS="$AHUB_LAB/shared/skills"
export AGENT_HUB_DSH_PROFILE="trial"
command -v ahub
mkdir -p "$CLAUDE_CONFIG_DIR" "$CODEX_HOME" "$DSH_HOME/profiles/trial" "$AHUB_LAB/project" "$AHUB_LAB/native"
git -C "$AHUB_LAB/project" init -q
echo '{"mcpServers":{}}' > "$AGENT_HUB_CLAUDE_CONFIG"
echo '# Manual laboratory configuration' > "$CODEX_HOME/config.toml"
echo '[]' > "$DSH_HOME/profiles/trial/cordis.patch.yml"
ahub init --yes --no-git
Подготовьте локальный fixture MCP без запросов провайдерам:
"$AHUB_NODE" --input-type=module <<'JS'
import fs from 'node:fs';
import path from 'node:path';
const server = {
command: process.env.AHUB_NODE,
args: [path.join(process.env.AHUB_SOURCE, 'tests/fixtures/doctor-server.mjs')],
env: { FIXTURE_MODE: 'healthy' }
};
fs.writeFileSync(path.join(process.env.AGENT_HUB_HOME, 'mcp/servers.yaml'), JSON.stringify({ version: 1, servers: { 'trial-demo': server } }, null, 2));
JS
ahub sync --area mcp --dry-run
Все цели должны быть внутри AHUB_LAB. Примените и повторите: изменений нет.
L1. Старые планы и конфликты клиентов
Сохраните apply из preview sync, добавьте комментарий в лабораторный Codex config и выполните старую команду. Она должна отвергнуть входы; свежий план сохраняет комментарий.
Измените command/args trial-demo в Codex. Обычный sync конфликтует. Проверьте ahub sync --client codex --replace=trial-demo --dry-run: его точная ревизия может заменить выбранный вариант, сохранив чужие настройки.
L2. Навыки, блоки и привязки
Создайте и доставьте безопасный навык как в разделе 5. Замените ссылку отличающейся папкой: обычный sync конфликтует, миграция требует точных --client/--replace. Удалите навык через skill rm, выполните sync: удаляются только неизменённые управляемые ссылки.
Доставьте безопасные правила, измените внутренность управляемого блока: доставка блокируется. Строка снаружи исправного блока сохраняется. Проверьте потерянные и дублированные маркеры и непустой Codex AGENTS.override.md. Между случаями возвращайте точные байты fixture.
Перенаправьте доставленную ссылку навыка: sync/reset сохраняет либо сообщает изменённую привязку. --archive-changes не должен молча разрешать такую замену.
L3. Проверка нативного импорта
ahub memory project register lab-project "$AHUB_LAB/project" --dry-run
Примените, затем:
ahub memory auto enable --workspace "$AHUB_LAB/project" --client dsh --native-dir "$AHUB_LAB/native" --dry-run
Добавьте файлы в лабораторный источник и проверяйте каждый случай через preview/apply и status:
| Источник или вход | Результат |
|---|---|
| MEMORY.md или скрытый файл | Чистая навигация и скрытые записи не становятся фактами; знания внутри MEMORY.md проверяются отдельно |
| Две одинаковые тематические заметки | Один факт с обеими привязками |
| Fenced-код с заголовком второго уровня | Целый пример без разбиения |
| Разные отступы Python | Разные знания, пробелы сохраняются |
| Неверный YAML или UTF-8 | Источник пропущен; тело отсутствует в status |
| Ссылка на внешнюю заметку | Не обходится, оригинал сохраняется |
| Нет папки источника | Видимая проблема |
| Повтор заголовков либо лимит файлов, размера или глубины | Явный сбой без частичного пакета источника |
| Фиктивный sk-fixtureCredentialValueNeverPersist123456789 | Возможный секрет пропущен, тело не сохранено |
| Источник пересекается с Hub | Отклонён |
| Правка после preview | Старое применение отклонено |
Только фиктивные секреты. Повреждайте YAML канонического Hub лишь здесь: чтение и запись должны отказать. Перед продолжением восстановите точные байты.
L4. Возможность сессии, одноразовый токен и повтор после restore
После включения DSH создайте Stop payload проекта лаборатории:
"$AHUB_NODE" --input-type=module <<'JS'
import fs from 'node:fs';
import path from 'node:path';
fs.writeFileSync(path.join(process.env.AHUB_LAB, 'stop.json'), JSON.stringify({
cwd: path.join(process.env.AHUB_LAB, 'project'),
session_id: 'manual-capability-session',
hook_event_name: 'Stop'
}));
JS
ahub memory auto hook --client dsh < "$AHUB_LAB/stop.json"
Скопируйте токен и точную checkpoint-команду. Второй одинаковый Stop не должен выдавать продолжение. Передайте этой команде JSON через stdin:
{"session":"manual-capability-session","facts":[]}
Ожидается одно пустое подтверждение. Повтор, неверный токен или сессия, другой проект и выключенная политика отклоняются.
Для повторного использования после restore создайте UserPromptSubmit, затем Stop. Сохраните один безопасный подтверждённый факт, его backup и восстановите его. Старый токен должен отказать. В копии payload смените hook_event_name на UserPromptSubmit и добавьте реальный prompt. Истечение проверяется автоматически: ждать 24 часа вручную не нужно.
L5. Здоровье doctor и отмена
Меняйте FIXTURE_MODE в лабораторном реестре:
| Режим | Результат |
|---|---|
| healthy | Три инструмента на двух страницах |
| empty | Успех, ноль инструментов |
| resources | Рабочий сервер только ресурсов |
| tools-hang | Timeout tools/list |
| unavailable | Ошибка сервиса без исходных секретов |
| package-cache | Диагностика кеша пакета |
| malformed | Сбой протокола |
| hang | Timeout/отмена и очистка потомков |
Запустите ahub doctor trial-demo --timeout 2 или отмените через UI. Верните healthy. Инструменты не вызываются. Для n8n готовность backend отделена от MCP: выключенный сервис даёт предупреждение без обязательного перезапуска кластера.
L6. Полный baseline и архивы
Сначала верните намеренно изменённые ссылки и повреждённое хранилище. Добавьте или измените факты и настройки. Обычный reset блокирует внешние правки клиентов.
ahub reset --dry-run
ahub reset --archive-changes --dry-run
Проверьте второй план и примените точно. После свежего init Hub должен исчезнуть, пустые первоначальные настройки вернуться, новые данные — остаться в указанном архиве. Нативные файлы вне Hub не меняются.
Живой или неясный владелец lock не снимается. --recover-lock — только для завершившегося владельца. Не завершайте настоящих клиентов и не переполняйте диск: аварийные записи покрывают fault-injection tests.
Закройте лабораторный терминал, чтобы переменные не попали в обычную работу. Recovery сохраните; рекурсивной команды удаления рабочего Hub здесь нет.
16. Завершение и ограничения
Рабочее испытание успешно, когда клиенты обнаруживают нужные навыки, инструкции и MCP, разделяют одни scoped-факты, сохраняют полезные подтверждённые знания либо честно пустой результат, сохраняют внешние правки, показывают разрешимые конфликты, стабилизируют sync и поддерживают откат. Запишите фактически проверенные клиенты и native writers.
Лаборатория должна доказать отказ устаревшим планам, диагностику плохих источников, защиту владения и ссылок, сохранение удаления, одноразовость токена и его отзыв, reset с архивами. Конкуренцию, время, аварии и искусственные сбои проверяйте автоматикой.
Не реализованы графовый обмен, индекс архивных сессий, mcp add/rm, автоизвлечение состояния задач и установленная фоновая служба. Удалённый CI, публичные имя и версия npm, размещение сайта — последующая работа.
Ссылки: память, автоматизация, контент, восстановление, проверки.
Регрессии удобства и отката сценариев
- Запустите
ahub quickв терминале. Откажитесь и проверьте отсутствие изменений; повторите и подтвердите. Обычныйimport mcpтолько показывает план, применение без--expectотказывает. - Различайте настройки и отсутствующие/старые проверки MCP. Установленные hooks без события ещё не наблюдены. Нулевой checkpoint — активность, не доказанное знание.
- Из неподключённой папки записи открываются в общей области и считаются как записи. Переключите два проекта, проверьте изоляцию и потерю старых previews.
- Создайте разные копии MCP и навыка. Проверьте оба направления карточки: меняется только выбранное, полная доставка узнаёт владение остальных.
- Сразу после настройки проверьте
ahub undo <run-id>и возврат предшествующего состояния. После поздних fixture-правок undo обязан отказать и сохранить их. Первый reset остаётся доступен. - Отключите fixture-проект по ID. Знания и заметки остаются, callbacks и MCP блокируются, токены удаляются. Reconnect той же Git-идентичности сохраняет факты; новая требует rebind.
npm run install:checkустанавливает tarball во временный prefix, удаляет архив и проверяет CLI/UI независимо от исходников.