Release Notes - v0.12.0¶
Release Date: 2026-08-23
Overview¶
v0.12.0 adds custom field mutations to AQL and the MCP server, syncs idea
voter and customer-org identity into new resources (get_voter_domain_histogram,
a cache-backed omnisignalcache provider), ships a cache-backed omniroadmap
provider for the omniroadmap-core ecosystem, and adds a direct MCP
tool-invocation CLI subcommand. It also closes out three previously-open
roadmap phases (write tools, HTTP API observability, analytics) and fixes a
sync resilience gap.
Highlights¶
- Custom Field Mutations -
UPDATE <entity> SET custom.<key> = <value>now works in AQL (CLIexecand theset_custom_field_valuesMCP tool) for features, initiatives, and releases, routed through aha-go's GraphQLSetCustomFieldValues - Idea Voter & Customer-Org Sync - new
idea_endorsements/idea_users/idea_organizationsEnt schemas and incremental sync, aget_voter_domain_histogramMCP tool, and a new cache-backedomnisignalcacheOmniSignal provider with voter/customer-org tiering - omniroadmap Package - cache-backed
provider.Providerimplementation for the omniroadmap ecosystem, registered as"aha-studio", reading entirely from the local cache with no Aha API traffic aha-mcp-server toolSubcommand - invoke any registered MCP tool directly from the shell without a running server session- Rate-Limited Sync - a
sync_dataMCP tool and--detailed/--rate-limitCLI flags, pluscontext.Contextthreaded through all cache query methods - Phase 2/4/5 Complete - all remaining write-tool gaps, HTTP API observability (OpenAPI spec, Prometheus metrics), and analytics tools now shipped
- Sync Resilience - GraphQL feature sync falls back to REST API when project resolution fails
Installation¶
# Install AQL CLI
go install github.com/grokify/aha-studio/cmd/aha-studio@v0.12.0
# Install MCP Server
go install github.com/grokify/aha-studio/cmd/aha-mcp-server@v0.12.0
What's New¶
Custom Field Mutations¶
UPDATE statements now accept custom.<key> alongside standard fields, for
features, initiatives, and releases:
aha-studio exec --product PROJ \
"UPDATE features SET status = 'Done', custom.priority = 'High' WHERE reference_num = 'PROJ-123'"
{
"tool": "set_custom_field_values",
"arguments": {
"entity_type": "feature",
"record_id": "PROJ-123",
"custom_fields": {"priority": "High", "story_points": 8}
}
}
Custom fields have no REST equivalent in aha-go, so both paths route through
graphql.SetCustomFieldValues; a custom.* assignment and a standard-field
assignment in the same UPDATE are each evaluated (and can each fail)
independently rather than one silently masking the other.
Idea Voter and Customer-Org Sync¶
New idea_endorsements, idea_users, and idea_organizations sync
(opt-in, incremental) populate voter identity and organization data,
including email_domains/revenue when synced with Detailed=true:
A new omnisignalcache package implements omnisignal.Provider over this
cache (registered "aha-studio"), resolving each idea's voters against
synced organizations to populate signal.MetaCustomers — see the
omnisignalcache package docs.
omniroadmap Provider¶
import (
studiosync "github.com/grokify/aha-studio/sync"
ahastudio "github.com/grokify/aha-studio/omniroadmap"
)
db, err := studiosync.Open(studiosync.DefaultDBPath())
p := ahastudio.NewProvider(db, ahastudio.WithProduct("PROJ"))
resp, err := p.ListItems(ctx, &provider.ListItemsRequest{})
Reads need no Aha API traffic — see the
omniroadmap package docs for capabilities and
fidelity notes versus the live aha-go/omniroadmap provider.
Direct MCP Tool Invocation¶
aha-mcp-server tool list
aha-mcp-server tool schema list_initiative_features
echo '{"initiative_id":"PROD-S-34"}' | aha-mcp-server tool call list_initiative_features
Useful for agent sessions that can't register a new or updated MCP tool mid-session — an agent's MCP servers only start once, at session launch, so a tool that was added or changed doesn't require a session restart.
Rate-Limited Sync¶
The sync_data tool and --rate-limit/AHA_SYNC_RPS use a dedicated
throttled client (default 10 req/s) so bulk sync doesn't share/contend with
the shared per-request client used by other tools.
Phase 2/4/5: Write Tools, HTTP API, and Analytics¶
| Tool / Endpoint | Description |
|---|---|
create_release |
Create releases with dates, parking lot status, and theme |
delete_idea |
Delete ideas with required confirm: true safety parameter |
list_idea_categories |
List idea categories for a product |
get_feature_ideas |
List ideas linked to or promoted from a feature |
/api/openapi.json |
Dynamically generated OpenAPI 3.0.3 specification |
/metrics |
Prometheus exposition format: HTTP, AQL, cache, sync, graph, uptime |
get_ideas_statistics |
Aggregated idea stats (status counts, votes, top ideas) from the cache |
get_features_statistics |
Aggregated feature stats (status/release counts) from the cache |
Sync Resilience¶
The GraphQL-based feature sync now falls back to the REST API when project resolution fails, handling cases where GraphQL lacks visibility into products the REST API can access.
New MCP Tools¶
This release brings the total to 87 MCP tools. New in v0.12.0:
set_custom_field_values, sync_data, list_initiative_features,
get_initiative_with_features, list_initiatives_by_tag,
get_voter_domain_histogram, create_release, delete_idea,
list_idea_categories, get_feature_ideas, get_ideas_statistics,
get_features_statistics, create_idea, add_goal_to_feature,
list_features_by_release_date, list_features_by_release_name.
See the Tools Reference for full parameter docs on every tool.
Dependency Updates¶
- Upgraded
github.com/grokify/aha-goto v0.10.0 andgithub.com/grokify/omniroadmap-coreto v0.1.0 as published modules, removing the localreplacedirectives used during development - Added
entgo.io/entfor the newIdeaEndorsement/IdeaUser/IdeaOrganizationschemas - Routine transitive bumps (
omniskill,w3pilot,modernc.org/sqlite, Go toolchain to 1.26.4)
Roadmap Status¶
With v0.12.0, the roadmap advances to 5 of 8 phases complete, and Phase 8 (voter identity and organization sync) is in progress:
| Phase | Status |
|---|---|
| Phase 1: Release Query Completion | Complete |
| Phase 2: Write Tool Gaps | Complete (v0.12.0) |
| Phase 3: OmniSignal Adapter | Complete |
| Phase 4: HTTP API Remainder | Complete (v0.12.0) |
| Phase 5: Analytics Tools | Complete (v0.12.0) |
| Phase 6: DuckDB Evaluation | Not started |
| Phase 7: Atlassian Integration & Cross-Tool Workflows | Not started |
| Phase 8: Voter Identity and Organization Sync | In progress (v0.12.0) |
Commits¶
| Commit | Type | Description |
|---|---|---|
f562db1 |
feat(aql) | Support custom.* field references in UPDATE SET clauses |
33df380 |
test(aql) | Add tests for custom field UPDATE parsing |
33148d1 |
feat(executor) | Route custom.* field updates through GraphQL SetCustomFieldValues |
eb01f9a |
test(executor) | Add mutation tests for standard and custom field updates |
7b51714 |
fix(schema) | Register release_reference_num as a queryable AQL field |
116c591 |
feat(sync) | Thread context.Context through queries and add generic record access |
53993c2 |
test(sync) | Add tests for records, query building, and incremental sync |
d41d950 |
feat(mcp) | Add custom field, sync, and initiative-scoped tools |
35df331 |
test(mcp) | Add tests for custom field, sync, and initiative tool handlers |
f41f5c2 |
feat(cmd) | Wire custom-field exec, rate-limited sync, and context-aware queries into aha-studio CLI |
4b2c0c6 |
feat(cmd) | Add direct tool invocation subcommand to aha-mcp-server |
451f95c |
feat(omniroadmap) | Add cache-backed provider for aha-studio |
79fcebf |
feat(sync) | Add Ent schema for IdeaEndorsement, IdeaUser, IdeaOrganization |
3a3ef80 |
chore(codegen) | Regenerate Ent client (includes IdeaEndorsement/IdeaUser/IdeaOrganization) |
4b01be8 |
feat(sync) | Add idea endorsement/user/organization query and upsert methods |
3e68538 |
feat(sync) | Add opt-in incremental sync for idea endorsements, users, and organizations |
a5ab308 |
chore(deps) | Add entgo.io/ent for the new Ent schemas |
701e416 |
feat(sync) | Add idea endorsement/user/organization Ent upserts |
d8760d0 |
test(sync) | Add idea endorsement/user/organization store tests |
6f94f49 |
feat(mcp) | Register get_voter_domain_histogram tool |
cbaa895 |
feat(mcp) | Add GetVoterDomainHistogram handler |
6082dbd |
test(mcp) | Bump expected tool count for get_voter_domain_histogram |
dd6f261 |
feat(omnisignalcache) | Add cache-backed omnisignal provider for Aha ideas |
437c400 |
test(omnisignalcache) | Add provider test suite |
0af7850 |
docs(roadmap) | Unblock RMI-AHASTUDIO-023, add Phase 8 |
b319140 |
chore(deps) | Update aha-go to v0.9.0 |
0e30ad1 |
feat(httpserver) | Add Prometheus metrics at /metrics |
765f906 |
feat(httpserver) | Add OpenAPI 3.0 spec at /api/openapi.json |
abd24bc |
feat(mcp) | Add Phase 2 write tools and Phase 5 analytics tools |
e9479a1 |
feat(sync) | Add statistics methods for ideas and features |
3a59ca5 |
fix(sync) | Fallback to REST API when GraphQL project resolution fails |
7a793a0 |
feat(mcp) | Add create_idea and add_goal_to_feature GraphQL tools |
1ac837b |
feat(mcp) | Add release query tools and AQL release.* qualifier support |
559844c |
docs | Update tool count to 81 and add HTTP API feature |
72de791 |
docs(roadmap) | Mark Phases 2, 4, 5 complete |
37c989c |
docs | Add omnisignal package reference page |
bd9f11e |
docs | Fix mkdocs nav orphans and update_release parameter docs |
f8c9007 |
docs(roadmap) | Mark Phase 3 OmniSignal Adapter complete |
cf008c1 |
chore(deps) | go mod tidy |
3f7ef2f |
chore(deps) | go mod tidy |
13a561c |
chore(deps) | Update dependencies (aha-go v0.10.0, omniroadmap-core v0.1.0, remove local replaces) |
236768e |
docs | Document custom field mutations, sync tool, and omniroadmap package |
Full Changelog¶
See the CHANGELOG for complete version history.