umtri-mcp 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/resources/transplant.md +24 -7
- package/core/tools.js +1 -1
- package/package.json +1 -1
|
@@ -12,10 +12,11 @@ anything that the normal rules would block.
|
|
|
12
12
|
## While `transplanting = true`
|
|
13
13
|
|
|
14
14
|
You MAY:
|
|
15
|
-
- **
|
|
16
|
-
"cannot create/move into a past season" and
|
|
17
|
-
|
|
18
|
-
season by season.
|
|
15
|
+
- **Restructure nodes in any season, including past seasons.** The usual
|
|
16
|
+
"cannot create/move into a past season" rule and the lock on a grown node's
|
|
17
|
+
`parent` / `season` / `type` / `sproutedAt` are lifted, so you can reconstruct
|
|
18
|
+
the project's history season by season. (Content fields on grown nodes are
|
|
19
|
+
editable even without transplanting — see below.)
|
|
19
20
|
- **Hard-delete import mistakes.** `delete_node` accepts `hard: true` and the
|
|
20
21
|
active-descendant guard is lifted (subtree cascades). Use this to remove
|
|
21
22
|
wrongly-imported nodes for good. Soft delete is still the default; reach for
|
|
@@ -48,11 +49,27 @@ remove it.
|
|
|
48
49
|
|
|
49
50
|
## After rooting (`transplanting = false`)
|
|
50
51
|
|
|
51
|
-
All normal guards return: past seasons reject new/moved nodes, grown nodes
|
|
52
|
-
|
|
53
|
-
Treat the tree as settled — small, observable changes only
|
|
52
|
+
All normal guards return: past seasons reject new/moved nodes, grown nodes lock
|
|
53
|
+
their shape and timeline, `delete_node` is soft-only and refuses nodes with
|
|
54
|
+
active children. Treat the tree as settled — small, observable changes only
|
|
54
55
|
(see umtri://about/vision).
|
|
55
56
|
|
|
57
|
+
### What stays editable on a grown node
|
|
58
|
+
|
|
59
|
+
Rooting does **not** freeze a past node's content. Without transplanting you can
|
|
60
|
+
still patch `label`, `description`, `metadata` and `tags`; only `parent`,
|
|
61
|
+
`season`, `type` and `sproutedAt` are refused.
|
|
62
|
+
|
|
63
|
+
The line is whether the change leaves a trail. Content edits are recorded in the
|
|
64
|
+
ground's event log with a before/after diff, so history stays recoverable.
|
|
65
|
+
Shape and timeline edits rewrite what the tree *was*, which is why they need the
|
|
66
|
+
explicit transplanting state.
|
|
67
|
+
|
|
68
|
+
This matters in practice: when code is refactored and files move, the
|
|
69
|
+
`metadata.implements` of past-season nodes goes stale. Fix it in place — do not
|
|
70
|
+
ask for transplanting just to correct a path, because that unlocks every past
|
|
71
|
+
season at once for a change that needed none of it.
|
|
72
|
+
|
|
56
73
|
## How to behave
|
|
57
74
|
|
|
58
75
|
- Use the relaxed window to get the **structure** right — it is still an
|
package/core/tools.js
CHANGED
|
@@ -620,7 +620,7 @@ export function registerTools(server, { api }) {
|
|
|
620
620
|
'update_node',
|
|
621
621
|
{
|
|
622
622
|
title: 'Update a node',
|
|
623
|
-
description: 'Partial update of a node. Patchable fields: label, type, parent, season, description, tags, metadata, sproutedAt. Type change reclassifies role; parent change recomputes the ltree path automatically.
|
|
623
|
+
description: 'Partial update of a node. Patchable fields: label, type, parent, season, description, tags, metadata, sproutedAt. Type change reclassifies role; parent change recomputes the ltree path automatically. On a grown (past-season) node, only the tree\'s shape and timeline are locked — parent, season, type and sproutedAt are rejected. Content fields (label, description, metadata, tags) stay editable, so you can keep metadata.implements current when code moves without reopening transplanting. Moving any node into a `past` season is rejected. Both restrictions lift while the ground is transplanting (project.transplanting=true), so historical structure can be reconstructed (see umtri://rules/transplant). Same protocol validation as create_node — reject on hierarchy violations, warn on soft issues.',
|
|
624
624
|
inputSchema: z.object({
|
|
625
625
|
slug: z.string().min(1).describe('Ground slug.'),
|
|
626
626
|
id: z.string().min(1).describe('Node id.'),
|
package/package.json
CHANGED