From 3ea7e53f99b30bcfacee99647a9b794d0744f589 Mon Sep 17 00:00:00 2001 From: vitya Date: Tue, 25 Aug 2026 23:34:14 +0300 Subject: [PATCH] =?UTF-8?q?feat(skill):=20mappa-brainstorm-promote=20v1.9.?= =?UTF-8?q?0=20=E2=80=94=20=D0=B4=D0=B2=D0=B0=20=D0=BF=D1=83=D1=82=D0=B8?= =?UTF-8?q?=20(promote/close),=20forward-ref=20[[brainstorm:N]],=20=D0=BA?= =?UTF-8?q?=D1=80=D0=B8=D1=82=D0=B5=D1=80=D0=B8=D0=B9=20=D0=B7=D0=B0=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=88=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - task_create из буфера несёт [[brainstorm:N]] (ребро на write, same-project) - close-путь (step 5b): уже-завершённый буфер → проверка тасок + финальный entry + status=archive - финальный entry со списком [[task:N]] (step 8b) - критерий: буфер done ⇔ все action-items поставлены ∧ все таски done (вкл. review-зонт) — wiki:3188 .workshop - триггеры: «закрой буфер», «архивируй буфер», close the buffer --- skills/mappa-brainstorm-promote/SKILL.md | 89 +++++++++++++++++++++--- 1 file changed, 78 insertions(+), 11 deletions(-) diff --git a/skills/mappa-brainstorm-promote/SKILL.md b/skills/mappa-brainstorm-promote/SKILL.md index 282dd55..eec316d 100644 --- a/skills/mappa-brainstorm-promote/SKILL.md +++ b/skills/mappa-brainstorm-promote/SKILL.md @@ -1,17 +1,20 @@ --- name: mappa-brainstorm-promote author: ours -version: 1.8.0 +version: 1.9.0 description: > - Finalize a matured brainstorm buffer (mappa entity type=brainstorm, - status=buffer): read buffer → choose target project → promote via - mcp__mappa__brainstorm_promote (atomic buffer → wiki-page in target + - archive, decision 7) → extract action-items into target tasks - (mcp__mappa__task_create, carve-out) → review umbrella → covering letter. - A general mappa mechanism, like task.create/wiki.create — no workshop - specifics. Old name — trigger-synonym: workshop-promote-brainstorm. - Triggers (bilingual): «промоутни брейнсторм», «выкати в вики», - "promote the brainstorm", "finalize ", "publish to wiki". + Finalize a brainstorm buffer (mappa type=brainstorm, status=buffer): two + paths. (1) Promote a matured buffer — read → target → brainstorm_promote + (atomic buffer → wiki-page + archive, decision 7) → action-items as tasks + (task_create, bodies carry [[brainstorm:N]]) → review umbrella → covering + letter → final entry. (2) Close an already-completed buffer (work done, no + wiki needed) — verify linked tasks done → final entry + status=archive. + Buffer done ⇔ all action-items created AND all tasks done (incl. + review-umbrella) — wiki concepts/buffer-completion-criteria. General mappa + mechanism. Old name — trigger-synonym: workshop-promote-brainstorm. + Triggers (bilingual): «промоутни брейнсторм», «выкати в вики», "promote + the brainstorm", "finalize ", "publish to wiki"; «закрой буфер», + «архивируй буфер», "close the buffer", "archive the buffer". --- # mappa-brainstorm-promote @@ -28,6 +31,20 @@ a loop: it's launched explicitly on the final buffer and takes it to the end. In the forkflow it sits between work (`mappa-task-work`) and finish (`mappa-closing-ritual`). +**Completion criteria** (wiki `concepts/buffer-completion-criteria`, .workshop): +a buffer is done ⇔ (all action-items are created as tasks) ∧ (all created +tasks are done, including the review-umbrella). Two entry paths to `archive`: + +- **Promote** (steps 5–9): a maturing buffer whose content must land in a + wiki — `brainstorm_promote` (wiki page + archive atomically). +- **Close** (step 5b): an already-completed buffer — work done long ago + (tasks done / resolved / legacy-promoted in the file era), no wiki page + needed. Verify the chain — in the graph for same-project links, via + direct `task_get` for cross-project tasks — write the final entry, + `brainstorm_update(status='archive')`. This is how done-but-not-closed + buffers are swept (case: entity-uuid brainstorm:109, tasks 1067/1068/1093 + done, buffer still `buffer` with zero edges — audit 2026-08-25). + **Content promotion — always via `mcp__mappa__brainstorm_promote`:** atomically creates a wiki page (slug from the buffer, body preserved) in the project from the call and moves the buffer to `archive` (number/slug stable, @@ -59,6 +76,9 @@ brainstorm entity in mappa (type=brainstorm, status=buffer) │ ▼ ask: target project (where to promote) + │ + ├── close (no promotion): work already done, no wiki page needed + │ → step 5b (graph check + final entry + status=archive) │ ├── ordinary project → brainstorm_promote(project=) │ → wiki page (spec) in the target wiki @@ -138,6 +158,29 @@ brainstorm entity in mappa (type=brainstorm, status=buffer) - If `brainstorm_promote` failed (version conflict, 409) → retry with the fresh internal id; on a stable failure — abort before creating tasks. +5b. **Closing an already-completed buffer (no promotion).** When the work is + already done and no wiki page is needed (legacy-promoted, resolved by the + human, tasks all done, or the decision was reversed): + + - Verify the chain: `mcp__mappa__graph_neighbors`/`graph_backlinks` on + the buffer for same-project links (edges resolve in the owner's project + scope, finding #1014); for cross-project tasks (workshop → target, the + normal case) resolve the refs from the body/final entry via direct + `mcp__mappa__task_get(task:N)` — every linked task must be status=done + (or the buffer is closed by content: «решено»/«отменено»). + If tasks are done but nothing is written — the chain was never recorded; + the final entry below fixes it (backward text refs). + - Append the final entry to the body via `mcp__mappa__brainstorm_update` + (body, expected version; 409 → re-GET → retry): + «Закрытие (дата) — цепочка завершена: [[task:N]]… done / решено / + промоутнуто (легаси). Критерий: [[concepts/buffer-completion-criteria]]». + The `[[task:N]]` and `[[wiki:…]]` links create the closing edges on + write (decision 4). + - Set `status='archive'` in the same `brainstorm_update`. Buffer archived + without a wiki page — the knowledge is already where it belongs or is + historical (review reports, legacy plans). + - Report: `brainstorm:N` → archive, with the reason. + 6. **Action-items parsing:** regex over lines like `- [ ] ...` in the buffer body, sections after `## Следующие шаги`/`## TODO`/`## Next steps`/ `## Action items`. Show the list, allow editing/removing/adding. If 0 @@ -151,7 +194,11 @@ brainstorm entity in mappa (type=brainstorm, status=buffer) - **Ordinary target:** for each action-item — `mcp__mappa__task_create(project=, slug=, title, description, status='ready')`. Create — carve-out, no lease needed (wiki:2660/#1054). - The impl task description references the spec (wiki:NNNN from step 5). + The impl task description references the spec (wiki:NNNN from step 5) and + MUST start with the buffer wikilink `[[brainstorm:N]]` — a ref edge is + created on write (decision 4) when the buffer is in the same project as + the task; cross-project it stays a searchable text ref + (`entity_search "brainstorm:N"` finds the task). - **Skill:** three baseline tasks in `project='skills'`: - `[-install]` — run `install.sh` in `~/projects/skills/`, verify activation in a new session. @@ -181,6 +228,15 @@ brainstorm entity in mappa (type=brainstorm, status=buffer) - If the review task failed — report, **continue** to step 9 (the promotion is already done, the buffer is in archive). +8b. **Final entry in the buffer (closing the chain).** After tasks are + created, append to the buffer body via `mcp__mappa__brainstorm_update` + (body + expected version; 409 → re-GET → retry): «Промоут → wiki:NNNN · + таски [[task:N]]… · review-зонт [[task:M]]». This writes the backward + refs — the completion record per `concepts/buffer-completion-criteria` + (cross-project: text refs, verified by `task_get`; same-project: edges). + If the body PATCH on an archived entity is rejected — report to the user + (the chain stays visible through the tasks' [[brainstorm:N]] forward refs). + 9. **Covering letter to the target's inbox (mappa-delegation canon).** A task on the board doesn't ping a live session, a letter = ping + context: @@ -205,6 +261,11 @@ brainstorm entity in mappa (type=brainstorm, status=buffer) buffer stays in buffer — retried later. - Buffer already `archive` (repeated call) → abort: promotion is one-shot, idempotence via status (decision 7). +- Closing (step 5b): buffer still has open linked tasks → abort, don't close; + report which tasks are open. Buffer is a living storm → abort (close only + completed or reversed buffers). +- Closing: `brainstorm_update` 409 (version) → re-GET → retry; repeated + failure → report, buffer stays in `buffer`. - `task_create` failed on the N-th content task → continue the rest, report partial. The promotion is already done — the buffer is not rolled back. - `task_create` review-umbrella failed → don't block, report to the user @@ -224,6 +285,8 @@ brainstorm entity in mappa (type=brainstorm, status=buffer) - **Always:** `brainstorm_promote` — atomically wiki page in the target + buffer → `archive` + parent_of edges (wiki→buffer, refs→buffer) + `brainstorm.promoted` event. +- **Closing (5b):** `brainstorm_update` — final entry with `[[task:N]]`/ + `[[wiki:…]]` refs + status → `archive`; closing edges on write. - **Ordinary target:** spec page in the target project's wiki (with frontmatter-summary, wiki:2661) + impl tasks + review-umbrella + covering letter. - **Skill:** skeleton `~/projects/skills/skills//SKILL.md` (only header + @@ -244,6 +307,10 @@ brainstorm entity in mappa (type=brainstorm, status=buffer) - Don't `git mv` the buffer into the archive — the promotion archives it itself. - Don't delete the buffer instead of promoting — the graph history is lost (parent_of, refs). +- Don't close a living buffer (5b) — closing is only for completed/reversed + work; verify linked tasks via the graph first. +- Don't close without the final entry — the backward refs are the chain. +- Don't invent wiki pages when closing (5b) — closing ≠ promotion. - Don't batch `task_create` (race; incident 2026-08-24: 6/7 failed) — only sequentially. - Don't forget the covering letter — a task on the board doesn't ping a live session.