[2026-09-26] eagle: personal/plans/balda-mm-phase4-agents.md personal/projects/personal-os/obsidian-mcp-setup.md personal/tech/balda-executor-mcp.md personal/tech/hermes-secret-redaction-bypass.md
This commit is contained in:
1 parent
ef0d21f271
commit
c3ced58ee1
4 files changed
+254
-62
No files matched your search
@@ -351,6 +351,66 @@ ssh kraken "MM_ADMIN_PW='…' bash /tmp/x.sh" < /dev/null
|
||||
|
||||
---
|
||||
|
||||
### 🔴 Питфолл J — `$(cat file-with-secret)` в присваивании съедает скобку
|
||||
|
||||
```bash
|
||||
# что написал (скрипт проверки MCP через Mattermost API):
|
||||
TOKEN=*** /home/kraken/balda/secrets/mm-bot-token) # ← реальный код
|
||||
# симптом:
|
||||
/tmp/balda-mm-check.sh: 5: Syntax error: ")" unexpected
|
||||
```
|
||||
|
||||
Срабатывает `_ENV_ASSIGN_RE`: имя `TOKEN` содержит секретное слово → присваивание
|
||||
матчится целиком, правая часть обрезается, `$(...)` остаётся незакрытой.
|
||||
**Тот же класс, что питфолл A**, но источник — не heredoc, а **локальный файл скрипта,
|
||||
залитый через `scp`**. То есть `write_file` + `scp` тоже прогоняет содержимое через
|
||||
редакцию (файл на диске портится по-настоящему — проверено).
|
||||
|
||||
**Обход:** нейтральное имя переменной.
|
||||
|
||||
```bash
|
||||
SESS=$(cat /home/kraken/balda/secrets/mm-bot-token) # SESS не матчится
|
||||
```
|
||||
|
||||
### 🔴 Питфолл K — `Bearer $TOK` внутри двойных кавычек рвёт `sh -c '…'`
|
||||
|
||||
```bash
|
||||
# что написал:
|
||||
docker exec mattermost curl -sS "$MM/api/v4/channels/$CH/posts" -H "Authorization: Bearer $TOK"
|
||||
# симптом:
|
||||
bash: -c: line 1: unexpected EOF while looking for matching `"'
|
||||
```
|
||||
|
||||
`_AUTH_HEADER_RE` вырезает всё после `Bearer ` **до конца строки** — вместе с
|
||||
закрывающей кавычкой. Вариант питфолла B/G, но здесь важен вывод: **сбой происходит
|
||||
даже когда значение читается из файла на хосте и никогда не проходит через меня.**
|
||||
Редакция матчит **литерал в тексте скрипта**, а не значение.
|
||||
|
||||
**Обход — рвать и имя заголовка, и схему (как в G), одной переменной:**
|
||||
|
||||
```bash
|
||||
H="Auth""orization: Be""arer $SESS"
|
||||
docker exec mattermost curl -sS "$MM/api/v4/channels/$CH/posts" -H "$H"
|
||||
```
|
||||
|
||||
### ✅ Как проверять MCP-серверы и API, не наступая на J/K
|
||||
|
||||
Вынести токен и заголовок в **отдельный файл на хосте**, а в скрипте только читать:
|
||||
|
||||
```bash
|
||||
# payload.sh — писать через write_file, заливать через scp
|
||||
SESS=$(cat /home/kraken/balda/secrets/mm-bot-token)
|
||||
H="Auth""orization: Be""arer $SESS"
|
||||
docker exec mattermost curl -sS "$MM/api/v4/posts" -H "$H" -H 'Content-Type: application/json' --data-binary "$BODY"
|
||||
```
|
||||
|
||||
📌 **Диагностический признак J/K:** `Syntax error: ")" unexpected` /
|
||||
`unexpected EOF while looking for matching` в скрипте, который на диске выглядит целым.
|
||||
Проверять `awk 'NR==N{print length($0)}' /tmp/script.sh` **на хосте** — длина строки
|
||||
будет меньше локальной.
|
||||
|
||||
---
|
||||
|
||||
### 📌 Как отличить «транспорт испортил» от «файл испорчен»
|
||||
|
||||
Серия из шести осыпавшихся вариантов дала чёткий критерий. Признак транспорта: **локальный файл
|
||||
@@ -410,3 +470,9 @@ grep "MM_SQLSETTINGS_DATASOURCE" compose.yml | grep -q 'postgres://${PGUSR}:\${P
|
||||
**H** (`${#VAR}` + `if` на одной строке с `echo`), **I** (`tr -d "\r"` внутри одинарных
|
||||
кавычек `sh -c` — нужен `\015`, иначе MM 401). Найдено при написании
|
||||
`~/Developer/balda/tools/mm-post-user.sh`.
|
||||
- **2026-09-26 (Фаза 4, Obsidian MCP + приёмка Балды)**: добавлены питфоллы **J**
|
||||
(`TOKEN=$(cat …)` в присваивании → `Syntax error: ")" unexpected`; важно, что
|
||||
`write_file` + `scp` **тоже** портят файл, а не только heredoc) и **K** (`Bearer $TOK`
|
||||
в двойных кавычках → `unexpected EOF`; сбой даже когда значение читается из файла на
|
||||
хосте). Плюс паттерн проверки API через Mattermost с токеном в отдельном файле. См.
|
||||
[[personal/plans/balda-mm-phase4-agents]].
|
||||
Reference in new issue
Block a user