feat(skill): mappa-brainstorm-promote v1.9.0 — два пути (promote/close), forward-ref [[brainstorm:N]], критерий завершения
- 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
This commit is contained in:
@@ -1,17 +1,20 @@
|
|||||||
---
|
---
|
||||||
name: mappa-brainstorm-promote
|
name: mappa-brainstorm-promote
|
||||||
author: ours
|
author: ours
|
||||||
version: 1.8.0
|
version: 1.9.0
|
||||||
description: >
|
description: >
|
||||||
Finalize a matured brainstorm buffer (mappa entity type=brainstorm,
|
Finalize a brainstorm buffer (mappa type=brainstorm, status=buffer): two
|
||||||
status=buffer): read buffer → choose target project → promote via
|
paths. (1) Promote a matured buffer — read → target → brainstorm_promote
|
||||||
mcp__mappa__brainstorm_promote (atomic buffer → wiki-page in target +
|
(atomic buffer → wiki-page + archive, decision 7) → action-items as tasks
|
||||||
archive, decision 7) → extract action-items into target tasks
|
(task_create, bodies carry [[brainstorm:N]]) → review umbrella → covering
|
||||||
(mcp__mappa__task_create, carve-out) → review umbrella → covering letter.
|
letter → final entry. (2) Close an already-completed buffer (work done, no
|
||||||
A general mappa mechanism, like task.create/wiki.create — no workshop
|
wiki needed) — verify linked tasks done → final entry + status=archive.
|
||||||
specifics. Old name — trigger-synonym: workshop-promote-brainstorm.
|
Buffer done ⇔ all action-items created AND all tasks done (incl.
|
||||||
Triggers (bilingual): «промоутни брейнсторм», «выкати в вики»,
|
review-umbrella) — wiki concepts/buffer-completion-criteria. General mappa
|
||||||
"promote the brainstorm", "finalize <topic>", "publish to wiki".
|
mechanism. Old name — trigger-synonym: workshop-promote-brainstorm.
|
||||||
|
Triggers (bilingual): «промоутни брейнсторм», «выкати в вики», "promote
|
||||||
|
the brainstorm", "finalize <topic>", "publish to wiki"; «закрой буфер»,
|
||||||
|
«архивируй буфер», "close the buffer", "archive the buffer".
|
||||||
---
|
---
|
||||||
|
|
||||||
# mappa-brainstorm-promote
|
# 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
|
In the forkflow it sits between work (`mappa-task-work`) and finish
|
||||||
(`mappa-closing-ritual`).
|
(`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`:**
|
**Content promotion — always via `mcp__mappa__brainstorm_promote`:**
|
||||||
atomically creates a wiki page (slug from the buffer, body preserved) in the
|
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,
|
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)
|
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=<target>)
|
├── ordinary project → brainstorm_promote(project=<target>)
|
||||||
│ → wiki page (spec) in the target wiki
|
│ → 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
|
- If `brainstorm_promote` failed (version conflict, 409) → retry with the
|
||||||
fresh internal id; on a stable failure — abort before creating tasks.
|
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
|
6. **Action-items parsing:** regex over lines like `- [ ] ...` in the buffer
|
||||||
body, sections after `## Следующие шаги`/`## TODO`/`## Next steps`/
|
body, sections after `## Следующие шаги`/`## TODO`/`## Next steps`/
|
||||||
`## Action items`. Show the list, allow editing/removing/adding. If 0
|
`## 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 —
|
- **Ordinary target:** for each action-item —
|
||||||
`mcp__mappa__task_create(project=<target>, slug=<kebab>, title, description,
|
`mcp__mappa__task_create(project=<target>, slug=<kebab>, title, description,
|
||||||
status='ready')`. Create — carve-out, no lease needed (wiki:2660/#1054).
|
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'`:
|
- **Skill:** three baseline tasks in `project='skills'`:
|
||||||
- `[<name>-install]` — run `install.sh` in `~/projects/skills/`,
|
- `[<name>-install]` — run `install.sh` in `~/projects/skills/`,
|
||||||
verify activation in a new session.
|
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
|
- If the review task failed — report, **continue** to step 9 (the promotion
|
||||||
is already done, the buffer is in archive).
|
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
|
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:
|
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 stays in buffer — retried later.
|
||||||
- Buffer already `archive` (repeated call) → abort: promotion is one-shot,
|
- Buffer already `archive` (repeated call) → abort: promotion is one-shot,
|
||||||
idempotence via status (decision 7).
|
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
|
- `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.
|
partial. The promotion is already done — the buffer is not rolled back.
|
||||||
- `task_create` review-umbrella failed → don't block, report to the user
|
- `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 +
|
- **Always:** `brainstorm_promote` — atomically wiki page in the target +
|
||||||
buffer → `archive` + parent_of edges (wiki→buffer, refs→buffer) +
|
buffer → `archive` + parent_of edges (wiki→buffer, refs→buffer) +
|
||||||
`brainstorm.promoted` event.
|
`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
|
- **Ordinary target:** spec page in the target project's wiki (with
|
||||||
frontmatter-summary, wiki:2661) + impl tasks + review-umbrella + covering letter.
|
frontmatter-summary, wiki:2661) + impl tasks + review-umbrella + covering letter.
|
||||||
- **Skill:** skeleton `~/projects/skills/skills/<name>/SKILL.md` (only header +
|
- **Skill:** skeleton `~/projects/skills/skills/<name>/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 `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
|
- Don't delete the buffer instead of promoting — the graph history is lost
|
||||||
(parent_of, refs).
|
(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
|
- Don't batch `task_create` (race; incident 2026-08-24: 6/7 failed) — only
|
||||||
sequentially.
|
sequentially.
|
||||||
- Don't forget the covering letter — a task on the board doesn't ping a live session.
|
- Don't forget the covering letter — a task on the board doesn't ping a live session.
|
||||||
|
|||||||
Reference in New Issue
Block a user