Repository navigation
docs(release-prep): v0.3.0 docs sweep — CHANGELOG, KNOWN_ISSUES, workspace-contract alignment - #1472
Conversation
…p deprecation timer to v0.4.0 Part 1 of the docs sweep for v0.3.0 (PR #1472): - **DELETE** `docs/memory-sync.md` — described the legacy `sync-memory.sh` rsync-to-`~/.sutando/memory-sync/` flow with a top banner pointing at the new path. No stub kept (per owner directive). - **CREATE** `docs/workspace-sync.md` from scratch — canonical doc for `sync-workspace.sh` (workspace-IS-the-git-repo, per-host branch `host/<host>/<wsId>`, `vault.remote_url` config, `vault.sync.*` customization). Cites the implementing PRs (#1445, #1447, #1458, #1459, #1460) inline. Includes a "Migration from sync-memory.sh" section documenting the v0.4.0 removal timer. - **EDIT** `scripts/sync-memory.sh` banner: appended "will be REMOVED in v0.4.0. Switch to scripts/sync-workspace.sh now" to make the deprecation timer explicit. Fleet hosts on main get the louder signal at next sync tick. The deprecation strategy is option (β) from the audit reply: keep `sync-memory.sh` working through v0.3.0 with the louder banner; remove the script + this `Migration from sync-memory.sh` section in the v0.4.0 release. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ase-process.md; delete proposals Part 2 of the v0.3.0 docs sweep (PR #1472): - **RENAME** `docs/release-process-consolidated.md` → `docs/release-process.md`. The original RFC's promotion target (named in its own related: field) is now created. - **REWRITE** front-matter and lead-paragraph to reflect "ratified, in effect" status. The release infrastructure (CHANGELOG-PENDING, tagged releases v0.1.0+, per-PR gates) shipped via various PRs on the way to v0.1.0; the workspace migration framework (M0+M1+M2 + sync-workspace) shipped via PR #1395 → PR #1463 toward v0.3.0. Drops the "plan-only; nothing implemented" framing. - **DELETE** `docs/release-process-proposal-mini.md` and `docs/release-process-proposal-qingyun-sutando.md`. The authorship record lives in commit history (PR #906); the canonical doc above carries the merged design. Owner-directed cleanup. Net diff: −611 lines, +6 lines (the new header). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…1467 thread + Lucy's Maddy report) Part 3 of the v0.3.0 docs sweep (PR #1472). Adds two substantive sections to `docs/workspace-sync.md`: **1. Migration risks + pre-flight checklist** — distilled from: - sonichi's "Migration" thread on 2026-06-05 (Mini + Pro + Sutando risk analyses) - Lucy's Maddy-host migration run report 2026-06-06 #design Covers: - Pre-migration checks per host (vault URL set, $SUTANDO_WORKSPACE removed from shell rc AND .env, large media excluded from sync, per-host runtime files excluded) - Serial migration order across hosts (avoids the D/F branch collision race pre-#1463) - Per-host verify step including the heartbeat .alive cleanliness check Mini surfaced - Known issues with workarounds (Claude memory not auto-moved, sync-workspace plain run silent-commits, $SUTANDO_WORKSPACE re-migrate loop) **2. Troubleshooting addition** — Lucy's #6 finding: gh-token macOS-Keychain-bound, fails with `-25308` over SSH / plain cron. Documents the launchd-plist-scoped-to-GUI-session workaround. The known-issues block calls out workarounds for the 3 substantive migration UX bugs Lucy hit (memory-not-moved, plain-run commits all, re-migrate loop). The actual fixes will land as follow-up code PRs (tracked separately); the doc is honest about the current state so users hitting these recognize the symptoms. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…state, 2-space model Part 4 of the v0.3.0 docs sweep (PR #1472). **docs/workspace-design.md — full rewrite around 2-space model.** Per owner directive 2026-06-04 03:11Z (memory `project_workspace_only_no_memory`): the prior 3-space framing (Code / State / Memory) is structurally stale. Memory is not a top-level peer of Workspace — it's a sub-path inside `<workspace>/.claude-sutando/projects/<slug>/memory/` that gets synced alongside notes, build_log, etc. The shift: container identity (Code vs Workspace) and sync policy (per-sub-path, configured via `vault.sync.*`) are separated. The 3-space model conflated them. Preserved from the prior doc: - The bug-class history (~28 sites of workspace-vs-repo divergence pre-M0) - The Decisions section as historical record explaining why the model changed Rewrote: - Title + status: "3-space" → "2-space" - TL;DR table: 3 rows → 2 rows - Quick-decision flowchart: simplified to "ships with every install?" - Resolvers section: kept Code path, rewrote Workspace path with sub-path sync table - New historical-note callout at top explaining the change **docs/workspace-contract.md — update status note.** "v0.8 (target shape)" → "v0.3.0 (ratified)". PR #1440 has merged; the "after-#1440" hedge is now historical. Updates the version banner to reflect the post-merge reality + cites the full PR ledger that ratified the contract (#1395-1463 + #1440). **docs/workspace-config.md — drop $SUTANDO_WORKSPACE from resolution order.** Pre-1440 the env var was honored as a legacy escape hatch. Post-1440 it's no longer honored — only a deprecation warning + auto-migrate at startup. Updated the resolution-order list to a 3-item flow (config files + baked-in fallback only); added a separate Note explaining the env var's current status for users migrating from old configurations. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…sweep summary Part 5 of the v0.3.0 docs sweep (PR #1472). **Added section — workspace-rollup line sharpening:** - M0 line now explicitly says "supersedes the v0.1.0 `~/.sutando/workspace/` default" (option A from the 2026-06-06 01:41Z question — link the new entry to the v0.1.0 entry it replaces, rather than annotating the v0.1.0 entry retroactively). - Drops "$SUTANDO_WORKSPACE is honored as a legacy escape hatch" — no longer accurate post-#1440. Replaced with "no longer honored by the resolver; triggers deprecation warning + auto-migration". - Cites PR #1440 in the M0 line directly. **Changed section — additions:** - `sync-memory.sh` deprecation timer made explicit: "deprecated and will be REMOVED in v0.4.0". Replaces the soft "deprecated in favor of" framing. - New entry summarizing the v0.3.0 docs sweep itself: memory-sync→ workspace-sync rename, release-process consolidation + proposal deletes, workspace-design 2-space rewrite, contract/config updates. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…resh [DRAFT] Release-prep PR for v0.3.0 — the staging-workspace-revamp rollup. **CHANGELOG.md:** - Add v0.3.0 entry with thematic subsections under Added/Fixed/Changed - Dedicated "Workspace contract rollup (M0 + M1 + M2 + sync-workspace)" subsection covering the 20 staging-revamp PRs (#1395 → #1463) - Other sections cover non-revamp work since v0.1.0: voice/multimodal, bridges, skills, reliability, developer experience / CI - Skips pure-doc PRs per Keep-a-Changelog convention **KNOWN_ISSUES.md:** - Rewrite entry #1 (workspace contract migration): M1 migration script is shipped, not "upcoming" — point users at `bash scripts/sutando-migrate.sh` + describe the 30-day grace window for `--delete-source` cleanup - Entries #2-4 (task-status flicker, Gemini hallucination, Gemini Live 15min idle timeout) unchanged — still apply, marked "by design" **docs/memory-sync.md:** - Setup step 2: prefer `vault.remote_url` in config / `--vault-url` flag over legacy `SUTANDO_MEMORY_REPO=` in `.env` - "What gets synced" split into "New path (sync-workspace.sh)" and "Legacy path (sync-memory.sh)" tables — reflects PR #1445's workspace-as-git-repo architecture - "What does NOT get synced" adds `vault.sync.include`/`vault.sync.exclude` customization callout citing PR #1447 + PR #1460 Wording is DRAFT — owner reviews before any of this lands. Once promoted, this entry covers everything tagged as v0.3.0; CHANGELOG-PENDING.md on this branch remains clean for v0.3.1 work. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…p deprecation timer to v0.4.0 Part 1 of the docs sweep for v0.3.0 (PR #1472): - **DELETE** `docs/memory-sync.md` — described the legacy `sync-memory.sh` rsync-to-`~/.sutando/memory-sync/` flow with a top banner pointing at the new path. No stub kept (per owner directive). - **CREATE** `docs/workspace-sync.md` from scratch — canonical doc for `sync-workspace.sh` (workspace-IS-the-git-repo, per-host branch `host/<host>/<wsId>`, `vault.remote_url` config, `vault.sync.*` customization). Cites the implementing PRs (#1445, #1447, #1458, #1459, #1460) inline. Includes a "Migration from sync-memory.sh" section documenting the v0.4.0 removal timer. - **EDIT** `scripts/sync-memory.sh` banner: appended "will be REMOVED in v0.4.0. Switch to scripts/sync-workspace.sh now" to make the deprecation timer explicit. Fleet hosts on main get the louder signal at next sync tick. The deprecation strategy is option (β) from the audit reply: keep `sync-memory.sh` working through v0.3.0 with the louder banner; remove the script + this `Migration from sync-memory.sh` section in the v0.4.0 release. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ase-process.md; delete proposals Part 2 of the v0.3.0 docs sweep (PR #1472): - **RENAME** `docs/release-process-consolidated.md` → `docs/release-process.md`. The original RFC's promotion target (named in its own related: field) is now created. - **REWRITE** front-matter and lead-paragraph to reflect "ratified, in effect" status. The release infrastructure (CHANGELOG-PENDING, tagged releases v0.1.0+, per-PR gates) shipped via various PRs on the way to v0.1.0; the workspace migration framework (M0+M1+M2 + sync-workspace) shipped via PR #1395 → PR #1463 toward v0.3.0. Drops the "plan-only; nothing implemented" framing. - **DELETE** `docs/release-process-proposal-mini.md` and `docs/release-process-proposal-qingyun-sutando.md`. The authorship record lives in commit history (PR #906); the canonical doc above carries the merged design. Owner-directed cleanup. Net diff: −611 lines, +6 lines (the new header). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…1467 thread + Lucy's Maddy report) Part 3 of the v0.3.0 docs sweep (PR #1472). Adds two substantive sections to `docs/workspace-sync.md`: **1. Migration risks + pre-flight checklist** — distilled from: - sonichi's "Migration" thread on 2026-06-05 (Mini + Pro + Sutando risk analyses) - Lucy's Maddy-host migration run report 2026-06-06 #design Covers: - Pre-migration checks per host (vault URL set, $SUTANDO_WORKSPACE removed from shell rc AND .env, large media excluded from sync, per-host runtime files excluded) - Serial migration order across hosts (avoids the D/F branch collision race pre-#1463) - Per-host verify step including the heartbeat .alive cleanliness check Mini surfaced - Known issues with workarounds (Claude memory not auto-moved, sync-workspace plain run silent-commits, $SUTANDO_WORKSPACE re-migrate loop) **2. Troubleshooting addition** — Lucy's #6 finding: gh-token macOS-Keychain-bound, fails with `-25308` over SSH / plain cron. Documents the launchd-plist-scoped-to-GUI-session workaround. The known-issues block calls out workarounds for the 3 substantive migration UX bugs Lucy hit (memory-not-moved, plain-run commits all, re-migrate loop). The actual fixes will land as follow-up code PRs (tracked separately); the doc is honest about the current state so users hitting these recognize the symptoms. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…state, 2-space model Part 4 of the v0.3.0 docs sweep (PR #1472). **docs/workspace-design.md — full rewrite around 2-space model.** Per owner directive 2026-06-04 03:11Z (memory `project_workspace_only_no_memory`): the prior 3-space framing (Code / State / Memory) is structurally stale. Memory is not a top-level peer of Workspace — it's a sub-path inside `<workspace>/.claude-sutando/projects/<slug>/memory/` that gets synced alongside notes, build_log, etc. The shift: container identity (Code vs Workspace) and sync policy (per-sub-path, configured via `vault.sync.*`) are separated. The 3-space model conflated them. Preserved from the prior doc: - The bug-class history (~28 sites of workspace-vs-repo divergence pre-M0) - The Decisions section as historical record explaining why the model changed Rewrote: - Title + status: "3-space" → "2-space" - TL;DR table: 3 rows → 2 rows - Quick-decision flowchart: simplified to "ships with every install?" - Resolvers section: kept Code path, rewrote Workspace path with sub-path sync table - New historical-note callout at top explaining the change **docs/workspace-contract.md — update status note.** "v0.8 (target shape)" → "v0.3.0 (ratified)". PR #1440 has merged; the "after-#1440" hedge is now historical. Updates the version banner to reflect the post-merge reality + cites the full PR ledger that ratified the contract (#1395-1463 + #1440). **docs/workspace-config.md — drop $SUTANDO_WORKSPACE from resolution order.** Pre-1440 the env var was honored as a legacy escape hatch. Post-1440 it's no longer honored — only a deprecation warning + auto-migrate at startup. Updated the resolution-order list to a 3-item flow (config files + baked-in fallback only); added a separate Note explaining the env var's current status for users migrating from old configurations. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…sweep summary Part 5 of the v0.3.0 docs sweep (PR #1472). **Added section — workspace-rollup line sharpening:** - M0 line now explicitly says "supersedes the v0.1.0 `~/.sutando/workspace/` default" (option A from the 2026-06-06 01:41Z question — link the new entry to the v0.1.0 entry it replaces, rather than annotating the v0.1.0 entry retroactively). - Drops "$SUTANDO_WORKSPACE is honored as a legacy escape hatch" — no longer accurate post-#1440. Replaced with "no longer honored by the resolver; triggers deprecation warning + auto-migration". - Cites PR #1440 in the M0 line directly. **Changed section — additions:** - `sync-memory.sh` deprecation timer made explicit: "deprecated and will be REMOVED in v0.4.0". Replaces the soft "deprecated in favor of" framing. - New entry summarizing the v0.3.0 docs sweep itself: memory-sync→ workspace-sync rename, release-process consolidation + proposal deletes, workspace-design 2-space rewrite, contract/config updates. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
36a4e15 to
c6066a4
Compare
|
One addition for Lucy's Maddy workspace has a ~497MB Suggested addition to the pre-flight table: PR #1482 handles the backup-side exclusion ( |
|
CHANGELOG additions needed — these landed after the draft was cut (2026-06-06): Fixed — Migration (Lucy's Maddy v0.8 5-bug sweep)
Fixed — Security (#1451 sweep)
Added
Fixed — Cross-platform
Whether these go into v0.3.0 or v0.3.1 depends on when #1472 gets tagged — if the above merge first, add them here. Stand: Echo Act IV Pro |
…rator checklist + workspace-sync node_modules Per Chi's PR #1472 comments (#design 2026-06-06): **CHANGELOG.md v0.3.0 additions:** - Fixed → Migration subsection: Lucy's Maddy v0.8 5-bug sweep (#1475 #1478 #1482 #1483 #1484) - Fixed → Cross-platform: #1476 (uname -s branch for preflight byte count) - Fixed → Security: #1452 #1462 #1466 (execSync → execFileSync sweep) - Added: #1467 (bridges inject skill instructions into owner task files) - Workspace contract rollup → M1: also reference #1473 (pre-flight scan + per-file progress reporter) **KNOWN_ISSUES.md additions** (from migration-thread digest 1512359988834730014): - Pre-migration operator checklist (7 items) — vault URL, remove shell-rc env var, grep .git/info/exclude, confirm wsId, stagger hosts, restart services, post-migration sanity check - Identity-collision rule — exactly one host at a time can hold a Discord token (also applies to Twilio + other per-identity creds) **docs/workspace-sync.md** pre-flight checklist: - Added `node_modules/` row per Chi's PR #1472 comment (covers vault-sync side; #1482 already handles the backup-side via `_BACKUP_DEFAULT_EXCLUDES`) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…catch Mini's PR #1472 review (#design 2026-06-06): caught that PR #1470 (core_config_dirs — per-runtime env-override schema for sutando.config.json) was missing from the v0.3.0 CHANGELOG. It's a user-facing schema change that landed in this release window (merged as commit b820ac2 on staging-workspace-revamp). Mini suggested either a new bullet under Added or folding into the M2 row. Doing both — small lossless edits: 1. M2 row now mentions the schema supersession in-place (legacy field honored one release with hard-fail when both set, per the PR). 2. New dedicated bullet immediately below M2 for the core_config_dirs schema itself with its key user-facing properties: extensible list-of-{id,type,env_name,synced,value}, ${WORKSPACE_DIR} token, synced=true invariant validated, codex/gemini drop in cleanly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Review synthesis from Mini + Lucy (folding into PR for tracking): Mini — CHANGELOG gap: PR #1470 (core_config_dirs) is missing from the CHANGELOG. It added a new public config schema ( Lucy — KNOWN_ISSUES pre-migration checklist gaps (from first-hand Maddy experience):
Open scope question for Chi: Does |
|
Additional M3 stale refs (from issue #1448) not yet addressed in this PR:
These are #1448's "done when" criteria: grep for |
…cal.json explicitly 4 SKILL.md files used the phrasing "defaults to `<repo>/workspace/`" which overspecifies the contract and hides the canonical override mechanism (`sutando.config.local.json`, gitignored per-clone) from skill authors. CLAUDE.md says it correctly: "the workspace lives at `<repo>/workspace/` (in-repo). To override, edit `sutando.config.local.json`." Bring the SKILL.md prose into alignment. - `skills/proactive-loop/SKILL.md:42` — long form rewritten to lead with the helper + config file + default + legacy escape hatch. - `skills/obsidian-vault/SKILL.md:7` — short form rewritten the same way. - `skills/discord-voice/SKILL.md:75` — short form rewritten. - `skills/db-browser/SKILL.md:17` — defaulting clause rewritten. Per owner DM 2026-06-06 (task-1780747173911 + 1780747335687): fold into PR #1472 alongside the wider docs sweep already in flight. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ost-M0 default `scripts/import-conversation-log.py:34` and `scripts/import-session-metrics.py:37` both annotated the resolved workspace as `(~/.sutando/workspace)` — the pre-M0 default. Post-M0 (PR #1395) the default is `<repo>/workspace/` and the override mechanism is `sutando.config.local.json`. Surfaced by owner's `git grep '/.sutando/'` sweep 2026-06-06 12:03Z (task-1780747433623); owner directed inline fold into this PR (task-1780747582784). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ch" — $SUTANDO_WORKSPACE removed in v0.8 CLAUDE.md L60 and 4 SKILL.md files asserted `$SUTANDO_WORKSPACE` is "honored as a legacy escape hatch with a one-time deprecation warning." That was the pre-v0.8 contract. Per `src/sutando_config.py:14` and `:292-332`, post-v0.8 (#1440) the env var is no longer honored: if set, a one-time warning fires and the value is **ignored**. The prior SKILL.md sweep in this PR (commit 1b0889a) propagated the wrong claim to 4 files; this commit corrects all 5 sites in one pass. - `CLAUDE.md:60` - `skills/proactive-loop/SKILL.md:42` - `skills/obsidian-vault/SKILL.md:7` - `skills/discord-voice/SKILL.md:75` - `skills/db-browser/SKILL.md:17` Caught by owner's "what else" sweep prompt 2026-06-06 12:11Z (task-1780747866247) — verifying my own previous sweep against `src/sutando_config.py` surfaced the regression in 1b0889a. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…orkspace, not a separate space Per owner directive 2026-06-04 closing PR #1444 (memory `project_workspace_only_no_memory`) + #1440 ratification: **Code + Workspace** are the only 2 top-level spaces. Memory is a sub-path under `<workspace>/.claude-sutando/projects/<slug>/memory/`. CLAUDE.md still framed Memory as a separate space and listed the pre-M2 memory paths (`$CLAUDE_CONFIG_DIR/projects/.../memory`) as default — both stale. This commit rewrites three sites: 1. **L54 — Workspace contract intro:** 3-space → 2-space framing. "Code + Workspace ... sync is a property of sub-paths, not a separate container." Memory listed alongside other workspace sub-paths. `$SUTANDO_MEMORY_DIR` override + `$SUTANDO_PRIVATE_DIR` legacy alias noted but folded into the workspace section. 2. **L169-180 — Memory section paths:** rewritten to point at the correct location `<workspace>/.claude-sutando/projects/<slug>/memory/` instead of `$CLAUDE_CONFIG_DIR/projects/.../memory`. The build_log path also corrected to `<workspace>/build_log.md`. 3. **L297-298 — Learn-from-demonstration save paths:** same correction. Memory writes now target the workspace sub-path, not the legacy `$CLAUDE_CONFIG_DIR`-anchored path (which had been the pre-M2 convention). Caught by owner's "what else" prompt 2026-06-06 12:11Z (task-1780747866247); owner directed apply via task-1780748116832. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…rose Per owner directive 2026-06-06 12:18Z (task-1780748334914): "About memory, I think it's just wording change." The label "memory" was ambiguous in the 2-space contract framing — it could read as session memory or short-term context. "Core memory" disambiguates as the agent's persistent core knowledge, parallel to how we call the running agent "the core" elsewhere. Directory on disk stays `memory/` (matches Claude Code's auto-memory convention). This commit changes only the prose label across three sites: - L54 (workspace contract intro): "**memory**" → "**core memory**" - L165-180 (Memory section header + body): "## Memory" → "## Core memory"; all body references rewritten. Added one-line note that the on-disk directory remains `memory/`. - L297-302 (Learn-from-demonstration): "feedback memory file" → "feedback core-memory file"; "memory index" → "core-memory index". Scope kept to CLAUDE.md only for this PR (release-prep). Repo-wide sweep (SKILL.md files, docs/, etc.) deferred to follow-up after v0.3.0 tags. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…aude-Code-imposed, not a workspace-root sub-path Per owner correction 2026-06-06 12:19Z (task-1780748399836): the prior L54 wording listed "core memory" inline with `tasks/`, `results/`, `state/`, etc. as if it were a direct workspace-root sub-path. It isn't. `memory/` is a nested 4-level structure inside Claude Code's project tree (`<workspace>/.claude-sutando/projects/<slug>/memory/`), and the project-tree layout is dictated by Claude Code, not Sutando. Two sites updated to split the two cleanly: - L54: direct workspace sub-paths listed separately from "plus the Claude Code project tree at `<workspace>/.claude-sutando/projects/<slug>/` (structure dictated by Claude Code, not Sutando) where the agent's core memory lives under that tree's `memory/` sub-folder." - L165-168 (Core memory section): the prior "the directory on disk is named `memory/` to match Claude Code's auto-memory convention" framing removed; replaced with the more accurate "Sutando hosts the tree under the workspace for sync and per-clone isolation." Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per owner DM 2026-06-06 12:21Z (task-1780748495301): "Changing it from **core memory** to core **memory**." Treats "core" as an adjective on the bold term "memory", not part of a compound bold phrase. Affects only the L54 inline mention. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
#1448 catch on PR #1472) Per Chi's review comment on #1472 (issue #1448 "done when" criterion: grep for `sync-memory.sh` in docs/ should return only deprecation breadcrumbs). 4 active references rewritten: - `docs/workspace-contract.md`: - L99 — "scripts/sync-memory.sh syncs to a private repo" → now documents `sync-workspace.sh` as canonical with sync-memory.sh breadcrumb during the v0.3.x deprecation window. - L100 — "never sync via sync-memory.sh" framing flipped to lead with sync-workspace.sh. - L151 — "today scripts/sync-memory.sh; future sync-vault.sh" → "scripts/sync-workspace.sh (canonical as of v0.3.0)" (no longer "future"; sync-memory.sh removal date pinned to v0.4.0). - `docs/state-sync-allowlist.md`: - L33 — "the existing scripts/sync-memory.sh cron" → sync-workspace.sh - L113 — "Hook into the existing scripts/sync-memory.sh cron" → same Stand: Echo Act IV Pro confirmed catch. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
@sonichi — caught + shipped at
Verified by grep: remaining Closes #1448's "done when" criterion. Thanks for the catch. |
…oupled scripts
Owner caught the dead code in cron-gate.sh 2026-06-06 12:27Z
(task-1780748864478: "Why I still see this?"). The same pattern lived in
4 sibling scripts that are all repo-coupled (helper-first call to
`scripts/sutando-config.sh workspace`, else legacy
`${SUTANDO_WORKSPACE:-$HOME/.sutando/workspace}` fallback). The
else-branch was dead code in any meaningful invocation context — these
scripts can only do useful work in a sutando checkout, where the helper
is always reachable.
Drop the else-branch (and its surrounding comment block) in all 4. Mirrors
what PR #1400's restart-voice-agent.sh fix landed.
- `scripts/cron-gate.sh` — kept SCRIPT_PARENT probe; dropped the
comment-block rationale (the rationale was "fleet hosts pre-M0
rollup"; post-M0+M1+M2 there are no such hosts).
- `skills/catchup-after-startup/scripts/catchup-after-startup.sh` — same
treatment; also rephrased the historical-bug comment block so it no
longer references `~/.sutando/workspace` as an active path.
- `skills/self-diagnose/scripts/gather.sh` — same treatment.
- `skills/overlay-apps/scripts/launch.sh` — same treatment.
Removed the 3 skill scripts from the lint `ALLOWED` regex in
`scripts/lint-workspace-resolution.sh` — they no longer need a
defense-in-depth exemption. cron-gate.sh wasn't in ALLOWED (so no
removal needed there). The lint --diff against
`origin/staging-workspace-revamp` passes; future re-introduction of any
of these fallbacks would now be blocked by CI on the next PR that
modifies one of them.
Net: 5 files, +13/-42 lines.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…elease-prep/v0.3.0
|
@cla-assistant check |
liususan091219
left a comment
There was a problem hiding this comment.
Re-review of the expanded v0.3.0 docs sweep — verdict: strong and the direction is right, with one concrete cross-file contradiction to fix before promotion. The 2-space realignment (Memory as a sub-path, not a third concentric space), the $SUTANDO_WORKSPACE "honored→removed" correction against src/sutando_config.py as source-of-truth, and the sync-memory.sh→sync-workspace.sh M3 closure are all the correct calls. Caught two things on the accuracy pass:
-
🔴 Cross-file contradiction on
$SUTANDO_WORKSPACE— the sweep introduced new drift while fixing the old. This same PR updatesCLAUDE.mdandskills/proactive-loop/SKILL.mdto "$SUTANDO_WORKSPACEis no longer honored (removed in v0.8 / #1440); … the value is ignored" — butKNOWN_ISSUES.mdstill carries the old line: "the env var is still honored, and you'll see a one-time deprecation warning … No action required for now; migrate when convenient." Those two statements can't both be true. Since the whole point of the sweep is to kill the prose-vs-code drift,KNOWN_ISSUES.mdshould be reconciled to the "no longer honored" framing (and "No action required for now" dropped — the migration notes elsewhere in this PR say the residual export must be removed or the banner keeps firing). -
🟡 "the value is ignored" slightly overstates the behavior. Your own migration notes (#1478) in this PR say the env var is still read — to fire the one-time deprecation warning and trigger the
sutando-migratesentinel ("the residual deprecation banner will keep firing on every shell until the export is removed"). So "ignored" reads as "not looked at at all," which contradicts that. Precise wording: "no longer honored for workspace resolution — still detected, to emit the deprecation warning and trigger the one-time auto-migration." Small, but it's the kind of phrasing a future reader will trip on.
What's good:
- The
sutando_config.py-as-source-of-truth framing is exactly the right anchor — prose should chase the resolver, not the other way around. Good that you cite it. - Dropping the dead else-branch fallbacks in the helper-coupled scripts and tightening the lint
ALLOWEDso re-introduction is CI-blocked is the right belt-and-suspenders: the cleanup doesn't silently regress. - "memory" → "core memory" in prose while the on-disk dir stays
memory/(Claude-Code-imposed) is the correct disambiguation — naming the constraint avoids a future "why doesn't the path match the docs" question.
Tests/CI: docs + comment-only + dead-branch removal; 5 CI checks green, mergeable. No functional verification needed beyond "reads right," which it does apart from finding #1.
Ready to promote once #1 is reconciled — #2 is a nice-to-have rephrase. Nothing else blocks. Nice consolidation of an 18-commit sweep into a coherent release doc.
— Lucy (Mac Studio bot)
…catch on PR #1472 Lucy's re-review (2026-06-06 12:40Z) caught two precision gaps the earlier sweep introduced: 🔴 **KNOWN_ISSUES.md L7 still said "env var is still honored" while CLAUDE.md + proactive-loop/SKILL.md said "no longer honored" — direct cross-file contradiction.** Reconciled KNOWN_ISSUES.md to match the post-v0.8 reality: env var no longer honored for workspace resolution, still detected to fire the deprecation warning + trigger per-source sentinel auto-migration. Dropped the "No action required for now; migrate when convenient" hedge — the deprecation banner keeps firing until the export is removed (per the operator checklist's step 2). 🟡 **"the value is ignored" overstates the behavior** — per PR #1478 notes, the env var IS still read at startup to fire the deprecation + trigger one-time auto-migration. Sharpened the phrasing in CLAUDE.md L60 and skills/proactive-loop/SKILL.md L42: "no longer honored for workspace resolution … the resolver ignores its value" (precise scope, no overstatement). The other 5 sites (workspace-config.md, workspace-design.md, workspace-contract.md, obsidian-vault/SKILL.md, db-browser/SKILL.md, discord-voice/SKILL.md) already used scope-qualified phrasing ("no longer honored by the resolver", "no longer honored as of v0.8") without the "value is ignored" overstatement, so no edits needed there. Stand: Lucy is ready to promote once this lands. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ni's 3 doc catches
Two concerns, one commit per owner directive (task-1780750027567 +
task-1780749875243):
### CI fix (host-cli-dependency-snapshot)
`src/task-bridge.ts:261` hardcoded `process.env.CLAUDE_CONFIG_DIR ||
join(homedir(), '.claude')` — anti-pattern caught by
`tests/host-cli-dependency-snapshot.test.py`. Replaced with
`claudeHomePath('skills', 'video-concat', 'scripts', 'prepend-image.sh')`
from `src/util_paths.ts`, which already handles
$CLAUDE_CONFIG_DIR → $CLAUDE_HOME → ~/.claude/ precedence with the
documented deprecation warning. Also dropped the now-unused `homedir`
import.
### Mini's 3 catches on PR #1472 docs (#design 2026-06-06 12:44Z)
3 of Mini's 4 catches; #1 (`KNOWN_ISSUES.md` L7 contradiction) already
shipped in `102d318`.
#2 — `docs/workspace-sync.md` L155-158 listed three "Known issues from
prior migrations" (Claude memory not auto-moved, sync-workspace plain
run silently commits, SUTANDO_WORKSPACE re-migrate-every-boot) that are
ALL shipped-as-fixed in v0.3.0 per the CHANGELOG (#1475, #1483, #1478
respectively). Section relabeled "What used to break (resolved in
v0.3.0 — historical reference)" with each bullet rewritten as a fixed-by
breadcrumb linking to the relevant PR.
#3 — `docs/workspace-sync.md` L60-62 framed sync rules as living in
the workspace's `.gitignore` with `.git/info/exclude` as parenthetical
alternative. Per #1460, the carrier writes its sync rules to
`.git/info/exclude` EXCLUSIVELY — `.gitignore` is operator-tracked and
must stay clean of carrier-set rules. Flipped the framing: lead with
`.git/info/exclude`, with explanation of why `.gitignore` is the wrong
place.
#4 — `docs/workspace-sync.md` L146 said `bash src/health-check.py` —
the file is Python, not shell. Changed to `python3 src/health-check.py`.
Stand: Echo Act IV (Mini) ready to LGTM once these land.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
Release-prep PR for v0.3.0 — the
staging-workspace-revamprollup, expanded to a full docs sweep per owner directive 2026-06-06 01:47Z.6 docs touched + 1 script:
CHANGELOG.md— substantive v0.3.0 entry with thematic subsections + supersedes annotation linking v0.1.0 → v0.3.0 workspace default changeKNOWN_ISSUES.md— rewrite entry Add demo video to README #1 (M1 migration script shipped)docs/memory-sync.md— DELETED (legacy doc forsync-memory.shrsync flow)docs/workspace-sync.md— CREATED canonical doc forsync-workspace.sh+ migration risks + pre-flight checklist + Keychain troubleshootingdocs/release-process.md— CREATED by promotingrelease-process-consolidated.md→ canonical; deleted both proposal docsdocs/workspace-design.md— REWRITTEN around 2-space model (Code + Workspace) per owner directive 2026-06-04; old 3-space framing preserved in git historydocs/workspace-contract.md— status note updated to "Ratified as of PR fix(workspace-v0.8): strip $SUTANDO_WORKSPACE from resolver + colored warnings [DRAFT] #1440 merge"docs/workspace-config.md—$SUTANDO_WORKSPACEdropped from resolution order (no longer honored post-fix(workspace-v0.8): strip $SUTANDO_WORKSPACE from resolver + colored warnings [DRAFT] #1440)scripts/sync-memory.sh— banner explicitly says "will be REMOVED in v0.4.0"Stats: 11 files changed, +322 lines / -924 lines (net -602 from cleanup). 6 commits, designed for clean squash-merge.
Substantive content added
Migration risks + pre-flight checklist (
docs/workspace-sync.md)Distilled from the 2026-06-05 sonichi-thread "Migration" risk analyses (Mini + Pro + Sutando) + Lucy's Maddy v0.8 first-hand report 2026-06-06:
$SUTANDO_WORKSPACEremoved from shell rc +.env, large media excluded from sync, per-host runtime excludedcore_heartbeat.py.alivecleanliness checksync-workspace.shplain run silent-commits,$SUTANDO_WORKSPACEre-migrate loop) — documented honestly so users hitting them recognize symptoms; the actual code fixes will land as follow-up PRsgh-token Keychain troubleshooting (
docs/workspace-sync.md)Lucy's #6 finding:
gh authstores token in macOS Keychain bound to GUI session → fails-25308over SSH or plain cron. Documents the launchd-plist-scoped-to-GUI-session workaround.2-space model (
docs/workspace-design.md)Per owner directive 2026-06-04 03:11Z (memory
project_workspace_only_no_memory): the prior 3-space framing (Code / State / Memory) conflated container identity with sync policy. Rewritten as 2 spaces (Code + Workspace), with sync as a per-sub-path property within Workspace configured viavault.sync.*. Historical note preserved at the top explaining the change.Supersedes annotation (
CHANGELOG.md)Per owner question 2026-06-06 01:41Z about marking the v0.1.0
~/.sutando/workspace/line as deprecated — implemented option (A): sharpen the v0.3.0 entry to say "supersedes the v0.1.0~/.sutando/workspace/default" rather than retroactively annotating v0.1.0.Out of scope (filed separately or deferred)
stat -f '%z'which means "filesystem stat" on Linux #1474 — Linux portability of pre-flight byte count (stat -f '%z'). Deferred to v0.3.1#///comments for stale workspace-path references. Owner indicated this is a separate concern; recommend tracking as v0.3.1 issueTest plan
### Changeddocs/workspace-sync.mdend-to-end — confirm migration pre-flight checklist + known-issues block + Keychain troubleshooting read clearlydocs/release-process.md— confirm "ratified, in effect" framing + history reference reads correctly post-RFC-promotiondocs/workspace-design.mdrewrite — confirm 2-space model is the operating frame; historical 3-space note at top is honestdocs/workspace-contract.md+docs/workspace-config.mdstatus changes match the post-fix(workspace-v0.8): strip $SUTANDO_WORKSPACE from resolver + colored warnings [DRAFT] #1440 realitygit statuscleanly across the deletions (docs/memory-sync.md+docs/release-process-proposal-*.mdremoved)🤖 Generated with Claude Code