tasks: close secrets-out-of-common 🟢; promote secrets-manager-adopt 🔴
Etap-1 (secrets-out-of-common) done: 9 files migrated to ~/.config/projects-secrets/ (outside any git tree); interns-mcp + meeting-room consumers updated to env-override pattern; setup-interns / using-interns skills updated + version-bumped; safety filter ALWAYS_ASK_PATTERNS extended with **/projects-secrets/**. .common/secrets/ removed entirely. Commits: OpeItcLoc03/common@0169358, OpeItcLoc03/claude-skills@ef3d38e. Open follow-up: meeting-room config.py edit unstaged due to pre-existing dirty state (UU conflict + 13 staged files not authored by this session). Etap-2 (secrets-manager-adopt) starts now — gpg + pass install, key gen, migrate plaintext to encrypted, cross-machine via private Gitea. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
# Admin Task Board
|
||||
_Updated: 2026-05-21_
|
||||
_Updated: 2026-05-21 (etap-1 secrets-out-of-common closed)_
|
||||
|
||||
<!--
|
||||
Status legend:
|
||||
@@ -264,7 +264,7 @@ Done — 🟢 с close-note: «roadmap expanded; N impl-tasks created for first
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [secrets-out-of-common] — Этап 1 secret-management фикса: вынести `~/projects/.common/secrets/` в `~/.config/projects-secrets/` (вне git-tree). Не блокирует migration (независимый workstream).
|
||||
## 🟢 [secrets-out-of-common] — Этап 1 secret-management фикса: вынести `~/projects/.common/secrets/` в `~/.config/projects-secrets/` (вне git-tree). Не блокирует migration (независимый workstream).
|
||||
|
||||
**Why это дыра:**
|
||||
1. `.common/` — git-tracked tree. Один неаккуратный `git add .` из wrong dir / отключение gitignore rule → leak в историю.
|
||||
@@ -276,8 +276,23 @@ Done — 🟢 с close-note: «roadmap expanded; N impl-tasks created for first
|
||||
|
||||
См. `concepts/admin-infra-project.md` §Initial admin agenda E.2.
|
||||
|
||||
**Status:** ready
|
||||
**Where I stopped:** (not started)
|
||||
**Status:** done
|
||||
**Closed:** 2026-05-21 — миграция отработана.
|
||||
- 9 файлов скопированы в `~/.config/projects-secrets/`: `gitea-token.txt`, `interns.env`, `vds-kzntsv.env`, `kreknin.env`, `noreply-snolla-smtp.env` (5 real secrets) + 3 examples + README. **Real-files audit:** найдено 6 (не 4 как в spec'е) — kreknin.env + noreply-snolla-smtp.env не были в исходном спецификации листинге.
|
||||
- **Live code consumers (audit grep):** только 2 — `~/projects/.common/lib/interns-mcp/interns_mcp/server.py` (PATCH: env-override `INTERNS_SECRETS_PATH` → fallback `~/.config/projects-secrets/interns.env`) + `~/projects/meeting-room/meeting_room/config.py` (symmetric). `gitea-token.txt` / `vds-kzntsv.env` / `kreknin.env` / `noreply-snolla-smtp.env` — manual reference only (никто не читает кодом).
|
||||
- **Safety filter expanded:** `interns-mcp/safety.py` ALWAYS_ASK_PATTERNS добавил `**/projects-secrets/**` (canonical glob `**/secrets/**` не покрывает segment `projects-secrets`).
|
||||
- **Skill updates (claude-skills repo):** setup-interns 0.3.0 → 0.4.0 (MINOR — write target changed, gitignore-phase dropped), using-interns 0.2.0 → 0.2.1 (PATCH wording), `.wiki/concepts/interns-design.md` обновлён, dist/ rebuilt.
|
||||
- **Verification:** `python -c "from interns_mcp.server import SECRETS_PATH; print(SECRETS_PATH)"` → `C:\Users\vitya\.config\projects-secrets\interns.env`, exists=True ✅. Full MCP smoke требует session restart (в текущей сессии MCP bound к старому коду).
|
||||
- **Cleanup:** `~/projects/.common/secrets/` removed entirely (`git rm` for `.gitignore` + `interns.env.example`; real .env-файлы и так были gitignored). `ls ~/projects/.common/secrets/` → ENOENT ✅.
|
||||
- **Commits:** `OpeItcLoc03/common@0169358` + `OpeItcLoc03/claude-skills@ef3d38e`.
|
||||
- **Open follow-ups (not blocking):**
|
||||
1. ⚠️ `~/projects/meeting-room` — pre-existing dirty state (13 staged + UU conflict в `.tasks/STATUS.md`, не моя работа). Мой edit `meeting_room/config.py` сидит unstaged. Не коммитил. Нужно решение user: commit-after-unblock, manual stash, или discard. **`config.py` edit critical** — без него meeting-room runner read'нёт несуществующий `.common/secrets/interns.env`, env vars не загрузятся, и `${OLLAMA_CLOUD_API_KEY}` placeholder останется unresolved в `meeting-room/config/config.yaml`.
|
||||
2. Doc/wiki references к `.common/secrets/` остались в исторических файлах (`.workshop/.archive/`, `vds-ops-mcp/.wiki/`, `MoreThenCms/.tasks/`, `books/.wiki/`, etc.) — informational, не behavior. Bulk-update — отдельный chore-task если нужно.
|
||||
3. Cross-machine: на других машинах (если есть) повторить шаги migrate (`mkdir -p ~/.config/projects-secrets/ + scp creds`) + pull `OpeItcLoc03/common` + `OpeItcLoc03/claude-skills`.
|
||||
|
||||
Unblocks `secrets-manager-adopt` (etap-2). Acceptance per spec — ✅ выполнено (см. шаги выше).
|
||||
|
||||
**Where I stopped:** (done)
|
||||
**Next action:** **1. Audit:** `ls ~/projects/.common/secrets/` — какие файлы там лежат сейчас? Список ожидаемых из памяти:
|
||||
- `interns.env` — API keys для cheap LLM endpoints
|
||||
- `gitea-token.txt` — admin-scoped Gitea token (admin-scope per memory)
|
||||
@@ -316,7 +331,7 @@ Done — 🟢; unblock `secrets-manager-adopt`.
|
||||
|
||||
---
|
||||
|
||||
## 🔵 [secrets-manager-adopt] — Этап 2 secret-management: внедрить `pass` (gpg-based password-store) — encrypted-at-rest secrets + cross-machine sync через private Gitea repo с encrypted blobs.
|
||||
## 🔴 [secrets-manager-adopt] — Этап 2 secret-management: внедрить `pass` (gpg-based password-store) — encrypted-at-rest secrets + cross-machine sync через private Gitea repo с encrypted blobs.
|
||||
|
||||
Альтернатива — Bitwarden CLI (cloud vault, audit log). Recommend `pass` для one-user setup — нет cloud-dependency, gpg native, encrypted git-syncable.
|
||||
|
||||
@@ -324,8 +339,8 @@ Done — 🟢; unblock `secrets-manager-adopt`.
|
||||
|
||||
См. `concepts/admin-infra-project.md` §Initial admin agenda E.3.
|
||||
|
||||
**Status:** blocked
|
||||
**Where I stopped:** (not started)
|
||||
**Status:** active
|
||||
**Where I stopped:** Стартовал прямо за etap-1 (in same session) — gpg/pass install + key gen — next step.
|
||||
**Next action:** **1. Pre-install — gpg setup (Windows):**
|
||||
- Install Gpg4win (https://www.gpg4win.org/) или через Scoop: `scoop install gpg`.
|
||||
- `gpg --full-generate-key` — выбрать RSA 4096, без expiration ИЛИ 2-year expiration с rotation reminder.
|
||||
|
||||
Reference in New Issue
Block a user