Skip to content

v1.26.1

Choose a tag to compare

@github-actions github-actions released this 05 May 10:06
· 299 commits to main since this release
f71ff03

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. ComponentPersona is part of the default sync scope. New persona.InjectForSync writes the marker-bound markdown plus the Claude output-style overlay; it deliberately skips the OpenCode/Kilocode gentleman agent overlay in opencode.json because that JSON merge conflicts with SDD's gentle-orchestrator overlay and breaks idempotency. Install (Inject) keeps doing the full pipeline.
  • Install/sync path contracts are now separate. New syncComponentPaths / syncPersonaPaths so 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; RunSync reads it. State files written before this feature still work — sync falls back to Gentleman when state.Persona is empty.

What this means for you

brew upgrade gentle-ai
gentle-ai sync

Your 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 through state.json.
  • TestRunSyncFallsBackToGentlemanWhenStateLacksPersona — backward compat for state files written before persona persistence.
  • TestSyncPersonaPathsExcludeOpenCodeAgentJson — sync paths must not declare opencode.json.
  • TestBuildSyncSelectionDoesNotHardcodePersonaPersona is zero-value at build time, RunSync resolves it.
  • TestPersonaRoundTrip + TestPersonaBackwardCompat in the state package.

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.