What Shipped in Starko: 30 October to 1 November 2026

What Shipped in Starko: 30 October to 1 November 2026

Forty-two pull requests merged into Starko between 30 October and 1 November 2026. This post walks through fourteen of them, and three more have their own posts. The headline item is among those three: the shipped. Most of the pull requests in this post were built by Starko AI from a ticket or in a Claude Code session, and every one was reviewed and merged by a person. That is the point: the factory working on itself.

Fourteen of the forty-two pull requests merged between 30 October and 1 November

⌘K: a Starko AI session from the command menu

Type anything into ⌘K and a Starko AI row appears: "Start a session on this". Pull request 648 made that a one-step action: a ticket from your text, an interactive session on it, the ticket open in chat. ⌘↵ always starts it. Plain Enter starts it only once the search has found nothing, so a quick search cannot start a paid run by accident. Every check runs before the ticket exists, so a refused start leaves no stray ticket.

Pull request 650 put projects in the palette, so "starko-main" finds "Starko - Main development" and the ticket is filed there. Pull request 657 fixed what we hit first: the ticket sheet stole focus, so Enter and ⌘S never reached the composer until you clicked into it. The composer now takes focus one animation frame after mount, and ⌘K closes the palette too. The sandbox had no preview login when this merged, so none of it was checked in a browser.

The ticket editor plays audio and video, and accepts any file

Uploaded audio and video used to show as the same download-only card as any other file. Pull request 644 detects the type and shows a player: play button, seek line and duration for audio, a thumbnail that opens a 16:9 player for video. A card only hands the browser the file's address once it is within 200 px of the viewport, so a long thread does not load media nobody scrolls to. We checked this one in Chromium.

Pull request 645 fixed the drop handler, which answered "File type not supported" for an mp3 or a wav. Any non-image drop now inserts a file card and uploads, and a pasted link to a media file becomes a player card with nothing uploaded.

The reason was voicemail. Tickets from one customer's help center arrive over the API with a signed .wav link in the description. Pull request 647 converts such links the first time a ticket is seeded into the collaborative editor, once, so two people opening it together cannot create duplicate cards.

Tickets table: four new columns and inline edits

A customer wanted the ticket list to show more attributes, public or private in particular, with each person choosing which appear. Pull request 642 extended the existing table rather than rebuilding it: four table-only columns, off by default, Visibility, Project, Start date and Updated.

Visibility and Project are editable inline, and the filter bar gains a Public filter that survives the URL round-trip. One thing to know: changing Visibility from the table changes whether a ticket appears on the customer portal, now one click from the list. The rendered table is covered by a component test only; no preview login was available for a screenshot.

Knowledge hub: import a folder as collections

Drop a folder into the knowledge hub import dialog and its tree becomes collections and subcollections named after the folders. Pull request 649 creates or reuses every collection in one transaction, then queues one embedding run per file with its collection already set. A folder named like an existing collection at the same level adds to it instead of duplicating it.

Collections only go two levels deep, so deeper folders are flattened. Only PDF and Markdown files are imported, capped at 200 files per import in batches of 12. A new collection picker means imports no longer land in "No category". Re-importing a file still creates a second article; duplicates are an open question.

Notifications and Slack

Tapping a push notification on a phone opened the app at the root. Pull request 656 found two causes: the link our workflows returned was dropped silently by the push framework's output schema, and the Firebase service worker's own click handler ran first and only focused an open tab. The link now travels as a provider override on all three push workflows, and our click listener registers ahead of the SDK's and navigates the tab. A sandbox cannot receive a push, so real iPhone and Android devices have to be checked after deploy.

In Slack, a mention from someone whose Slack email is not a workspace member was ignored with an ephemeral note only the client open at that moment could see, so it looked like Starko never answered. Pull request 660 adds a 🚫 reaction to the ignored message, beside the existing 👀, ✅ and ❌ turn reactions.

The sandbox console and the preview login

on 31 October, and two follow-ups landed in the Environment tab the same day. Pull request 662 rewrote the preview login editor in plain language after I found it confusing: one sentence on what the login is for, how to copy the Cookie header from DevTools, then the paste box.

Pull request 670 came out of my own test session. The dev server started from the Console rejected the preview login's cookie with a missing-secret error, even though the secret was among the project's sandbox variables. The Console ran in its own process session that started bare. Every console command is now prefixed with a prelude that exports the project's variables and unsets any removed since the previous command.

The agent workspace and a faster ticket thread

Once a run has ended, the ticket workspace used to show "No session is open" above a live composer. Pull request 680 replaces them with one card and one action, "Continue session", with the thread fading under it. The button unfolds the real composer with focus and folds it back when a new run takes over. Not yet checked in a browser at merge time.

Pull request 681 is a follow-up to . Measured on production, the thread's message text waited on a Server Action for the saved sessions, queued behind every other action on the page. Thread reads moved to the rpc channel, the saved session list rides in the page bundle, and a hover prefetch and the detail view share one bundle load.

Our own local measurement, next start against the real database; production numbers are lower, but the shape is the same.

FlowBeforeAfter
Panel open, cold: page bundle calls2 (1188 ms + 952 ms)1 (688 ms)
Panel open, cold: body after the tab is clickable~300 ms, one Server Action70 ms, no request
Settled panel, first click on the Starko tab (production)266 ms, one Server Action83 ms, no request
Hard open of the ticket page: body after the title~170 ms, one Server Action~90 ms, no request

Frequently Asked Questions

Do I need to do anything to get these?

No. Everything here is live in the dashboard and in Slack. One exception: a Starko AI session whose dev server was already running in the Console needs it stopped and run again to pick up the sandbox variables.

How do I start a session from ⌘K?

Open ⌘K, type what you want done, and pick the Starko AI row, or press ⌘↵ to start at once. Plain Enter only starts one when the search has found nothing. Type a project name to start the session in that project.

Where do these notes come from?

Each item is the description on a merged pull request in Starko's own repository. Most were written by Starko AI at the end of a run that started from a ticket, or by Claude Code in a session one of us drove, and a person reviewed and merged every one. Where a note says something was not checked in a browser or on a device, we kept that here.

Stefan Vukmanovic

Stefan Vukmanovic

Founder, Starko

Stefan Vukmanovic is the founder of Starko, the software factory that turns customer feedback into merged pull requests. He built the support side first, the AI helpdesk, ticketing and knowledge base, and now builds the factory on top of it: feedback becomes recommendations, coding agents build the accepted ones, and the team pays only for what it merges. He writes about running that loop in production.

Published

November 1, 2026

Category

Changelog