feat: v1.2 ease-of-use pass — session-safe paths, registry-only shortcut, resume guidance
- 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 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "cowork-repository-update",
|
"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.",
|
"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",
|
"author": "Message Point Media",
|
||||||
"keywords": ["coordination", "cowork", "skill", "plugin", "registry", "documentation", "wiki", "gitea", "drive"]
|
"keywords": ["coordination", "cowork", "skill", "plugin", "registry", "documentation", "wiki", "gitea", "drive"]
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
CoWork skill that manages the full coordination lifecycle for MPM CoWork skills and plugins.
|
CoWork skill that manages the full coordination lifecycle for MPM CoWork skills and plugins.
|
||||||
|
|
||||||
**Version:** 1.1
|
**Version:** 1.2
|
||||||
**Author:** Message Point Media
|
**Author:** Message Point Media
|
||||||
**Repo:** https://git.mpm.to/mpm/cowork-project
|
**Repo:** https://git.mpm.to/mpm/cowork-project
|
||||||
**CoWork Project:** CW-002 — CoWork Repository Update
|
**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 |
|
| 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.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. |
|
| 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 |
|
| 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 |
|
| .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 |
|
| 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. |
|
||||||
|
|||||||
@@ -27,13 +27,13 @@ Keep these in context — you will need them for every operation.
|
|||||||
|
|
||||||
| Item | Value |
|
| 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` |
|
| Coordination folder (Drive ID) | `1W-FNW--P2R9jVvoowUXFmSe-sAZoY0GS` |
|
||||||
| Project Registry (Sheet ID) | `1xN3l3CjhkpXQBo6hS85Qii86fC-yILg6qbxd33cChMA` |
|
| Project Registry (Sheet ID) | `1xN3l3CjhkpXQBo6hS85Qii86fC-yILg6qbxd33cChMA` |
|
||||||
| Registry sheet name | `Project Registry` |
|
| Registry sheet name | `Project Registry` |
|
||||||
| Wiki Template V2 (Doc ID) | `1QySFc6lycK9AOIaiuQFkv9pGiRlm7S9_wgFsrXM4Alo` |
|
| Wiki Template V2 (Doc ID) | `1QySFc6lycK9AOIaiuQFkv9pGiRlm7S9_wgFsrXM4Alo` |
|
||||||
| Git org base URL | `https://git.mpm.to/` |
|
| 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.
|
**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
|
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.
|
- Assign max + 1 as the new ID.
|
||||||
- Do not rely on row count — rows may be out of order or have gaps.
|
- 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:**
|
**Correct-order registry insertion:**
|
||||||
When writing a new registry row, read the current registry to find where the new CW-ID
|
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
|
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:
|
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?"*
|
*"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
|
## 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 1 — Assign CW-ID** (follow CW-ID Assignment rules above)
|
||||||
|
|
||||||
**Step 2 — Create Drive folder**
|
**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.
|
folder (ID: `1W-FNW--P2R9jVvoowUXFmSe-sAZoY0GS`). Record the new folder ID.
|
||||||
|
|
||||||
**Step 3 — Create repo if requested**
|
**Step 3 — Create repo if requested**
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
Full step-by-step process for creating or updating coordination artifacts for a
|
Full step-by-step process for creating or updating coordination artifacts for a
|
||||||
built or recently updated CoWork skill, plugin, or tool.
|
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) —
|
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.
|
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
|
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
|
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:
|
Read and record:
|
||||||
- `.claude-plugin/plugin.json` → name, version, description, author, keywords
|
- `.claude-plugin/plugin.json` → name, version, description, author, keywords
|
||||||
- `.mcp.json` → server name, command, required env vars (if present — omit for skill-only)
|
- `.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`
|
- `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`
|
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:
|
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
|
- 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)
|
- **Q** (Last Updated): today (YYYY-MM-DD)
|
||||||
- **R** (Notes): brief specific note about what changed
|
- **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.
|
For new rows, Status = Beta for a first-time documented build.
|
||||||
Adjust if the user specifies otherwise.
|
Adjust if the user specifies otherwise.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user