Skip to content

v0.5.0

Release Date: 2026-06-20

Overview

This release adds product CRUD operations (create, update, list with filters), ListFeatures GraphQL query, tree-structured product listing, and fixes for nullable date fields and Idea description handling.

Highlights

  • Product CRUD - Create, update, and list products with filtering options
  • ListFeatures GraphQL - Query features with release info, position, tags, and workspace
  • Tree View - Product list now shows hierarchical structure with product lines
  • Nullable Date Fix - Date fields now correctly handle null values from API

Installation

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

What's New

Product Create and Update

Create and manage products via SDK and CLI:

// Create a product
product, err := client.CreateProduct(ctx, "My Product", "PROD",
    aha.WithProductDescription("Product description"),
    aha.WithProductParentID("PORTFOLIO"),
)

// Create a product line
product, err := client.CreateProductLine(ctx, "My Portfolio", "PORT", "portfolio")

// Update a product
product, err := client.UpdateProduct(ctx, "PROD",
    aha.WithUpdateProductName("New Name"),
    aha.WithUpdateProductDescription("Updated description"),
)

CLI commands:

# Create a product
aha product create --name "My Product" --prefix PROD

# Create a product line
aha product create --name "My Portfolio" --prefix PORT --product-line --product-line-type portfolio

# Update a product
aha product update PROD --name "New Name" --description "Updated description"

Enhanced Product List

List products with filters and tree-structured output:

// List with filters
products, err := client.ListProducts(ctx,
    aha.WithUpdatedSince(time.Now().AddDate(0, -1, 0)),
    aha.WithIdeaPortals(),
)

CLI with tree view:

aha product list                          # Tree structure by default
aha product list --with-idea-portals      # Filter to products with idea portals
aha product list --updated-since 2024-01-01
aha product list --output json            # JSON tree structure

ListFeatures GraphQL Query

Query features with release information, position, and workspace:

import "github.com/grokify/aha-go/graphql/generated"

client := graphql.NewGenqlientClient("mycompany", "your-api-key")

// List features with release info
resp, err := generated.ListFeatures(ctx, client,
    &page,        // page number
    &pageSize,    // results per page
    nil,          // filters
    &orderBy,     // e.g., "position", "createdAt"
)

for _, feature := range resp.Features.Nodes {
    fmt.Printf("%s: %s (release: %s, position: %d)\n",
        feature.ReferenceNum,
        feature.Name,
        feature.Release.Name,
        feature.Position,
    )
}

ListProjects GraphQL Query

Query projects (workspaces) with parent filtering for tree traversal:

// List root projects (no parent)
resp, err := generated.ListProjects(ctx, client, &page, &pageSize, nil, nil)

// List children of a product line
resp, err := generated.ListProjects(ctx, client, &page, &pageSize, nil, &parentID)

Bug Fixes

Nullable Date Fields

Date fields (start_date, due_date, end_date, release_date, external_release_date) now correctly handle null values from the API. Previously, null dates could cause decode errors.

Idea Description Object

The Idea description field now properly handles the object format returned by the Aha API (with body and html_body fields), fixing JSON decode errors.

New SDK Methods

Method Description
CreateProduct Create a new product
CreateProductLine Create a new product line
UpdateProduct Update an existing product
ListProducts List products with filtering options

Product Options

// ListProducts options
aha.WithUpdatedSince(t time.Time)
aha.WithIdeaPortals()
aha.WithProductsPage(page int)
aha.WithProductsPerPage(perPage int)

// CreateProduct options
aha.WithProductDescription(desc string)
aha.WithProductParentID(parentID string)
aha.WithProductWorkspaceType(workspaceType string)

// UpdateProduct options
aha.WithUpdateProductName(name string)
aha.WithUpdateProductReferencePrefix(prefix string)
aha.WithUpdateProductDescription(desc string)
aha.WithUpdateProductParentID(parentID string)
aha.WithUpdateProductWorkspaceType(workspaceType string)

New CLI Commands

Command Description
aha product create Create a product or product line
aha product update Update a product

Enhanced Commands

Command Enhancement
aha product list Tree view, --with-idea-portals, --updated-since flags
aha product get Shows workspace_type, parent_id, description

New GraphQL Operations

Operation Description
ListFeatures List features with release info, position, tags
ListProjects List projects with parent filtering
UpdateFeatureRank Update feature position/rank

Commits

Hash Description
e0ab2c1 docs: document go-rod dependency situation and migration plan
2fc96ad fix(deps): pin fetchup v0.2.4 for go-rod compatibility
ed56045 docs: add product create and update documentation
50c36d3 feat(cli): enhance product get output
bedcdbe feat(cli): enhance product list with tree view and GraphQL
17e306f feat(cli): add product create and update commands
af59927 feat(graphql): add ListFeatures and ListProjects queries
e0985d5 fix(api): handle nullable date fields and description objects
844155b feat(api): add product create, update, and enhanced list methods
beb8821 refactor(api): regenerate ogen client from updated OpenAPI spec
e568fcc feat(openapi): add product CRUD endpoints and nullable date fields

Dependency Notes

This release pins fetchup v0.2.4 for compatibility with go-rod v0.116.2. The go-rod library is used for browser automation (template creation) and appears unmaintained since 2024. A migration to chromedp is planned as non-blocking technical debt. See docs/specs/ROADMAP.md for details.

Upgrade Notes

This is a backward-compatible release. No breaking changes from v0.4.0.

Contributors