Inspiration

Every sprint ends the same way: an engineering manager stares at a board full of merge requests and closed issues, then spends 1–2 hours writing an update for leadership, Slack, and all-hands. Leadership rarely reads raw GitLab exports. Generic AI summaries sound fluffy and aren't grounded in what actually merged.

GitLab Orbit gives AI a structured graph of MRs, issues, and project context. I built SprintStory Flow for the GitLab Transcend Hackathon (Showcase Track) to answer one question: What if Orbit could write the sprint story for you?

What it does

SprintStory Flow turns GitLab sprint data into leadership-ready narratives—Shipped, Learned, Next—not another unread Jira export.

It runs two ways:

AI Catalog Flow — A two-agent Duo pipeline (AI Catalog #1012003):

  1. Sprint collector — fetches merged MRs and closed/open issues
  2. Story writer — outputs headline, Shipped · Under the hood · Learned · Next, all-hands quote, Slack markdown, and a 6-bullet slide outline

Trigger on any issue: @ai-sprintstory-flow-sprintstory Generate sprint story for the last 2 weeks

Web demo + CLI — Magazine-style sprint page, GET/POST /api/story, CLI export to HTML/Slack/slides, and Orbit traversal queries via glab orbit remote query.

Repo: gitlab.com/sprintstory/sprintstory

How we built it

Layer Stack
Web UI React + Vite
API Express / Vercel serverless
Data Orbit REST API → GitLab REST fallback → demo mode
Flow YAML v1, 2 AgentComponents, Mention trigger
Platform sprintstory group — Orbit + Duo Agent Platform enabled

Sprint window + project → Orbit/REST data → MRs + issues → SprintStory template → HTML · Slack · slides

Steps: built web app and API → authored flow YAML → published to AI Catalog → enabled flow + Mention trigger → validated with real project data via gitlab_api_get.

Challenges we ran into

  • Orbit needs a top-level group — Personal namespaces couldn't enable Orbit; the sprintstory Ultimate group fixed it.
  • AI Catalog YAML — Hidden required fields (unit_primitives: [], toolset: []) and GraphQL validation that differed from Duo Chat advice.
  • query_graph returned fake data — GraphQL queries pulled orbit/core samples; traversal via DAP returned synthetic 2025 MRs even for the correct project path. Fix: gitlab_api_get in the flow; Orbit REST in the web app.
  • Missing Mention trigger — Enabling the catalog item wasn't enough; @mention did nothing until the trigger was added.
  • Orbit indexing delay — New projects need time before graph data appears; REST fallback keeps demos reliable.
  • Wrong date windows — Agents sometimes used 2025 instead of 2026 until prompts were tightened.

Accomplishments that we're proud of

  • Working AI Catalog flow — Public, enabled, triggerable via @mention, finished in ~2 minutes with verified real data.
  • Grounded narratives — Stories from actual MRs like docs: add live demo line to README, not invented auth/CI fiction.
  • Dual demo paths — GitLab-native flow automation + web app with Orbit queries and export.
  • Full repo — Web UI, API, CLI, Orbit query files, skill, flow YAML, CI, MIT license, and docs.
  • Leadership-focused output — Structured Shipped · Learned · Next with Slack and slide exports, not a ticket dump.

What we learned

  • Context quality beats model hype — Real MR titles beat polished fiction.
  • Flows need validation, not trust — Agents accept wrong dates and demo data unless tools enforce checks.
  • Orbit is the differentiator — Structured SDLC data → workflow automation, aimed at engineering managers.
  • Platform integration is layered — Orbit + Duo + AI Catalog + triggers each have their own setup surface.
  • Fallbacks matter — REST fallback kept the demo reliable while Orbit indexing caught up.

What's next for SprintStory Flow

  • Implement PDF export (#5)
  • Post generated stories back as issue comments from the flow
  • Group-level sprint aggregation across multiple projects via Orbit
  • Only claim "shipped" when a linked MR exists, not just a closed issue

Built With

Share this project:

Updates

Submission history