From d68aa982b3480d8ce5bc62640924df01d8dad37c Mon Sep 17 00:00:00 2001 From: Jason Stedwell Date: Sat, 4 Jul 2026 13:08:42 -0500 Subject: [PATCH] =?UTF-8?q?feat:=20v1.2=20ease-of-use=20pass=20=E2=80=94?= =?UTF-8?q?=20session-safe=20paths,=20registry-only=20shortcut,=20resume?= =?UTF-8?q?=20guidance?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove hardcoded session outputs path; determine per session - Relabel owner-email constant (was mislabeled "User email") - Add CW-ID zero-padding rule (CW-007, never CW-7) - Add quick registry-only update shortcut within Mode 2 - Add resume-after-partial-failure guidance + folder preflight in Mode 1 - Add archive-download fallback via Gitea get_file_contents - Add targeted-cell registry writes to protect hand-maintained columns - Add four troubleshooting entries to README Backwards compatible: registry columns, CW-ID scheme, Wiki V2 format, and .skill packaging unchanged. Co-Authored-By: Claude Fable 5 --- .claude-plugin/plugin.json | 2 +- README.md | 7 +++++- skills/cowork-project/SKILL.md | 23 ++++++++++++++++--- .../references/mode-document.md | 17 +++++++++++++- 4 files changed, 43 insertions(+), 6 deletions(-) diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index d80ab6c..9c6a716 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "cowork-repository-update", - "version": "1.1", + "version": "1.2", "description": "Manages the full coordination lifecycle for MPM CoWork skills and plugins — concept interviews, folder creation, README writing, Wiki V2 docs, .skill packaging, and registry updates.", "author": "Message Point Media", "keywords": ["coordination", "cowork", "skill", "plugin", "registry", "documentation", "wiki", "gitea", "drive"] diff --git a/README.md b/README.md index 85c0644..991c616 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ CoWork skill that manages the full coordination lifecycle for MPM CoWork skills and plugins. -**Version:** 1.1 +**Version:** 1.2 **Author:** Message Point Media **Repo:** https://git.mpm.to/mpm/cowork-project **CoWork Project:** CW-002 — CoWork Repository Update @@ -168,6 +168,7 @@ This is a skill-only plugin — no server installation required. | Date | Version | What Changed | |---|---|---| +| 2026-07-04 | v1.2 | Ease-of-use pass, no workflow changes: removed hardcoded session outputs path (now determined per session); clarified the owner-email constant (was mislabeled "User email"); added CW-ID zero-padding rule; added quick registry-only update shortcut; added resume-after-partial-failure guidance; added archive-download fallback via Gitea file reads; added targeted-cell registry writes to protect hand-maintained columns. Fully backwards compatible — registry columns, CW-ID scheme, Wiki V2 format, and .skill packaging unchanged. | | 2026-05-05 | v1.1 | Renamed to CoWork Repository Update. Fixed skill-only .skill packaging: zip must have one top-level folder with SKILL.md at root (not nested under skills/). | | 2026-05-05 | v1.0 | Initial release. Mode 1 concept interview + Mode 2 document existing build. | @@ -182,3 +183,7 @@ This is a skill-only plugin — no server installation required. | Wiki doc fails to appear in Shared Drive folder | Use `create_doc` (lands in My Drive) then `update_drive_file` with `add_parents` to move | | .skill upload rejected ("Zip must contain exactly one top-level folder") | Stage into `/tmp/[skill-name]-pkg/[skill-name]/`, put SKILL.md directly there, zip the folder | | Registry row out of order | Read all rows; shift from insertion point downward one row at a time; write new row at correct position | +| README in Git shows a base64 blob instead of markdown | Content was double-encoded. Pass plain markdown text to `create_or_update_file` — the Gitea MCP base64-encodes internally. Re-push the plain text to fix. | +| Drive upload fails with "file not found" on `fileUrl` | The path points at the sandbox `/tmp` or a stale session path. Copy the file to the current session's outputs directory and use that host path. | +| Duplicate CW-XXX folder or registry row after a failed run | Don't restart from scratch — search for existing artifacts first, reuse them, and continue from the first missing one (see "Resuming a partial run" in SKILL.md). | +| Registry cells wiped (Chat Space, Odoo Module) after an update | A full-row write overwrote hand-maintained columns. Restore from sheet version history; use targeted range writes for changed cells only. | diff --git a/skills/cowork-project/SKILL.md b/skills/cowork-project/SKILL.md index c4bba2c..10249db 100644 --- a/skills/cowork-project/SKILL.md +++ b/skills/cowork-project/SKILL.md @@ -27,13 +27,13 @@ Keep these in context — you will need them for every operation. | Item | Value | |---|---| -| User email | `bryan@messagepoint.media` | +| Coordination system owner | `bryan@messagepoint.media` (contact for access/permission issues — NOT necessarily the current user) | | Coordination folder (Drive ID) | `1W-FNW--P2R9jVvoowUXFmSe-sAZoY0GS` | | Project Registry (Sheet ID) | `1xN3l3CjhkpXQBo6hS85Qii86fC-yILg6qbxd33cChMA` | | Registry sheet name | `Project Registry` | | Wiki Template V2 (Doc ID) | `1QySFc6lycK9AOIaiuQFkv9pGiRlm7S9_wgFsrXM4Alo` | | Git org base URL | `https://git.mpm.to/` | -| Outputs working dir | `/sessions/vigilant-loving-faraday/mnt/outputs/` | +| Outputs working dir | The **current session's** outputs directory (e.g. `/sessions/[session-name]/mnt/outputs/` in Cowork, or the session scratchpad in Claude Code). Never reuse a path from a previous session — session mount paths change every session. | **IMPORTANT — File Writes:** Never write files directly to the Google Drive FUSE mount path. The mounted path is unreliable and causes deadlock errors. Always use Drive API tools @@ -69,6 +69,9 @@ auto-assign the next available number?"* - Assign max + 1 as the new ID. - Do not rely on row count — rows may be out of order or have gaps. +**ID formatting:** Always zero-pad to 3 digits — `CW-007`, `CW-042`, `CW-115`. Never write +`CW-7`. Consistent padding keeps sheet sorting and folder names aligned. + **Correct-order registry insertion:** When writing a new registry row, read the current registry to find where the new CW-ID fits numerically. If it belongs in the middle (backfill case), shift all rows from that @@ -88,6 +91,18 @@ Determine the mode before doing anything else: If the context makes it obvious, proceed. If ambiguous, ask: *"Is this a new concept to capture, or do you have a built plugin/skill you want to document?"* +**Quick registry-only update (shortcut within Mode 2):** If the user only wants to change +registry fields for an existing project — e.g. bump the Version, change Status, fix a link, +add a Note — and no artifacts (README, wiki, .skill) need regenerating, skip the full 10-step +process. Just: read the existing registry row, update only the changed fields plus +Last Updated (Q), and confirm. Never rewrite untouched columns. + +**Resuming a partial run:** If a previous run failed or was interrupted mid-way, do NOT +restart blindly — that creates duplicate folders, repos, and registry rows. First check what +already exists: search the Coordination folder for a `CW-XXX` folder, check the registry for +the row, check the Drive folder contents for README/wiki/.skill files. Reuse everything that +already exists and continue from the first missing artifact. + --- ## Mode 1 — Concept Interview @@ -118,7 +133,9 @@ Execute these steps in order. Do not skip any. **Step 1 — Assign CW-ID** (follow CW-ID Assignment rules above) **Step 2 — Create Drive folder** -Use `create_drive_folder` to create `CW-XXX — [Project Name]` inside the Coordination +First search the Coordination folder for an existing folder starting with `CW-XXX` — if one +exists (e.g. from an earlier interrupted run), reuse it instead of creating a duplicate. +Otherwise use `create_drive_folder` to create `CW-XXX — [Project Name]` inside the Coordination folder (ID: `1W-FNW--P2R9jVvoowUXFmSe-sAZoY0GS`). Record the new folder ID. **Step 3 — Create repo if requested** diff --git a/skills/cowork-project/references/mode-document.md b/skills/cowork-project/references/mode-document.md index 8c99683..df55b0f 100644 --- a/skills/cowork-project/references/mode-document.md +++ b/skills/cowork-project/references/mode-document.md @@ -3,6 +3,9 @@ Full step-by-step process for creating or updating coordination artifacts for a built or recently updated CoWork skill, plugin, or tool. +If the user only needs registry fields touched (version bump, status change, link fix), +use the quick registry-only shortcut described in SKILL.md — skip straight to Steps 3, 9, 10. + All three primary artifacts — README.md, Wiki doc, and .plugin file (if applicable) — MUST be placed inside the CW-XXX Drive folder before the registry row is written. Verify each one is in the folder. Do not write the registry row until all artifacts @@ -41,6 +44,11 @@ curl -L -o /tmp/plugin-repo.zip "[repo-url]/archive/main.zip" unzip -o /tmp/plugin-repo.zip -d /tmp/plugin-repo ``` +**If the archive download fails** (network restriction, auth, or empty repo): fall back to +reading files individually via the Gitea MCP `get_file_contents` tool — start with +`.claude-plugin/plugin.json` and `skills/*/SKILL.md`, then any `references/` files it mentions. +Slower, but produces the same metadata. + Read and record: - `.claude-plugin/plugin.json` → name, version, description, author, keywords - `.mcp.json` → server name, command, required env vars (if present — omit for skill-only) @@ -236,7 +244,9 @@ Use `create_drive_file` with: - `fileUrl`: `file:///[outputs-path]/[skill-name]-v[version].skill` Note: The Drive API server runs on the host, not the sandbox. Copy the file from `/tmp` -to the outputs directory first, then reference it via the host path (not the VM `/tmp` path). +to the **current session's** outputs directory first, then reference it via the host path +(not the VM `/tmp` path). The outputs path is session-specific — determine it fresh each +session; never reuse a path remembered from a previous session. If an older `.skill` or `.plugin` file exists in the folder, trash it first: - Use `search_drive_files` to find it by name pattern in the folder @@ -326,6 +336,11 @@ Fields to always update when documenting an existing build: - **Q** (Last Updated): today (YYYY-MM-DD) - **R** (Notes): brief specific note about what changed +**Do not clobber unrelated columns.** When updating an existing row, write only the cells +that changed (use targeted range writes, e.g. `F5` and `Q5:R5`) rather than rewriting the +whole row. Columns like M (Chat Space) and O (Odoo Module) are often maintained by hand — +overwriting them with blanks loses data. + For new rows, Status = Beta for a first-time documented build. Adjust if the user specifies otherwise.