feat(skills): multi-owner v2.x sweep — using-projects-meta v1.2.0 + setup-projects-meta v1.1.0

- using-projects-meta 1.1.0 → 1.2.0: examples qualified (`victor/books`, `OpeItcLoc03/claude-skills`), `target_project` description rewrites _meta → `agenda` literal + bare-name reject; new common-mistake row; cross-ref to `concepts/projects-meta-multi-owner`.
- setup-projects-meta 1.0.1 → 1.1.0: auth.toml template now reflects v2.x schema (`gitea_owners`, `agenda_tasks_repo` qualified, optional `gitea_aggregate_skip_owners`); added schema-notes block with backwards-compat for legacy `gitea_user`-only installs.
- closes [update-using-projects-meta-qualified-names] + [update-setup-projects-meta-auth-toml] (last 2 of 14 multi-owner umbrella blockers).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-09 20:53:57 +03:00
parent fb304757cd
commit 1e15a5319d
5 changed files with 31 additions and 19 deletions

View File

@@ -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)_
<!--
Canonical layout. One block per task. Per-task deep context lives in
@@ -698,24 +698,26 @@ Pattern для починки уже отработан в `setup-projects-meta`
---
## 🔵 [update-using-projects-meta-qualified-names] — Обновить SKILL.md скила `using-projects-meta`: примеры `target_project` переписать на qualified формат (`<owner>/<repo>` вместо bare-имени). Cross-reference на concept `projects-meta-multi-owner` в common wiki. Часть миграции multi-owner.
## 🟢 [update-using-projects-meta-qualified-names] — Обновить SKILL.md скила `using-projects-meta`: примеры `target_project` переписать на qualified формат (`<owner>/<repo>` вместо bare-имени). Cross-reference на concept `projects-meta-multi-owner` в common wiki. Часть миграции multi-owner.
**Status:** blocked
**Where I stopped:** (not started)
**Next action:** Прочитать `~/projects/claude-skills/skills/using-projects-meta/SKILL.md`. Заменить все примеры с bare `target_project: "books"` на `target_project: "victor/books"`. В разделе common mistakes добавить «bare-name → ошибка с подсказкой». Bump `version` в frontmatter (MINOR — новая семантика). Зависит от code-side `multi-owner-tools-mutate` в common.
**Status:** done
**Where I stopped:** v1.1.0 → 1.2.0 — examples переписаны (`books` → `victor/books`, `claude-skills` → `OpeItcLoc03/claude-skills`), `target_project` description обновлён (qualified + `agenda` literal + bare → error), новый row в Common mistakes, cross-ref на `concepts/projects-meta-multi-owner`.
**Next action:** (none — kept until merged)
**Blocker:** multi-owner-tools-mutate
**Branch:** n/a
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: .workshop / 2026-05-08T08:15:14.254Z -->
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-05-09T17:52:40Z / note: SKILL.md v1.2.0 shipped — qualified examples + bare-name common-mistake row -->
---
## 🔵 [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
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: .workshop / 2026-05-08T08:15:19.671Z -->
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-05-09T17:52:40Z / note: SKILL.md v1.1.0 shipped — full v2.x auth.toml template + schema notes -->
---

Binary file not shown.

Binary file not shown.

View File

@@ -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 = "<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 = "<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** (`<owner>/<repo>`). 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`

View File

@@ -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: `<type>/<slug>.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/<slug>.md``sources/<slug>.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** `<owner>/<repo>` (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: "<one-line summary>"
(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 `<owner>/<repo>` (e.g. `victor/books`, `OpeItcLoc03/claude-skills`). Literal `agenda` is the only exception (cross-project meta-board). |
## Red flags