v1.26.1
Highlights
Patch fix for the sync regression introduced when v1.26.0 shipped a new persona block. Closes #437.
Before: brew upgrade gentle-ai && gentle-ai sync left users with the old persona block between <!-- gentle-ai:persona --> markers. The deprecated 2-row "Skills (Auto-load based on context)" table persisted, the v1.26 ## Contextual Skill Loading (MANDATORY) directive was missing, and the install-time fix never propagated.
After: sync regenerates the marker-bound block on every run and respects the persona the user actually installed (Gentleman or Neutral) — not always Gentleman.
What changed
- Sync now regenerates the persona block.
ComponentPersonais part of the default sync scope. Newpersona.InjectForSyncwrites the marker-bound markdown plus the Claude output-style overlay; it deliberately skips the OpenCode/Kilocodegentlemanagent overlay inopencode.jsonbecause that JSON merge conflicts with SDD'sgentle-orchestratoroverlay and breaks idempotency. Install (Inject) keeps doing the full pipeline. - Install/sync path contracts are now separate. New
syncComponentPaths/syncPersonaPathsso backup snapshotting and post-sync verification declare only the files sync actually writes. - Persona is persisted in
state.InstallState. Both the CLI install (run.go) and the TUI install (app.go) write the user-selected persona;RunSyncreads it. State files written before this feature still work — sync falls back to Gentleman whenstate.Personais empty.
What this means for you
brew upgrade gentle-ai
gentle-ai syncYour persona block between <!-- gentle-ai:persona --> markers is now regenerated to match the embedded asset for the current version. Content outside the markers (your own sections, custom rules) is preserved verbatim — InjectMarkdownSection only touches what's between the markers.
Tests added
TestRunSyncRegeneratesPersonaBlockBetweenMarkers— stale block + user content outside markers → user content preserved, stale removed, v1.26 directive injected.TestRunSyncReadsPersonaFromState— neutral persona round-trips throughstate.json.TestRunSyncFallsBackToGentlemanWhenStateLacksPersona— backward compat for state files written before persona persistence.TestSyncPersonaPathsExcludeOpenCodeAgentJson— sync paths must not declareopencode.json.TestBuildSyncSelectionDoesNotHardcodePersona—Personais zero-value at build time,RunSyncresolves it.TestPersonaRoundTrip+TestPersonaBackwardCompatin thestatepackage.
Deferred
Behavioral verification of the regenerated persona (live-agent transcript or Claude API automation) and linter hardening for license / metadata.author required fields remain documented as follow-ups from v1.26.0.