diff --git a/.tasks/STATUS.md b/.tasks/STATUS.md index db1560b..4dea294 100644 --- a/.tasks/STATUS.md +++ b/.tasks/STATUS.md @@ -1,5 +1,5 @@ # Task Board -_Updated: 2026-05-07 (bootstrap-fix-tdd-recommend-template + bootstrap-upgrade-canonical-triggers done)_ +_Updated: 2026-05-09 (multi-owner skill-side wrap-up: using-projects-meta v1.2.0 + setup-projects-meta v1.1.0 done)_ + --- -## 🔵 [update-setup-projects-meta-auth-toml] — Обновить SKILL.md скила `setup-projects-meta`: новая структура auth.toml — `gitea_owners = [...]` массив, `agenda_tasks_repo` qualified имя. Backwards-compat note: старый `gitea_user = "X"` без `gitea_owners` читается как `gitea_owners = ["X"]`. Часть миграции multi-owner (см. concept `projects-meta-multi-owner` в common wiki). +## 🟢 [update-setup-projects-meta-auth-toml] — Обновить SKILL.md скила `setup-projects-meta`: новая структура auth.toml — `gitea_owners = [...]` массив, `agenda_tasks_repo` qualified имя. Backwards-compat note: старый `gitea_user = "X"` без `gitea_owners` читается как `gitea_owners = ["X"]`. Часть миграции multi-owner (см. concept `projects-meta-multi-owner` в common wiki). -**Status:** blocked -**Where I stopped:** (not started) -**Next action:** Прочитать `~/projects/claude-skills/skills/setup-projects-meta/SKILL.md`. В шаблоне auth.toml: добавить `gitea_owners = ["victor", "cancel_music"]`, заменить `meta_tasks_repo = "projects-tasks"` на `agenda_tasks_repo = "OpeItcLoc03/agenda"`. Bump version (MINOR). Зависит от code-side `multi-owner-config` в common. +**Status:** done +**Where I stopped:** v1.0.1 → 1.1.0 — auth.toml template обновлён до v2.x схемы (`gitea_owners`, `agenda_tasks_repo` qualified, optional `gitea_aggregate_skip_owners`), schema notes блок добавлен с backwards-compat. +**Next action:** (none — kept until merged) **Blocker:** multi-owner-config **Branch:** n/a + --- diff --git a/dist/setup-projects-meta.skill b/dist/setup-projects-meta.skill index bcf2c53..daf5c7d 100644 Binary files a/dist/setup-projects-meta.skill and b/dist/setup-projects-meta.skill differ diff --git a/dist/using-projects-meta.skill b/dist/using-projects-meta.skill index e86da9f..2f3913b 100644 Binary files a/dist/using-projects-meta.skill and b/dist/using-projects-meta.skill differ diff --git a/skills/setup-projects-meta/SKILL.md b/skills/setup-projects-meta/SKILL.md index ef535f8..9d9a62a 100644 --- a/skills/setup-projects-meta/SKILL.md +++ b/skills/setup-projects-meta/SKILL.md @@ -1,6 +1,6 @@ --- name: setup-projects-meta -version: 1.0.1 +version: 1.1.0 description: Installs and configures the local `projects-meta-mcp` stdio server — clones the repo to `~/projects/.common/lib/projects-meta-mcp`, builds it, writes `~/.config/projects-mcp/auth.toml` with the user's Gitea token, clones the shared wiki to `~/projects/.wiki/` (content lives in root), and registers `mcpServers.projects-meta` in `~/.claude.json`. Use this skill when the user says "install projects-meta", "set up projects-meta", "configure projects-meta", "настрой projects-meta", "установи projects-meta", "projects-meta не работает", "projects-meta isn't working", or whenever the `mcp__projects-meta__*` tools are missing in a session that needs cross-project task aggregation or the shared Gitea wiki. Cross-platform — Windows / Linux / macOS. Mutates user-level config and writes secrets; pauses for confirmation before every write. --- @@ -121,13 +121,22 @@ mkdir -p ~/.config/projects-mcp If `~/.config/projects-mcp/auth.toml` already exists and Phase 1 found a valid `gitea_token` line — skip the write. Otherwise, write the file with the token captured in Phase 1 (or freshly pasted in Phase 2): ```toml -gitea_url = "https://git.kzntsv.site" -gitea_user = "OpeItcLoc03" -gitea_token = "" -# meta_tasks_repo = "projects-tasks" # uncomment to override default -# meta_wiki_repo = "projects-wiki" # uncomment to override default +gitea_url = "https://git.kzntsv.site" +gitea_user = "OpeItcLoc03" # acting identity (commit author) +gitea_token = "" +gitea_owners = ["victor", "cancel_music"] # additional Gitea owners to sync +agenda_tasks_repo = "OpeItcLoc03/agenda" # cross-project meta-board (qualified) +# gitea_aggregate_skip_owners = ["OpeItcLoc03"] # opt: sync but hide from `tasks_aggregate` ``` +**Schema notes (v2.x server):** + +- `gitea_owners` is an array of owners whose repos are scanned by `sync.js` and surfaced in aggregation views. `gitea_user` is acting identity only (commit author footer), not necessarily aggregated. +- `agenda_tasks_repo` is **qualified** (`/`). The literal `agenda` in `target_project` resolves through this field. +- `gitea_aggregate_skip_owners` (optional, v2.2.0+) — visited by sync (so mutations work via cache lookup) but hidden from `tasks_aggregate` / `tasks_search`. Useful for keeping infra repos write-able without polluting the dashboard. +- Backwards-compat: legacy installs with only `gitea_user = "X"` and no `gitea_owners` → server reads as `gitea_owners = ["X"]`. +- Legacy `meta_tasks_repo` / `meta_wiki_repo` → renamed to `agenda_tasks_repo` / built-in `projects-wiki`. Old keys ignored on v2.x. + Permissions: on Linux / macOS run `chmod 600 ~/.config/projects-mcp/auth.toml`. On Windows the default ACL is per-user, no extra step. ### Phase 6 — Register in `~/.claude.json` diff --git a/skills/using-projects-meta/SKILL.md b/skills/using-projects-meta/SKILL.md index 1b24a97..c8ec4f2 100644 --- a/skills/using-projects-meta/SKILL.md +++ b/skills/using-projects-meta/SKILL.md @@ -1,6 +1,6 @@ --- name: using-projects-meta -version: 1.1.0 +version: 1.2.0 description: Use when working across multiple projects on one or many machines — cross-project task aggregation (`mcp__projects-meta__tasks_*`), shared Gitea-backed wiki query / ingest (`mcp__projects-meta__knowledge_*`), or sync diagnostics (`mcp__projects-meta__meta_status`). Triggers on phrases like "across all projects", "what's on the boards", "check shared wiki", "search projects-wiki", "ingest into shared wiki", "что у меня на досках", "по всем проектам", "общая вики", "cross-project status", or any time the user wants to see / mutate state in another repo than the current cwd. v1.1.0 mandates a Step 0 freshness gate (probe `meta_status`, sync if stale, pull `projects-wiki` before shared-wiki writes) — see SKILL body. Mutation tools require two-step preview → confirm. Skip for the **current** project's tasks/wiki — those live on disk in `.tasks/` / `.wiki/`. --- @@ -142,7 +142,7 @@ Use MCP only for **other** projects, **other** machines, or **shared** wiki cont | `mcp__projects-meta__knowledge_ingest` | `target_project`, `type`, `slug`, `body` (+ opt `frontmatter`, `source_project`) | Three commits: `/.md` + `index.md` + `log.md`. `type` ∈ entities / concepts / packages / sources / raw | | `mcp__projects-meta__knowledge_promote` | `target_project`, `slug`, `body` (+ opt `frontmatter`, `source_project`) | Move `raw/.md` → `sources/.md` with auto `raw_path` link | -`target_project` is either a Gitea repo name, or `_meta` (the dedicated meta-tasks / meta-wiki repos from `auth.toml`). +`target_project` is **qualified** `/` (e.g. `victor/books`, `OpeItcLoc03/claude-skills`), or the literal `agenda` for the cross-project meta-board (resolves via `agenda_tasks_repo` in `auth.toml`). Bare names (`books`) are rejected with a hint to use the qualified form. Cross-cutting design: shared wiki → `concepts/projects-meta-multi-owner`. ## Examples @@ -181,7 +181,7 @@ User: "заведи в проекте books задачу на миграцию ` ``` 1. mcp__projects-meta__tasks_create - target_project: "books" + target_project: "victor/books" slug: "settings-json-migration" description: "<...>" next_action: "<...>" @@ -203,7 +203,7 @@ User: "close `[projects-meta-skills]` in claude-skills" ``` 1. mcp__projects-meta__tasks_close - target_project: "claude-skills" + target_project: "OpeItcLoc03/claude-skills" slug: "projects-meta-skills" note: "" (no `confirm`) @@ -227,6 +227,7 @@ User: "close `[projects-meta-skills]` in claude-skills" | Calling `knowledge_ingest` with the wrong `type` | `type` must be one of `entities` / `concepts` / `packages` / `sources` / `raw`. Mis-typed pages land in the wrong section and break `index.md`. | | Vague `knowledge_search` queries ("auth", "config") | Specific multi-word queries return targeted snippets; vague ones return noise. | | Forgetting `domain="all"` when searching across families | Default `domain` is auto-detected from cwd; use `"all"` if the wiki page lives in a different family. | +| Passing bare project name (`target_project: "books"`) to mutation tools | v2.x rejects bare names. Use qualified `/` (e.g. `victor/books`, `OpeItcLoc03/claude-skills`). Literal `agenda` is the only exception (cross-project meta-board). | ## Red flags