Skip to content

v0.8.0

Release Date: 2026-07-25

Overview

This release adds support for reading and updating a release's theme — the rich-text field Aha! displays as a release's description — and fixes a decoding bug where Feature, Epic, Goal, Product, Requirement, and StrategicModel descriptions failed to parse because the OpenAPI schema declared description as a plain string when the API actually returns a DescriptionObject.

Highlights

  • Release.Theme - GetRelease and ListProductReleases now populate Theme, the field the Aha! UI shows as a release's description
  • WithReleaseTheme - new functional option for UpdateRelease to set a release's theme
  • DescriptionObject decoding fix - Feature, Epic, Goal, Product, Requirement, and StrategicModel now correctly extract description text instead of failing to decode

Installation

go get github.com/grokify/aha-go@v0.8.0

What's New

Release.Theme

Aha! calls a release's descriptive rich-text field "theme" rather than "description" — it's the field shown as the release's description in the Aha! UI. Release.Theme decodes theme.body from the API, the same pattern used for Idea/Feature description:

release, err := client.GetRelease(ctx, "PROD-R-1")
fmt.Println(release.Theme)

Use WithReleaseTheme to update it:

release, err := client.UpdateRelease(ctx, "PROD-R-1",
    aha.WithReleaseTheme("Focus on performance and reliability improvements."),
)

Bug Fixes

Description decoding across entities

Feature.description (and the equivalent field on Epic, Goal, Product, Requirement, and StrategicModel) is a DescriptionObject in the real API, like Idea/Initiative already declared — but the OpenAPI schema had it typed as a plain string, so GetFeature and related calls failed to decode entirely as soon as the API returned a description. The schema now declares description as DescriptionObject for all affected entities, and featureFromAPI, epicFromAPI, goalFromAPI, productFromAPI, requirementFromAPI, and strategicModelFromAPI now read Description.Body accordingly.

Fixing that surfaced a second, related bug: several fields the API returns as null weren't marked nullable, so decoding still failed once description was fixed. Feature/Requirement assigned_to_user, Epic/Goal progress, and Requirement original_estimate/ remaining_estimate/work_done are now nullable, matching live API responses verified across dozens of features, epics, goals, and requirements.

fetchup dependency pin

fetchup is pinned to v0.2.4 for compatibility with go-rod v0.116.2; newer fetchup versions have breaking API changes that broke the build.

New SDK Methods

Method/Field Description
Release.Theme New field decoded from the API's theme.body, shown as the release's description in the Aha! UI
WithReleaseTheme UpdateReleaseOption to set a release's theme

Upgrade Notes

This is a backward-compatible release. No breaking changes from v0.7.0. Callers that read Feature/Epic/Goal/Product/Requirement/ StrategicModel descriptions will start seeing populated values where decoding previously failed silently or errored.

Commits

Hash Description
5cf6074 fix(deps): pin fetchup v0.2.4 for go-rod compatibility
450302d test: add regression coverage for description/nullable-field decoding
aacc9fb fix(decode): extract description body from DescriptionObject across entities
8c97ddb feat(api): regenerate client - fix description and nullable field schemas
0c08c1c feat(release): support reading and updating a release's theme
0d9c3f9 feat(api): regenerate client for release theme field
2ee114a chore(deps): Bump github.com/grokify/prism-roadmap from 0.14.1 to 0.16.0

Contributors