Open issues
Feature guide
12 shipped, 12 features · 0 bug fixes · 0 changes · 1 today🐛T36Exp-02 export flow read a download link before the file had finished generating on the serverbug🤖 ClaudeAug 31, 2026
The flow grabbed the link element as soon as it appeared in the page, but the actual file behind it was still being written for a few more seconds. Needs a wait on the file's ready state, not just the link's presence.
🐛T32Crt-09 create flow submitted a duplicate record when a slow network made the button seem unresponsivebug👤 KevinAug 28, 2026
The automated flow could click submit twice while waiting on a slow response, creating two records. Working on disabling the button the instant the first click registers rather than after the response returns.
✨T41Mission board totals bar now shows how long each open batch of tests has been runningfeature👤 KevinSep 02, 2026
Kevin could see individual flow states but not how long a whole batch had been open overall. A totals line now shows elapsed time per open batch alongside the counts.
🐛T39Ntf-08 notification badge count was off by one after dismissing an item from a filtered listbug👤 KevinSep 01, 2026
Dismissing a notification while a filter was active updated the badge against the full unfiltered count instead of the visible one. Needs the badge to recount from whatever list is currently on screen.
✨T38Log-02 flow now waits on a named loading indicator instead of a fixed pause before reading rowsfeature👤 KevinSep 01, 2026
A fixed pause worked most of the time but was too short under heavier load and too long otherwise. Waiting for the indicator to disappear removes the guesswork in both directions.
🔧T35Prf-03 profile flow moved off a shared test account onto its own reserved accountchange👤 KevinAug 31, 2026
Prf-03 and two unrelated flows kept colliding on the same profile fields when run at the same time. Giving it a dedicated account removes the collision without touching the other flows.
✨T33Recalibration page adds a weekly trend line instead of just a single running accuracy numberfeature🤖 ClaudeAug 29, 2026
A flat percentage hid whether calls were getting better or worse over time. A small trend line beside it shows the last several weeks so a slide can be caught early.
🔧T30A revalidation result can never change a bug's platform status without Kevin pressing a key firstchange👤 KevinAug 27, 2026
Kevin: "a bug's status should not change without my approval." Any status difference between our record and the platform is flagged in a loud color until he acknowledges it himself.
✨T29Bug revalidation sweep re runs the flows attached to an open report and writes an evidence packfeature👤 KevinAug 27, 2026
Kevin can trigger a check on demand to see whether a filed bug still reproduces without re reading old traces by hand. Each result stays visible until he marks it seen, never disappearing on its own.
✨T23Twelve hour clock sweep underway across every page that still shows a raw military timefeature👤 KevinAug 24, 2026
Kevin: "anywhere we have military time, change it, for anything time related moving forward." Working through each page, report, and log line he actually reads one surface at a time, leaving only internal debug logs untouched.
🔧T40Srch-02 search flow's wait timeout raised slightly after two flaky failures under normal loadchange🤖 ClaudeSep 02, 2026
Two failures in a row on an otherwise stable flow pointed at a timeout set a little too tight rather than a real defect. Raised it modestly and will watch the next several runs before touching anything else.
✨T37Handoff file gains a short section naming exactly what to pick up first in the next sessionfeature🤖 ClaudeAug 31, 2026
A session ending with nothing written left the next one hunting for context. Even an empty handoff now says plainly that there is nothing pending, so no time is spent searching for work that isn't there.
✨T34Phone notifications batch into one message when several events land within a short windowfeature👤 KevinAug 30, 2026
Kevin: "my phone buzzed six times in two minutes for the same batch of runs finishing." Events within a short window are now folded into a single summary push instead of one per event.
✨T31Cross session messages let a second Claude session flag a shared file edit to the firstfeature🤖 ClaudeAug 28, 2026
Two sessions editing the same shared component risked stepping on each other's changes without knowing it. A short message now passes between sessions naming the file and the section touched.
✨T42Chk-04 checkout flow bug traced to a genuine product change, filed instead of silently patchedfeature👤 KevinSep 03, 2026 · done
Chk-04 failed against the same confirmation screen wording described in the test steps, which pointed at an actual product change rather than a broken selector. Filed as a question for Kevin, who confirmed it was intentional, and the test was updated to match.
🐛T27Set-01 saved a settings form even when a required field was left blank because of a racebug👤 KevinAug 26, 2026 · done
The save button's enabled check ran before the field's own validation had finished, so an empty required field could slip through. The save check now waits on the field's validation state directly.
🔧T28Panel row counts capped at four lines everywhere with an expand key for the restchange👤 KevinAug 26, 2026 · done
Kevin: "can we unify the amount of lines shown across panels since we can expand them anytime anyway." Every list panel now shows four rows and a small more count instead of growing without limit.
✨T26Telemetry inbox groups Claude's plain language notes by request so a session reads like a logfeature🤖 ClaudeAug 26, 2026 · done
Kevin reads what Claude did later, out of context, so a wall of separate lines was hard to follow. Notes are now grouped by the request or batch that produced them, with a short status pill on each group.
🐛T24Adm-03 role toggle flow read a stale permissions list cached from an earlier admin sessionbug👤 KevinAug 25, 2026 · done
The flow reused a permissions snapshot fetched before a role change, so a newly granted permission never showed as available. Refetching the list right before the check fixed it.
✨T22Info tips added next to every status glyph on the board so a symbol never needs asking aboutfeature👤 KevinAug 24, 2026 · done
Kevin asked what a small triangle icon meant on the board even though he had asked about a similar icon a week earlier. Every glyph now carries a one line tip explaining itself right where it appears.
🐛T21Rpt-12 export button stayed disabled after a filter was cleared even though data had reloadedbug🤖 ClaudeAug 24, 2026 · done
The disabled state was tied to the filter's previous value instead of the current row count, so clearing a filter left the button stuck. The check now reads the live row count on every filter change.
✨T20Watcher tabs all open together at session start instead of one at a time as they're neededfeature👤 KevinAug 23, 2026 · done
Kevin: "where are the watcher tabs" after a session skipped opening them. A single script now opens the board, the queue list, and the log view together the moment a session begins.
✨T16Hotkey help screen is checked against the actual key handlers so a retired key can't lingerfeature👤 KevinAug 20, 2026 · done
A key that still appeared in the help text after being removed from the code confused Kevin into pressing something that did nothing. A coverage check now fails if help and handlers disagree either way.
🐛T17Onb-05 timed out waiting for a welcome panel that had already been dismissed by a prior stepbug👤 KevinAug 21, 2026 · done
The flow waited for a panel to appear even on a run where an account already had onboarding marked complete, so the wait ran to its full timeout every time. Added a check for the already completed state first.
✨T18Demo pages for the portfolio render sample data through the same styling as the real watcher pagesfeature👤 KevinAug 21, 2026 · done
Kevin wanted a way to show the tracker and board layouts without exposing anything client specific. The demo pages read from a separate sample data file but reuse the exact same page rendering code.
✨T11Logbook calendar view groups completed runs by day so a week of work is visible at a glancefeature🤖 ClaudeAug 18, 2026 · done
Before this, finding what ran on a given day meant scrolling a flat log. The calendar view lists each day as its own row with a count and a short list of what passed or failed.
🐛T13Recalibration page showed a bug call as correct even after the report was proven wrongbug🤖 ClaudeAug 19, 2026 · done
A call logged when it was made never had its outcome filled in once the real answer was known, so the accuracy line stayed misleading. Outcomes are now backfilled the same day a verdict comes back.
✨T15Handoff file is rewritten at session close instead of appended, so old state stops leaking infeature👤 KevinAug 20, 2026 · done
Kevin: "old info that is no longer relevant being fed into the new context is wasted tokens." The file now holds only current state, generated fresh each close from what is actually on disk.
🔧T14Storage retention now trims old trace files after two weeks instead of keeping everything foreverchange🤖 ClaudeAug 19, 2026 · done
Trace and log files from finished runs were piling up with nothing removing them. A retention pass now deletes anything older than the window and keeps a short summary line instead.
✨T8Paste state is computed from a file diff instead of a hand kept list that always driftedfeature🤖 ClaudeAug 17, 2026 · done
The old paste queue was a manually edited list and it went stale within a day. Now anything that differs from the last known landed copy counts as outstanding, so the queue can never disagree with reality.
✨T12Learning ledger records every correction as one line so a lesson is never captured twicefeature🤖 ClaudeAug 19, 2026 · done
When Kevin repeats a note he has given before, that repetition now means the earlier capture failed rather than being logged as a brand new lesson. A matching row gets strengthened instead of duplicated.
🐛T10Bil-19 kept failing locally only because a fixture file from an earlier run was never cleaned upbug👤 KevinAug 18, 2026 · done
A leftover invoice file from a prior local pass made the second run see two rows instead of one, so an exact count assertion failed every second attempt. Cleanup now removes the fixture at the end of the flow, not just at the start.
🐛T6Phone notification fired twice for the same paste ready event on a slow evening runbug👤 KevinAug 16, 2026 · done
A retry inside the notifier resent the same message when the first request timed out even though it had actually gone through. Added a sent marker file so a retry checks before resending.
✨T7Quick pull does a fast merge instead of a slow overwrite of the local test cachefeature🤖 ClaudeAug 17, 2026 · done
The old full pull took long enough that it was banned during an active round. The new merge treats the last synced copy as a base, keeps unpasted local edits, and only flags a same line change as a real conflict.
🔧T4Suite of the day is resolved from the first link Kevin shares, not re asked every messagechange🤖 ClaudeAug 14, 2026 · done
Once he pastes a run link for chk-11, every later screenshot or flow name in that conversation is assumed to belong to that same run until he names a different one.
✨T5Parallel run lanes let three or four flows execute at once instead of one after anotherfeature👤 KevinAug 15, 2026 · done
Kevin pointed out the same account could run acc-07 and srch-02 at the same time since their cleanup steps are isolated. A lanes script now launches a batch concurrently instead of working it one flow at a time.
✨T3Your move panel on HQ now carries a plain one line action instead of a jargon heavy summaryfeature👤 KevinAug 14, 2026 · done
Early asks read like internal shorthand and Kevin had to ask what they meant twice in one week. Every entry is now an imperative sentence under 72 characters, with details folded into labeled segments below it.
🐛T2Fix ready rows lost their note text the moment a flow moved to local one times greenbug👤 KevinAug 13, 2026 · done
Kevin: "is this still accurate?" pointed at a note that had gone stale two stages back. The note field was only copied at row creation, not on every stage change, so a fresh diagnosis never reached the screen.
✨T1Mission board ladder: sections render even when empty so a card's stage never quietly vanishesfeature🤖 ClaudeAug 13, 2026 · done
Before this, a flow marked investigating could drop out of view entirely if its section was empty on the next refresh. Now every stage renders as a labeled section even with zero rows, so Kevin always sees the full ladder top to bottom.
🔧T25Considered a countdown timer on the board showing seconds until the next auto refreshchange🤖 ClaudeAug 25, 2026 · dropped
Kevin found the moving numbers distracting rather than useful once he saw it running. The page still reloads on change, just without a visible countdown.
🔧T19Considered folding the paste queue panel into the your move list to save a sectionchange🤖 ClaudeAug 22, 2026 · dropped
Testing it out made the your move list too long to scan in one glance, which defeated its purpose. Kept the paste queue as its own separate panel instead.
🔧T9Considered auto marking a row as landed the moment a local run passed twice in a rowchange👤 KevinAug 17, 2026 · dropped
Kevin: "no, for now I want to mark passed by hand so I can keep track of everything." Dropped in favor of keeping the pass mark a manual step, with the earlier stages still automated.
Thu Sep 3 1 shipped · newest
Product change flagged, not silently patchedA checkout test failure was traced to a real product change instead of being quietly patched to pass.👤 Kevin asked for itshipped 2026-09-03T42
The problem it solves
Chk-04 started failing against a confirmation screen whose wording no longer matched the test steps, and the easy path would have been to just update the selector and move on without asking whether the change was intentional.
What you get
The mismatch was filed as a plain question with the evidence attached, Kevin confirmed it was an intentional product change, and the test was then updated to match with a clear reason on record instead of a silent patch.
How to use it
- Notice a test failing against wording or behavior that matches the written test steps
- File the mismatch as a question with the evidence attached
- Update the test only after getting a product or bug answer back
Under the hood
The flow's assertion is compared against the exact wording quoted in the test steps file, and any mismatch that cannot be explained by a broken selector gets logged as a decision item rather than patched directly in the test.
rules/working-agreements.md · tools/board.sh
Wed Aug 26 1 shipped
Grouped telemetry inboxClaude's plain language notes are grouped by request so a session reads like a clean log.🤖 Claude suggestedshipped 2026-08-26T26
The problem it solves
Kevin reads what happened later, out of context, and a long flat wall of separate notes was hard to follow when trying to reconstruct what a whole request actually did.
What you get
Notes are now grouped by the request or batch that produced them, with a short status pill on each group, so a session's activity reads as a handful of clear chapters instead of a scroll of loose lines.
How to use it
- Open the telemetry inbox page
- Scan the grouped entries by request
- Expand a group's status pill for the full detail underneath
Under the hood
The grouping walks the raw note log and buckets consecutive entries under the request or batch marker that produced them, then renders one collapsed group per bucket with a pill summarizing its outcome.
tools/telemetry.py · tools/hq.sh
Tue Aug 25 1 shipped
Info tips on every status glyphAny small icon on the board now explains itself right where it appears.👤 Kevin asked for itshipped 2026-08-25T22
The problem it solves
A status icon on the board had no visible explanation, so Kevin had to ask what it meant even though a similar icon had already been explained once before.
What you get
Every glyph now carries a short tip describing what it means directly next to it, so a new icon never becomes a repeated question.
How to use it
- Add a new status glyph to a page
- Write a one line tip for it in the same change
- Confirm the tip shows next to the glyph on hover or tap
Under the hood
Each glyph is rendered with a small attached tip string stored alongside its definition, so the tip and the icon can never drift apart or ship separately.
tools/board.sh · tools/hq.sh
Sun Aug 23 2 shipped
Watcher tabs open togetherAll the monitoring tabs a session needs now open with one command at the very start.👤 Kevin asked for itshipped 2026-08-23T20
The problem it solves
A session sometimes started without opening any of its monitoring tabs, leaving Kevin with no board, no queue, and no log view to look at.
What you get
One script now opens every watcher tab together the moment a session begins, so there is never a session running with nothing visible on screen.
How to use it
- Run the start all watchers script at the beginning of a session
- Confirm each expected tab opened
- Leave the tabs open for the rest of the session
Under the hood
The script launches each watcher as its own terminal tab in sequence and then checks that the expected number of watcher processes are actually running before reporting the session open.
tools/hq.sh · tools/board.sh
Hotkey help coverage checkA retired keyboard shortcut can no longer sit forgotten in a watcher's help text.👤 Kevin asked for itshipped 2026-08-23T16
The problem it solves
A key that had been removed from the code still appeared in a watcher's help screen, so pressing it did nothing and left Kevin wondering if something was broken.
What you get
A coverage check now compares the help text against the actual key handlers in each watcher and fails if either one lists a key the other does not. A new key and its help entry now have to ship together.
How to use it
- Add or remove a hotkey handler in a watcher script
- Update that watcher's help text in the same change
- Run the coverage check before considering the change done
Under the hood
The check parses each watcher's handled key list and its printed help text separately, then compares the two sets and reports any key present in only one of them as a failure.
tools/board.sh · tools/hq.sh
Fri Aug 21 1 shipped
Portfolio demo pagesSample tracker and board pages can be shown off without touching any real client data.👤 Kevin asked for itshipped 2026-08-21T18
The problem it solves
There was no safe way to show what the tracker and board actually look like without exposing anything from the real client setup they run against.
What you get
A separate demo data file feeds the exact same page rendering code, so the demo looks identical to the real thing while carrying only invented sample rows.
How to use it
- Point the page script at the demo data file instead of the live one
- Open the generated page in a browser
- Share the page link on its own
Under the hood
The rendering functions take a data source path as a parameter rather than hardcoding the live file, so pointing that parameter at a sample file produces the same layout and styling with none of the underlying real content.
tools/board.sh · tools/hq.sh
Thu Aug 20 2 shipped
Rewritten session handoffThe handoff file is regenerated fresh at every session close instead of growing with old notes.👤 Kevin asked for itshipped 2026-08-20T15
The problem it solves
Old information that no longer applied was being appended to the handoff file forever, so a new session spent tokens reading history that had nothing to do with the work still in front of it.
What you get
The file now holds only current state, built fresh each time from what is actually on disk, so a new session picks up exactly what matters right now and nothing else.
How to use it
- Run the handoff script at session close with a short next session note
- Let it regenerate the file from current disk state
- Read the file at the very start of the next session
Under the hood
The script throws away the previous file entirely and writes a small template filled in from live sources: open items, the current batch state, and whatever short note was passed in for the next session, capped at a fixed line count.
tools/handoff.sh · rules/working-agreements.md
Logbook calendar viewFinished test runs are grouped by day so a week of work is visible at a glance.🤖 Claude suggestedshipped 2026-08-20T11
The problem it solves
Finding what ran on a particular day meant scrolling through one long flat log with no grouping, which made it hard to answer a simple question like what happened last Tuesday.
What you get
A calendar style view lists each day as its own row with a short count and a quick list of what passed or failed. Picking a day expands it into the full detail for that day only.
How to use it
- Open the logbook page
- Scan the calendar rows for the day in question
- Expand a day to see its full run list
Under the hood
The page reads the run history file, buckets each entry by its local calendar date, and renders one summary row per day with pass and fail counts. Expanding a row just reveals the same underlying entries filtered to that date.
tools/logbook.py · tools/hq.sh
Wed Aug 19 2 shipped
Deduplicated learning ledgerA repeated correction now strengthens an existing lesson instead of creating a duplicate one.🤖 Claude suggestedshipped 2026-08-19T12
The problem it solves
When Kevin repeated a note he had already given once before, the earlier capture was quietly failing, and logging the repeat as a brand new lesson hid that failure instead of fixing it.
What you get
The ledger now checks incoming corrections against what it already holds, and a match gets the existing row reinforced rather than duplicated. Anyone reading the ledger sees one true record per lesson, not several near copies.
How to use it
- Write the correction as a ledger row with its file and evidence
- Let the matcher check it against existing rows
- Strengthen the matching row instead of adding a new one when it finds one
Under the hood
Each new row is compared against existing ledger entries on a rough text match of the fact being captured, and a hit appends a short recurrence note to the existing row with the new date and context rather than inserting a fresh line.
tools/learn.sh · rules/working-agreements.md
Fast merge pull and paste stateSyncing the local test cache and knowing what still needs pasting both became automatic instead of manual.🤖 Claude suggestedshipped 2026-08-19T7+T8
The problem it solves
The old full pull was slow enough that it had to be banned during an active round, and the paste queue was a hand edited list that went stale within a day of being written.
What you get
A quick merge pull now takes a couple of seconds and keeps local edits intact, only flagging a true same line conflict. The paste queue is now computed from a plain file difference, so it can never disagree with what has actually changed.
How to use it
- Run the quick pull script any time, even mid round
- Check the paste state script for whatever still differs from the last landed copy
- Resolve only the conflicts it actually flags, if any
Under the hood
The pull treats the last synced copy as a shared base, the working tree as our side, and a fresh copy as the other side, merging line by line and only surfacing a real conflict when both sides touched the same line. Paste state then just diffs the working tree against that same last synced copy to build the outstanding list.
tools/quick-pull.sh · tools/paste-state.sh
Sat Aug 15 1 shipped
Parallel run lanesIndependent test flows now launch together instead of running one after another.👤 Kevin asked for itshipped 2026-08-15T5
The problem it solves
Flows that do not share state, like checkout and search tests on the same account, were still being run one at a time out of habit. That serialized dead time added up across a whole batch.
What you get
A lanes script launches several flows at once, cutting a batch's wall clock time roughly in proportion to how many lanes run together. Nothing about a single flow's own logic changes, only how many run side by side.
How to use it
- Pick the flow prefixes that don't share state
- Run the lanes script with a label and prefix for each lane
- Watch each lane's own log until all of them finish
Under the hood
The script forks one background process per lane, each running its own flow prefix against its own isolated fixtures, and waits on all of them before reporting a combined result. Cleanup steps inside each flow are already isolated to that flow, so nothing needs a shared lock.
tools/runner-swarm.sh · tools/board.sh
Fri Aug 14 1 shipped
Plain language your move panelEvery end of turn action on HQ reads as one short plain sentence instead of shorthand.👤 Kevin asked for itshipped 2026-08-14T3
The problem it solves
Early asks on the your move panel used internal shorthand that assumed context Kevin did not have. He had to stop and ask what an entry meant more than once in the same week, which slowed down the loop instead of speeding it up.
What you get
Now every entry is a plain imperative sentence under a fixed length, with any extra detail folded into short labeled segments underneath it. Kevin can scan the panel and know exactly what to do without decoding anything.
How to use it
- Open the HQ watcher tab
- Look at the your move panel near the top
- Read the one line action and the labeled detail segments below it
Under the hood
The panel reads from a small action queue file where each row stores a short imperative string plus optional labeled segments for why, what happens if yes, and what happens if no. Rendering just prints the imperative line first and the segments indented underneath, with no jargon or internal ids in the visible text.
tools/hq.sh · tools/board.sh