umtri-mcp 1.0.0 → 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.
@@ -12,10 +12,11 @@ anything that the normal rules would block.
12
12
  ## While `transplanting = true`
13
13
 
14
14
  You MAY:
15
- - **Add or edit nodes in any season, including past seasons.** The usual
16
- "cannot create/move into a past season" and "grown (past-season) nodes are
17
- immutable" rules are lifted, so you can reconstruct the project's history
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 are
52
- immutable, `delete_node` is soft-only and refuses nodes with active children.
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. Moving a node into a season whose state is `past` is rejected, and grown (past-season) nodes are immutable — UNLESS the ground is transplanting (project.transplanting=true), where both restrictions are lifted so historical structure can be reconstructed (see umtri://rules/transplant). Same protocol validation as create_node — reject on hierarchy violations, warn on soft issues.',
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
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "umtri-mcp",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "MCP server for Umtri — give your AI coding agent a persistent map of your project's structure, dependencies, and bugs.",
5
+ "mcpName": "io.umtri/umtri",
5
6
  "keywords": [
6
7
  "mcp",
7
8
  "model-context-protocol",