Files
echo/TODO-1.6.md
T
Jason Stedwell 55afdce70c 1.6.0 — skills-format migration, lint retired-path fix, plugin.json completeness
Skills migration: each of the eight slash commands gains a skills/<name>/SKILL.md
twin (same invocation name, byte-identical body). Per-skill allowed-tools
pre-authorize the resolved python3/python/py -3 invocations + the CoWork ls
fallback probe; disable-model-invocation: true makes /echo-sweep and /echo-triage
operator-only. Docs-confirmed: a same-name skill takes precedence over the legacy
command, so commands/ coexists until its scheduled 2.0 deletion. The $ECHO
path-resolution dedupe is resolved as not-supported (skill dirs are
self-contained; no cross-skill snippet sharing).

Lint fix: vault_lint.py checks retired patterns BEFORE routes, so a seed README
inside a retired tree (archive/...) flags retired-path instead of being absolved
by the permissive leaf-readme route. New end-to-end regression test seeds
archive/notes/README.md (fails pre-fix, passes now).

plugin.json: version 1.6.0, homepage + repository -> git.alwisp.com/jason/echo.

All suites green: 25/25 client unit tests (incl. routing-sync guard), feature,
reflect, offline-queue, PATCH-semantics. Artifact rebuilt (87 entries, both
formats); pointer refreshed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-28 21:58:57 -05:00

4.2 KiB
Raw Blame History

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.mdskills/echo-save/SKILL.md keeps the invocation name: /echo-save works identically. No deprecation date on commands/; this is future-proofing, not a fire.
  • Do it for the features, not the notice:
    • allowed-tools per skill — done 1.6.0 (all eight skills pre-authorize the resolved python3/python/py -3 invocations + the CoWork ls probe).
    • disable-model-invocation: true on the write-heavy entry points (/echo-sweep, /echo-triage) — done 1.6.0; read-side stays model-invocable.
    • De-duplicate the CoWork $ECHO path-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-hint carries over as-is; $ARGUMENTS substitution unchanged — done 1.6.0 (save/recall/reflect).
  • Verify a migrated build installs cleanly on desktop and in a CoWork session before deleting commands/ (deleting the legacy dir is a 2.0 item — see ROADMAP-2.0.md; in 1.6 both may coexist). (1.6.0 artifact built — operator install test pending.)

2. plugin.json completeness (from the old MAINTENANCE checklist)

  • Add homepage / repository URL — done 1.6.0: both homepage and repository set to https://git.alwisp.com/jason/echo.

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 decision decisions/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 note resources/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.md regression 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 permissive leaf-readme route (^(.+/)?README\.md$) matches first, so vault_lint never 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. evaluate dirname(path) + "/" against retired patterns before letting leaf-readme absolve the file), or drop the seed-README exemption inside retired trees. Add a lint test seeding archive/notes/README.md → must flag retired-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 in references/api-reference.md Deleting Files and in the vault's resources/references/obsidian-local-rest-api.md. Any future "remove retired tree" guidance must include the manual folder-cleanup step.