Files
echo/TODO-1.6.md
T
Jason Stedwell ab1e514f78 TODO-1.6: install verification passed on desktop + CoWork — commands/ deletion unblocked for 2.0
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>
2026-07-28 22:08:07 -05:00

80 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.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:**
- [x] `allowed-tools` per skill — **done 1.6.0** (all eight skills pre-authorize
the resolved `python3`/`python`/`py -3` invocations + the CoWork `ls` probe).
- [x] `disable-model-invocation: true` on the write-heavy entry points
(`/echo-sweep`, `/echo-triage`) — **done 1.6.0**; read-side stays
model-invocable.
- [x] 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.
- [x] `argument-hint` carries over as-is; `$ARGUMENTS` substitution unchanged —
**done 1.6.0** (save/recall/reflect).
- [x] 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-tools` present on
load/health/recall; (3) `disable-model-invocation` confirmed on exactly
sweep+triage; (4) CoWork `$ECHO` fallback resolves via
`/sessions/*/mnt/.remote-plugins/*` and executes. **2.0's `commands/` deletion
is unblocked.** *Known caveat, accepted (CLI is not a normal operating surface
here): the `allowed-tools` globs 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)
- [x] Add `homepage` / repository URL — **done 1.6.0**: both `homepage` and
`repository` set to `https://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 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)*
- [x] **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.