Aha Studio — Roadmap¶
Initiative: INIT-AHASTUDIO-001
Repository: github.com/grokify/aha-studio
Status: In Progress — 5 of 8 phases completed
RMI IDs are stable and permanent. Commits implementing an item carry the trailer
Refs: RMI-AHASTUDIO-NNN. Phase status is derived from member RMIs — a phase is complete only when all its required RMIs are complete. Completed historical work (legacy phases 1–10a and most of 10b) is recorded in ROADMAP_HISTORY.md; this file covers remaining work only. See PLAN.md for workstream rationale and sequencing.
Phase 1 — Release Query Completion¶
Theme: Finish feature-release queries and clear the release blocker. Status: Completed — 5 of 5 items completed
- [x]
RMI-AHASTUDIO-001Feature→Release relationship rows during sync - Acceptance: sync inserts
BELONGS_TOrows into the relationships table for every feature with arelease_id - Delivered:
syncFeaturesGraphQL()callsUpsertRelationship("feature", f.Id, "BELONGS_TO_RELEASE", "release", releaseID, product)in sync/sync.go:263 - [x]
RMI-AHASTUDIO-002GetFeaturesByReleaseDateandGetFeaturesByReleaseNameinsync/db.go - Depends on:
RMI-AHASTUDIO-001 - Acceptance: date-indexed and name-based lookups joining features to releases, with unit tests
- Delivered:
GetFeaturesByReleaseDate,GetFeaturesByReleaseDateRange,GetFeaturesByReleaseName,GetFeaturesByReleaseIDin sync/db.go - [x]
RMI-AHASTUDIO-003AQLrelease.dateandrelease.namequalifier support in planner and executor - Depends on:
RMI-AHASTUDIO-002 - Acceptance:
FROM features WHERE release.date = '2026-10-31'andrelease.name = 'Q4 2026'work in offline and prefer-cache modes; extends the existingcustom.*qualifier mechanism - Delivered:
Record.Get()mapsrelease.*prefix to release fields;featureToRecord()populatesrelease.date,release.name,release.id; planner recognizesrelease.*incheckCustomFieldsNeeded() - [x]
RMI-AHASTUDIO-004list_features_by_release_dateMCP tool - Depends on:
RMI-AHASTUDIO-002 - Acceptance: thin wrapper over the db methods, registered in the Aha skill
- Delivered:
list_features_by_release_dateandlist_features_by_release_nametools in mcp/skill.go; handlers wrap sync/db.go methods - [x]
RMI-AHASTUDIO-005Remove localreplace github.com/grokify/aha-go => ../aha-gofromgo.mod - Acceptance: required
aha-gochanges released and tagged upstream;go.modpins a published version; pre-push checklist passes - Delivered: go.mod has no aha-go replace directive; dependency pinned to published v0.8.0
Phase 2 — Write Tool Gaps¶
Theme: Close out remaining legacy Phase 10b MCP write tools as one batch release. Status: Completed — 6 of 6 items completed
- [x]
RMI-AHASTUDIO-006create_ideaMCP tool - Delivered: GraphQL CreateIdea mutation wrapper in mcp/handlers.go
- [x]
RMI-AHASTUDIO-007create_releaseMCP tool - Acceptance: pairs with the existing
update_release - Delivered: aha-go REST API CreateRelease; MCP tool
create_releasein mcp/handlers.go - [x]
RMI-AHASTUDIO-008add_goal_to_featureandremove_goal_from_featureMCP tools - Delivered:
add_goal_to_featurevia GraphQL CreateRecordLink - Note:
remove_goal_from_featureblocked — no DeleteRecordLink mutation in aha-go - [x]
RMI-AHASTUDIO-009get_feature_ideasMCP tool (ideas promoted to a feature) - Delivered: aha-go REST API ListFeatureIdeas; MCP tool
get_feature_ideasin mcp/handlers.go - [x]
RMI-AHASTUDIO-010list_idea_categoriesMCP tool with caching - Delivered: aha-go REST API ListProductIdeaCategories; MCP tool
list_idea_categoriesin mcp/handlers.go - [x]
RMI-AHASTUDIO-011delete_ideaMCP tool with confirmation semantics - Acceptance: destructive operation requires explicit confirmation parameter; documented in tool description
- Delivered: aha-go REST API DeleteIdea; MCP tool
delete_ideawithconfirmparameter in mcp/handlers.go
Phase 3 — OmniSignal Adapter¶
Theme: Bridge Aha Ideas into the ProductContext signal layer. Status: Completed — 6 of 6 items completed
- [x]
RMI-AHASTUDIO-012IR schema coordination with signal-spec and omnisignal - Acceptance: cross-repo gate —
plexusone/signal-specdefines the enhancement signal type (schema is owned there, not here); field mapping for Aha Idea agreed and recorded in TRD.md before implementation starts - Delivered: signal-spec v0.2.0
TypeEnhancementRequest; field mapping in omnisignaldocs/metadata-conventions.md - [x]
RMI-AHASTUDIO-013Adapter package mapping Aha Idea to enhancement signal IR - Depends on:
RMI-AHASTUDIO-012 - Acceptance: raw facts only (votes, dates, counts); derived metrics such as frustration score are computed by OmniSignal, not here
- Delivered:
omnisignal/provider.gowithnormalizeIdea()function - [x]
RMI-AHASTUDIO-014Product and category normalization to canonical IDs - Depends on:
RMI-AHASTUDIO-013 - Delivered:
normalizeIdea()extracts product ref and category refs as typed IDs - [x]
RMI-AHASTUDIO-015Metrics and lifecycle extraction: votes, subscribers, organizations, named customers, opportunities, estimated ARR; workflow status mapping andageDays - Depends on:
RMI-AHASTUDIO-013 - Delivered:
normalizeIdea()populates metadata with votes, workflow status, ageDays calculation - [x]
RMI-AHASTUDIO-016Batch export command (aha-studio signals export) and/or provider registration withplexusone/omnisignal - Depends on:
RMI-AHASTUDIO-014,RMI-AHASTUDIO-015 - Delivered:
init()registers "aha" provider with omnisignal registry - [x]
RMI-AHASTUDIO-017Round-trip tests against recorded fixtures - Depends on:
RMI-AHASTUDIO-016 - Acceptance: no live API calls in unit tests
- Delivered:
omnisignal/provider_test.gowith mock client
Phase 4 — HTTP API Remainder¶
Theme: Complete the legacy Phase 11 HTTP surface. Status: Completed — 2 of 2 required items completed (1 blocked/deferred)
- [x]
RMI-AHASTUDIO-018OpenAPI 3.0 specification served at/api/openapi.json - Acceptance: covers all existing endpoints; enables client generation
- Delivered:
httpserver/openapi.gowith full OpenAPI 3.0.3 spec at/api/openapi.json - [x]
RMI-AHASTUDIO-019/metricsPrometheus endpoint - Acceptance: query counts, latencies, cache hit rate
- Delivered:
httpserver/metrics.gowith Prometheus exposition format at/metrics - [~]
RMI-AHASTUDIO-020WebSocket streaming for large result sets — blocked/deferred - Acceptance: deferred until a concrete consumer exists; re-scope before starting
Phase 5 — Analytics Tools¶
Theme: Aggregated statistics without fetching all records to the client (legacy Phase 10c). Status: Completed — 3 of 3 required items completed
- [x]
RMI-AHASTUDIO-021get_ideas_statisticsMCP tool - Acceptance: counts by status/category, vote statistics, top ideas per group; computed from the SQLite cache when synced, API aggregation as fallback
- Delivered: sync/db.go GetIdeasStatistics with status counts, vote stats, recent/updated counts, top ideas by votes
- [x]
RMI-AHASTUDIO-022get_features_statisticsMCP tool - Acceptance: counts by release/status, requirements summary; cache-first
- Delivered: sync/db.go GetFeaturesStatistics with status/release counts, with/without release, upcoming releases with feature counts
- [x]
RMI-AHASTUDIO-023get_voter_domain_histogramMCP tool - Acceptance: unique voter domain analytics for an idea (or product-wide)
- Un-blocked: prior investigation checked only aha-go's vendored openapi/aha.yaml and GraphQL schema, both of which expose just the aggregate votes/numEndorsements count. Live-tested against a real Aha account and confirmed
GET /ideas/:idea_id/endorsementsreturns per-voter identity (name, email) viaendorsed_by_portal_user/endorsed_by_idea_user; that endpoint was simply missing from the vendored spec. - Delivered: aha-go endorsement.go (ListIdeaEndorsements), aha-studio ent/schema/ideaendorsement.go, sync/sync.go syncIdeaEndorsements (opt-in, incremental), sync/db.go GetVoterEmailDomainStatistics, mcp get_voter_domain_histogram tool
Phase 6 — DuckDB Evaluation¶
Theme: Columnar engine for analytics, benchmark-first (legacy Phase 13). Status: Not started — 0 of 4 items completed
- [ ]
RMI-AHASTUDIO-024Benchmark current SQLite performance on representative analytics queries - Depends on:
RMI-AHASTUDIO-021,RMI-AHASTUDIO-022 - [ ]
RMI-AHASTUDIO-025Feature-flagged DuckDB backend for entity data - Depends on:
RMI-AHASTUDIO-024 - Acceptance: SQLite retained for sync metadata
- [ ]
RMI-AHASTUDIO-026Parquet export support - Depends on:
RMI-AHASTUDIO-025 - [ ]
RMI-AHASTUDIO-027Validate and flip default, or drop DuckDB if SQLite proves sufficient - Depends on:
RMI-AHASTUDIO-025 - Acceptance: decision recorded with benchmark evidence
Phase 7 — Atlassian Integration & Cross-Tool Workflows¶
Theme: Compose mcp-atlassian skills into aha-studio and add cross-tool Aha↔Jira tools leveraging the Integration field. Status: Not started — 0 of 3 items completed
- [ ]
RMI-AHASTUDIO-028Compose mcp-atlassian Jira skill into aha-studio MCP server - Acceptance: when Atlassian credentials are configured, aha-studio exposes all Jira tools from
plexusone/mcp-atlassian/skills/jira; skill composition uses omniskill interfaces - Note: skills remain independent in mcp-atlassian for standalone use
- [ ]
RMI-AHASTUDIO-029Compose mcp-atlassian Confluence skill into aha-studio MCP server - Acceptance: when Atlassian credentials are configured, aha-studio exposes all Confluence tools from
plexusone/mcp-atlassian/skills/confluence - [ ]
RMI-AHASTUDIO-030Cross-tool Aha↔Jira tools leveraging the Integration field - Depends on:
RMI-AHASTUDIO-028 - Tools:
get_feature_with_jira— fetch Aha Feature + linked Jira Epic/Issue in one call (Aha is product management source, Jira is engineering implementation source)sync_feature_status— sync workflow status between Aha Feature and linked Jira Epiclink_feature_to_epic— set the Aha Feature Integration field to a Jira Epic URL/keyunlink_feature_from_epic— clear the Integration fieldlist_features_with_jira_links— find all features with Jira integrationsget_jira_epic_with_feature— fetch Jira Epic + linked Aha Feature (reverse lookup)
- Acceptance: tools handle the Integration field parsing (Jira URL → issue key extraction); bidirectional lookups work
Phase 8 — Voter Identity and Organization Sync¶
Theme: Sync idea_users and idea_organizations from Aha, and wire voter/customer-org tiering into a cache-backed omnisignal provider. Status: In progress — 0 of 1 items completed
- [ ]
RMI-AHASTUDIO-031Sync idea_users and idea_organizations; wire voter/customer tiering into a cache-backed omnisignal provider - Acceptance: aha-go
ListIdeaUsers/GetIdeaUser/ListIdeaOrganizations/GetIdeaOrganizationlive-verified against a real Aha account; aha-studioidea_users/idea_organizationssync (Detailed=true) populatesemail_domains/revenue; a newomnisignalcacheprovider (registered as"aha-studio", mirroring the existingaha-go/omniroadmapvsaha-studio/omniroadmaplive/cached split) produces signals withsignal.MetaCustomerspopulated from resolved organization refs —idea_organizations.email_domainsis Aha's own authoritative domain→customer mapping, no manual config needed for the common case;metrics.Compute(ctx, "reach", ...)over those signals returns a non-zero distinct-customer count