You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have searched existing issues and this is not a duplicate
I understand this issue needs status:approved before a PR can be opened
Problem Description
There is no reliable way to answer the question "did gentle-ai sync run after the last binary upgrade?" — the instrument does not record its own state.
What a user (or an AI agent following orchestrator instructions that say "confirm sync ran after the upgrade, otherwise stop") has available today:
~/.gentle-ai/state.json — stores installed_agents, claude_phase_assignments, last_update_check… but not the version of the last sync.
mtimes of synced assets (~/.claude/skills/...) — a false-negative trap. Sync is idempotent: it only rewrites files whose content differs. An indicator that only moves when there is a change cannot distinguish "sync never ran" from "sync ran and there was nothing to do". We hit exactly this: skills with pre-upgrade mtimes led to the wrong conclusion that sync was pending, when it had in fact run twice.
gentle-ai sync --dry-run (2.1.4) — prints only step counts (Prepare steps: 1 / Apply steps: 9) without listing pending files or stating "0 changes / up to date", so it cannot settle the question either.
~/.gentle-ai/backups/<timestamp>/ — the only unconditional footprint (snapshot is created before writing), but correlating backup timestamps against the binary's install time is forensics, not a check.
This is the same family as #1261: the tool does not register its own state, so verifying it requires reconstructing evidence from side effects. It is also the verifiability counterpart of #227 (auto-sync after self-update): even if sync becomes automatic, orchestrators still need a one-line way to prove configs match the running binary.
Proposed Solution
Write last_synced_version (and ideally last_synced_at) into ~/.gentle-ai/state.json at the end of every successful sync. The check then becomes one line: compare against gentle-ai --version.
Make sync --dry-run decisive: list the files it would touch, or print an explicit "up to date — 0 changes" when there is nothing to do, instead of only step counts.
Affected Area
Scripts (setup, installation)
Alternatives Considered
Checking mtimes of synced assets — false negatives due to idempotency (described above).
Correlating ~/.gentle-ai/backups/ snapshot timestamps with the binary install time — works, but it is forensic reconstruction, not a check, and requires knowing that sync always snapshots.
Observed on gentle-ai 2.1.4, macOS, Homebrew install, Claude Code agent.
Related: #227 (auto-sync after self-update), #1261 (instrument not recording its own state).
Pre-flight Checks
Problem Description
There is no reliable way to answer the question "did
gentle-ai syncrun after the last binary upgrade?" — the instrument does not record its own state.What a user (or an AI agent following orchestrator instructions that say "confirm sync ran after the upgrade, otherwise stop") has available today:
~/.gentle-ai/state.json— storesinstalled_agents,claude_phase_assignments,last_update_check… but not the version of the last sync.~/.claude/skills/...) — a false-negative trap. Sync is idempotent: it only rewrites files whose content differs. An indicator that only moves when there is a change cannot distinguish "sync never ran" from "sync ran and there was nothing to do". We hit exactly this: skills with pre-upgrade mtimes led to the wrong conclusion that sync was pending, when it had in fact run twice.gentle-ai sync --dry-run(2.1.4) — prints only step counts (Prepare steps: 1 / Apply steps: 9) without listing pending files or stating "0 changes / up to date", so it cannot settle the question either.~/.gentle-ai/backups/<timestamp>/— the only unconditional footprint (snapshot is created before writing), but correlating backup timestamps against the binary's install time is forensics, not a check.This is the same family as #1261: the tool does not register its own state, so verifying it requires reconstructing evidence from side effects. It is also the verifiability counterpart of #227 (auto-sync after self-update): even if sync becomes automatic, orchestrators still need a one-line way to prove configs match the running binary.
Proposed Solution
last_synced_version(and ideallylast_synced_at) into~/.gentle-ai/state.jsonat the end of every successfulsync. The check then becomes one line: compare againstgentle-ai --version.sync --dry-rundecisive: list the files it would touch, or print an explicit "up to date — 0 changes" when there is nothing to do, instead of only step counts.Affected Area
Scripts (setup, installation)
Alternatives Considered
~/.gentle-ai/backups/snapshot timestamps with the binary install time — works, but it is forensic reconstruction, not a check, and requires knowing that sync always snapshots.Additional Context
Observed on gentle-ai 2.1.4, macOS, Homebrew install, Claude Code agent.
Related: #227 (auto-sync after self-update), #1261 (instrument not recording its own state).