ab1e514f78
All four checks pass on the baked 1.6.0 artifact (skills register + precedence, allowed-tools, operator-only sweep/triage, CoWork $ECHO fallback). Caveat noted: allowed-tools globs match literal script names, not the "$ECHO" variable form — re-confirm on the Claude Code CLI if that surface becomes routine. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4.9 KiB
4.9 KiB
echo-memory — v1.6 TODO
Working list for the next minor release. Started 2026-07-03, right after 1.5.1 shipped. Add findings from 1.5.x live testing to the "Surfaced in testing" section as they come up — that's what this doc is for.
1. Migrate the eight slash commands to the skills format
The installer flags the plugin's commands/ directory as the legacy format
("Both formats work — consider migrating to skills/*/SKILL.md"). Confirmed against
the official docs (code.claude.com/docs/en/skills.md, plugins.md):
- Non-breaking.
commands/echo-save.md→skills/echo-save/SKILL.mdkeeps the invocation name:/echo-saveworks identically. No deprecation date oncommands/; this is future-proofing, not a fire. - Do it for the features, not the notice:
allowed-toolsper skill — done 1.6.0 (all eight skills pre-authorize the resolvedpython3/python/py -3invocations + the CoWorklsprobe).disable-model-invocation: trueon the write-heavy entry points (/echo-sweep,/echo-triage) — done 1.6.0; read-side stays model-invocable.- De-duplicate the CoWork
$ECHOpath-resolution block — resolved 1.6.0 as not-supported: per the official skills docs, skill directories are self-contained (no cross-skill snippet sharing), so the 2-line block stays per-skill. Docs confirmed same-name skill takes precedence over the legacy command, so coexistence is safe. argument-hintcarries over as-is;$ARGUMENTSsubstitution unchanged — done 1.6.0 (save/recall/reflect).
- Verify a migrated build installs cleanly on desktop and in a CoWork session
before deleting
commands/— verified 2026-07-28 on the baked 1.6.0-jason artifact, all four checks pass: (1) all eight skills register and take precedence over the coexisting legacy commands; (2)allowed-toolspresent on load/health/recall; (3)disable-model-invocationconfirmed on exactly sweep+triage; (4) CoWork$ECHOfallback resolves via/sessions/*/mnt/.remote-plugins/*and executes. 2.0'scommands/deletion is unblocked. Known caveat, accepted (CLI is not a normal operating surface here): theallowed-toolsglobs match the literal script names (*echo.py*/*vault_lint.py*) while the bodies invoke via the resolved"$ECHO"variable — if the Claude Code CLI matches permissions before variable expansion, those skills could still prompt there. Re-confirm on the CLI if that surface ever matters.
2. plugin.json completeness (from the old MAINTENANCE checklist)
- Add
homepage/ repository URL — done 1.6.0: bothhomepageandrepositoryset tohttps://git.alwisp.com/jason/echo.
3. Vault follow-ups (noticed during the 1.5.0 dead-link cleanup)
Three of the 27 unwrapped "dead" links were actually typos pointing at real notes; they were unwrapped per instruction but repointing them would restore real graph edges:
projects/active/forgerunner.md+_agent/sessions/2026-06-29-2200-forgerunner-v010-ship.md: "Gitea CI Docker jobs run on the host label" → the decisiondecisions/by-date/2026-06-29-gitea-ci-docker-jobs-run-on-the-host-lab.md("lab", not "label").projects/active/mpm-brand-voice.md: "Message Point Media (MPM)" ×3 → the company noteresources/companies/mpm.md(or whatever is canonical for MPM).
4. Surfaced in 1.5.x testing
(add items here as the new plugin gets real use)
- Lint blind spot: retired dirs masked by the leaf-README route (found
2026-07-03; fixed 1.6.0 — retired patterns now checked before routes, with
the
archive/notes/README.mdregression test).archive/and_agent/outputs/are retired/unrouted pre-0.6 leftovers that survived in the live vault holding only their seed READMEs — and the permissiveleaf-readmeroute (^(.+/)?README\.md$) matches first, sovault_lintnever flagged them. Fix: in the path-membership check, test the directory against retired/unknown patterns even when the only file in it is a README (e.g. evaluatedirname(path) + "/"against retired patterns before lettingleaf-readmeabsolve the file), or drop the seed-README exemption inside retired trees. Add a lint test seedingarchive/notes/README.md→ must flagretired-path. Related learning (same cleanup, 2026-07-03): the REST API cannot delete directories — removing a folder's last file orphans the empty folder on disk (the REST listing 404s, falsely reading as gone; Obsidian still shows it — manual deletion required). Documented inreferences/api-reference.md› Deleting Files and in the vault'sresources/references/obsidian-local-rest-api.md. Any future "remove retired tree" guidance must include the manual folder-cleanup step.