drafted 1.19.32 → 1.19.33

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/mcp/server.mjs CHANGED
@@ -3384,14 +3384,14 @@ tool('fs', 'Navigate Drafted like a local filesystem. A FOLDER is the single con
3384
3384
  : (note ? note.trimStart() : '');
3385
3385
  });
3386
3386
 
3387
- // Which of these hits are read-only in Drafted. A git-owned folder's wiki
3388
- // and skills answer 409 repo_owned on write, and nothing else in the
3389
- // output distinguishes them from an ordinary path the failure lands at
3390
- // write time, after the edit is composed.
3387
+ // Which of these hits are read-only in Drafted, and precisely which part.
3388
+ // A link makes the folder's WIKI and SKILLS git-owned (409 repo_owned on
3389
+ // write); its TASKS and PROJECTS write normally. Naming the folder alone
3390
+ // would tell an agent not to attempt a frame write it is entitled to make.
3391
3391
  const linked = (Array.isArray(repos.v?.repos) ? repos.v.repos : [])
3392
3392
  .map(r => `${r.folderName ? r.folderName : '(org root)'} → ${r.slug}@${r.branch}`);
3393
3393
  if (linked.length) {
3394
- out.push(`Git-owned (edits are commits, not fs writes): ${linked.join('; ')}`);
3394
+ out.push(`Git-owned WIKI + SKILLS (edit those via commit; tasks + projects write normally): ${linked.join('; ')}`);
3395
3395
  }
3396
3396
 
3397
3397
  const searched = orgFromPath || org || null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drafted",
3
- "version": "1.19.32",
3
+ "version": "1.19.33",
4
4
  "description": "Drafted — visual thinking surface for humans and AI agents. Renders HTML, markdown, images, and code as frames on a zoomable canvas, with MCP tools for AI agents and real-time sync for humans.",
5
5
  "type": "module",
6
6
  "files": [
@@ -120,10 +120,16 @@ export function liftFolderScope(path, to) {
120
120
  * org's folder names (each of which is its full path). One segment deeper only —
121
121
  * `ls` shows a level, not a tree.
122
122
  */
123
- /** `repoOf(fullFolderName)` -> "slug@branch" when git owns that folder, else
124
- * null. A git-owned folder's wiki and skills answer 409 repo_owned on write,
125
- * and without this the listing renders it identically to a writable one — the
126
- * agent finds out at write time, after composing the edit. */
123
+ /** `repoOf(fullFolderName)` -> "slug@branch" when a repo is linked to that
124
+ * folder, else null.
125
+ *
126
+ * SAY WHAT IS OWNED, NOT "THE FOLDER". A link makes the folder's WIKI and
127
+ * SKILLS git-owned — those answer 409 repo_owned on write. Its TASKS and
128
+ * PROJECTS are untouched and write normally (verified: a frame write into a
129
+ * project inside a linked folder succeeds). A bare "GIT-OWNED" on the folder
130
+ * overclaims, and an agent that believes it will not attempt a frame write it
131
+ * is perfectly entitled to make — a false negative costs more here than the
132
+ * 409 it was meant to prevent. */
127
133
  export function subfolderEntries(base, prefix, names, repoOf = null) {
128
134
  const depth = prefix ? normalizeFolder(prefix).split('/').length : 0;
129
135
  const kids = new Set();
@@ -142,7 +148,7 @@ export function subfolderEntries(base, prefix, names, repoOf = null) {
142
148
  type: 'directory',
143
149
  path: `${String(base || '').replace(/\/+$/, '')}/${name}`,
144
150
  hint: repo
145
- ? `folder — carries its own wiki, skills, tasks and projects · GIT-OWNED by ${repo} (edits are commits)`
151
+ ? `folder — carries its own wiki, skills, tasks and projects · wiki + skills GIT-OWNED by ${repo} (edit those via commit); tasks + projects write normally`
146
152
  : 'folder — carries its own wiki, skills, tasks and projects',
147
153
  };
148
154
  });