Recalibration
120 lessons · last retro 2026-08-27Insights actionable first · everything below is derived from the ledger, the metrics and the signals
How to read this view: "Do these next" is the only list that needs you, it is derived from everything below it, so if something is not there, nothing is waiting on you. Each item carries the exact prompt to paste to Claude (click it to copy). The sections underneath are the evidence: a 📝 prose-only repeated mistake is already turned into a "Do these next" item; a ⚙ mechanism one needs nothing.
Do these next 2 item(s), derived, the most valuable first · click a prompt to copy it
- Turn L19 into a mechanism (a check, hook or tool refusal), it recurred 2× and today it lives only as prose in mistakes.md.Prompt for Claude: Lesson L19 recurred 2x and is still prose-only in mistakes.md. Turn it into a mechanism: a check, hook or tool refusal that makes the mistake impossible, negative-test it, then mark L19 as mechanism-backed in the ledger.
- Run the session retro, it is due (0 day(s) overdue).Prompt for Claude: run the session retro
Repeated mistakes, and whether each is fixed ⚙ = a mechanism now enforces it, nothing to do · 📝 = prose only, will recur, it is in "Do these next" above
Top correction topics this week what Kevin's correction / repeat / frustration messages were about, by the lesson topic they match (T157)
Today 9 lessons · 4 corrections · 1 repeats · 0 frustration · 2 recurrences · 130 messages from Kevin
Recurred today lessons that did not stick
What Kevin flagged today correction / repeat / frustration signals in his messages
Captured today by kind
Self-healed 1
Self-improved 1
Self-fixed 2
Learned 3
Working rule 2
This week 34 lessons in 7 days
Batch retros written this week
- billing-regression-batch-2026-08-31 Tue Sep 1
- checkout-batch-2026-09-01 Mon Aug 31
- search-and-account-batch-2026-09-03 Sun Aug 30
Thu Sep 3 9 lessons
Wed Sep 2 7 lessons
Tue Sep 1 6 lessons
Mon Aug 31 6 lessons
Fri Aug 28 6 lessons
Am I improving 14 days · computed from the transcripts, the ledger and the board history
| Day | Kevin msgs | Corrections per 100 msgs | Repeats | Frustration | Captures | Recurrences | Flows passed | Batches (median min) | Retro |
|---|---|---|---|---|---|---|---|---|---|
| Fri Aug 21 | 105 | 5.7 | 1 | 1 | 6 | 1 | 36 | 0 | |
| Sat Aug 22 | 4 | 0.0 | 0 | 0 | 0 | 0 | 14 | 0 | |
| Sun Aug 23 | 2 | 0.0 | 0 | 0 | 0 | 0 | 13 | 0 | |
| Mon Aug 24 | 100 | 5.0 | 1 | 0 | 6 | 0 | 40 | 0 | |
| Tue Aug 25 | 95 | 6.3 | 0 | 1 | 6 | 1 | 42 | 0 | |
| Wed Aug 26 | 90 | 5.6 | 1 | 0 | 6 | 1 | 45 | 0 | |
| Thu Aug 27 | 115 | 3.5 | 1 | 0 | 6 | 1 | 48 | 0 | ✓ |
| Fri Aug 28 | 108 | 3.7 | 1 | 0 | 6 | 0 | 50 | 0 | |
| Sat Aug 29 | 5 | 0.0 | 0 | 0 | 0 | 0 | 15 | 0 | |
| Sun Aug 30 | 3 | 0.0 | 0 | 0 | 0 | 0 | 14 | 0 | |
| Mon Aug 31 | 120 | 2.5 | 0 | 0 | 6 | 1 | 55 | 1 (22) | |
| Tue Sep 1 | 125 | 2.4 | 1 | 0 | 6 | 1 | 60 | 1 (55) | |
| Wed Sep 2 | 118 | 1.7 | 0 | 0 | 7 | 2 | 58 | 0 | |
| Thu Sep 3 | 130 | 3.1 | 1 | 0 | 9 | 2 | 65 | 1 (39) |
How to read it: corrections per 100 of Kevin's messages should trend DOWN while captures stay steady; a repeat is a correction Kevin had to give again, so repeats and recurrences are the lessons that did not stick. Flows passed and batch minutes are the output side.
Lessons that recurred after capture fix the capture, not the symptom
Retro weekly self-healing pass · re-mines the transcripts for what live capture missed
records/retro-2026-08-27.mdLessons the retros produced 8
Retro reports
records/retro-2026-08-27.mdrecords/retro-2026-08-20.md
Data 120 ledger rows · newest first · the search box filters this table
| id | when | kind | trigger | destination | fact | evidence | ↻ |
|---|---|---|---|---|---|---|---|
| L120 | Thu Sep 3 8:10 PM | learned | self | memory/kevin-preferences.md | Kevin reads the batch retro's step by step section closest, more than the summary line, so the retro now leads with the exact sequence of what happened. | search-and-account retro draft feedback, Sep 3 | |
| L119 | Thu Sep 3 6:30 PM | agreement | domain | rules/working-agreements.md | A recurring lesson gets strengthened where it already lives, never duplicated into a second note; the guest-evidence rule has now moved three times toward a mechanism instead of a reminder. | search-and-account retro prep, Sep 3 | |
| L118 | Thu Sep 3 4:55 PM | learned | domain | app-notes/search.md | Search saved views ignore a renamed filter until the page is refreshed, so a flow that renames a filter and immediately checks a saved view sees the old name. | srch-02 saved-view rename-lag observed | |
| L117 | Thu Sep 3 3:20 PM | fixed | self | rules/mistakes.md | An account merge flow asserted the merged tag count in the act section instead of the assert section, which meant a bad count would have thrown before the real check ran. | acc-07 assertion moved out of the act section | |
| L116 | Thu Sep 3 1:50 PM | improved | self | tools/hq.sh | The right-now panel was clearing a row the instant a background run started instead of when it finished, making an in-flight verification look like idle time. | right-now panel timing fix, Sep 3 | |
| L115 | Thu Sep 3 12:15 PM | agreement | domain | rules/working-agreements.md | The search-and-account batch closed within the hour by clustering failures by shared method first; eleven of thirty eight failures traced to one broken selector. | search-and-account batch census, Sep 3 | |
| L114 | Thu Sep 3 10:45 AM | healed | frustration | rules/assertions.md | Kevin flagged an assertion on the search results count that only checked the number was greater than zero, when the flow was meant to prove an exact filtered count. | Kevin, Sep 3: 'greater than zero proves almost nothing here' | |
| L113 | Thu Sep 3 9:30 AM | learned | domain | app-notes/account.md | Account tag removal requires a confirmation click on a second, easy-to-miss modal, not just the initial delete icon, and skipping it leaves the tag in place. | acc-07 tag-removal second-modal observed | |
| L112 | Thu Sep 3 8:15 AM | fixed | self | rules/selectors.md | A search-and-account batch flow used a positional selector on the account tag list without any justification comment, which the pre-merge check now blocks outright. | srch-02 tag-list selector blocked pre-merge, Sep 3 | |
| L111 | Wed Sep 2 7:20 PM | fixed | self | rules/timing.md | A settings flow read a saved value immediately after a page reload before the reload's own hydration finished, comparing against a briefly empty field. | set-01 reload-hydration race in trace | |
| L110 | Wed Sep 2 4:50 PM | learned | domain | app-notes/account.md | Account tag assignment allows duplicate tag names on the same account, silently, which a flow asserting tag uniqueness will never actually observe. | acc-07 duplicate-tag behavior confirmed | |
| L109 | Wed Sep 2 2:40 PM | agreement | domain | rules/working-agreements.md | Verification starts the moment a fix is written, never batched to the end of a session; a free lane sitting idle while a fix waits is wasted capacity. | search-and-account batch prep notes, Sep 2 | |
| L108 | Wed Sep 2 12:55 PM | improved | self | tools/paste-state.sh | A landed page object still showed as outstanding because its checksum was computed before the last edit was saved; recomputing it after save fixed the mismatch. | paste-state checksum timing fix, Sep 2 | |
| L107 | Wed Sep 2 11:10 AM | healed | frustration | rules/working-agreements.md | Kevin pointed out a board row still read investigating a full day after the fix had shipped, because the note only updates on a status change, not on every new fact learned. | Kevin, Sep 2: 'is this still accurate, or just old' | |
| L106 | Wed Sep 2 9:40 AM | learned | domain | app-notes/search.md | Search export files name themselves with the query text, not a timestamp, so two searches with the same term overwrite each other's export unless the flow renames between them. | srch-02 export filename collision observed | |
| L105 | Wed Sep 2 8:15 AM | fixed | self | rules/mistakes.md | A search flow's while loop clearing saved filters had no attempt cap, mirroring the same gap fixed in the billing cleanup loop days earlier; the fix applied the same cap. | srch-02 while-loop cap added, matches earlier billing fix | |
| L104 | Tue Sep 1 6:20 PM | learned | domain | app-notes/checkout.md | Checkout order history reflects a cancelled order for up to a minute before the status label updates, so a flow checking status right after cancel can read a stale label. | chk-11 cancel-status delay observed | |
| L103 | Tue Sep 1 3:45 PM | agreement | domain | rules/working-agreements.md | The checkout batch clustered eleven failures by their shared promo-field method before reading a single trace, and one broken wait explained all eleven at once. | checkout batch census, Sep 1 | |
| L102 | Tue Sep 1 1:15 PM | healed | frustration | rules/assertions.md | Kevin flagged a checkout assertion checking only that the total field was visible, not what it said, on a flow meant to prove a discount actually applied. | Kevin, Sep 1: 'visible proves nothing, check the number' | |
| L101 | Tue Sep 1 11:30 AM | improved | self | skills/flow-work.md | Reusing the existing login-to-checkout sequence instead of writing a fresh setup for a new promo flow avoided reintroducing a wait bug that sequence had already fixed. | checkout batch flow creation, Sep 1 | |
| L100 | Tue Sep 1 9:45 AM | learned | domain | app-notes/checkout.md | The checkout page's saved payment method list orders by most recently used, not most recently added, which changes every time a returning flow reuses an old card. | chk-04 saved-payment ordering observed | |
| L99 | Tue Sep 1 8:10 AM | fixed | self | rules/timing.md | A checkout flow's flake looked like app validation lag, but the trace showed a wait tied to the wrong network call; scoping the wait to the validation response fixed it. | chk-11 wait rescoped to the validation response | |
| L98 | Mon Aug 31 6:45 PM | learned | domain | app-notes/account.md | Account billing history exports omit refunded transactions unless a separate filter is turned on, which is easy to miss when comparing totals by eye. | acc-07 export refund-filter default | |
| L97 | Mon Aug 31 4:05 PM | agreement | domain | rules/working-agreements.md | The billing regression batch closed the moment its last flow was marked passed, not when the fixes were merely written; the batch clock only stops on that event. | billing regression batch close, Aug 31 | |
| L96 | Mon Aug 31 1:40 PM | healed | frustration | rules/selectors.md | Kevin pointed out the billing summary selector still matched by row position after the earlier fix, because a second flow had copied the old version before the fix landed. | Kevin, Aug 31: 'that one's still using the old selector, it never got the fix' | |
| L95 | Mon Aug 31 11:55 AM | improved | self | memory/parallel-runs.md | Pre-building the five billing fixtures once and sharing them across the batch's flows removed a repeated setup step from every single one of them. | billing regression batch, fixture reuse Aug 31 | |
| L94 | Mon Aug 31 10:10 AM | learned | domain | app-notes/checkout.md | The checkout gift wrap option adds a flat fee that is not itemized separately; it folds into the shipping line, which surprised an assertion expecting its own row. | chk-04 gift-wrap fee folded into shipping | |
| L93 | Mon Aug 31 8:25 AM | fixed | self | rules/mistakes.md | A billing regression flow's cleanup loop tried to delete test invoices with no attempt cap, and one server hiccup would have looped it indefinitely instead of failing. | bil-19 cleanup loop safety cap added | |
| L92 | Fri Aug 28 6:30 PM | learned | domain | app-notes/account.md | Account two factor setup requires the confirmation code to be entered within ninety seconds, not the five minutes the help text implies. | acc-07 two-factor code expiry measured | |
| L91 | Fri Aug 28 3:50 PM | agreement | domain | rules/working-agreements.md | A failure matching an already filed report is logged as an attach line, not a brand new report; one bug routinely has several flows failing against it. | billing invoice-rounding bug, second flow attached | |
| L90 | Fri Aug 28 1:20 PM | improved | self | tools/runner-swarm.sh | Giving each runner launch its own pod id instead of sharing one meant a second run no longer silently replaced the first mid-batch. | runner swarm pod-id fix, billing batch Aug 28 | |
| L89 | Fri Aug 28 11:35 AM | learned | domain | app-notes/checkout.md | The checkout page shows an estimated tax figure that can differ from the final tax on the confirmation page by a cent or two due to rounding, which is expected, not a bug. | chk-11 tax-rounding difference confirmed as expected | |
| L88 | Fri Aug 28 9:50 AM | healed | correction | memory/evidence-as-the-right-user.md | Kevin caught the guest-view evidence mistake a third time on a different flow; the session-start check landed the same day so it stops recurring by mechanism, not by memory. | Kevin, Aug 28: 'third time, this needs to be automatic now' | 1 |
| L87 | Fri Aug 28 8:15 AM | fixed | self | rules/timing.md | A notifications flow's toPass block had a two minute timeout for a state that only ever needed ten seconds, which quietly hid a real regression on one run. | ntf-08 toPass timeout right-sized | |
| L86 | Thu Aug 27 7:10 PM | fixed | self | rules/mistakes.md | An admin flow's cleanup step deleted a test account by name instead of by id, which once matched a teammate's leftover account with the same name. | adm-03 cleanup collision found in trace | |
| L85 | Thu Aug 27 4:50 PM | agreement | retro | memory/rerun-before-investigating.md | The retro reaffirmed that the re-run-first rule covers only the first handoff of a batch; later cycles are verifying a fix, not re-running to rule out load. | retro Aug 27, rerun-scope clarified again | |
| L84 | Thu Aug 27 2:30 PM | agreement | retro | rules/working-agreements.md | The retro tightened the needs-rerun rule so a row only lands there behind an actual recorded pass, never behind a hypothesis from a matching cluster. | retro Aug 27, needs-rerun evidence gate | |
| L83 | Thu Aug 27 12:00 PM | learned | domain | app-notes/search.md | Search result highlighting only marks the first matched term per row, not every occurrence, so a flow counting highlighted spans will always undercount rows with repeated terms. | srch-02 highlight-count observed live | |
| L82 | Thu Aug 27 10:05 AM | agreement | retro | memory/kevin-preferences.md | The retro confirmed Kevin still wants every proposal delivered with a plain benefit line and a technical one underneath it, no exceptions for small changes. | retro Aug 27, dual-explanation check reaffirmed | |
| L81 | Thu Aug 27 8:20 AM | agreement | retro | rules/working-agreements.md | The second retro found the guest-user evidence mistake had recurred once more after being written down; the fix moved the rule into a session-start check instead of trusting memory alone. | retro Aug 27, evidence-as-right-user recurrence | |
| L80 | Wed Aug 26 6:20 PM | learned | domain | app-notes/account.md | The account merge tool only appears for accounts created before a specific date, so a flow testing it against a freshly created account will never see the option at all. | acc-07 merge-tool visibility date cutoff | |
| L79 | Wed Aug 26 3:40 PM | agreement | domain | rules/working-agreements.md | A batch's retro captures why it took as long as it did, including Claude's own wrong turns, not only what the code fix was. | search batch retro draft, Aug 26 | |
| L78 | Wed Aug 26 1:05 PM | improved | self | memory/parallel-runs.md | Screening a batch by which flows touch an internal-only host before assigning lanes routed two flows to the runner immediately instead of after a failed local attempt. | search batch routing, Aug 26 | |
| L77 | Wed Aug 26 11:15 AM | fixed | self | rules/timing.md | A reports flow used a static five second wait for a chart to render with no comment explaining why; the fix waits on the chart's own loaded class and removes the guesswork. | rpt-12 unexplained static wait replaced | |
| L76 | Wed Aug 26 9:35 AM | healed | frustration | rules/selectors.md | Kevin flagged a duplicated getByText selector across five flows that all broke the same way when a label's wording changed once. | Kevin, Aug 26: 'five flows broke on one wording change, that's the actual lesson' | |
| L75 | Wed Aug 26 8:10 AM | learned | domain | app-notes/checkout.md | The checkout discount summary line disappears entirely when the discount brings the total to zero, rather than showing a zero value, which broke an assertion expecting the line to remain visible. | chk-04 zero-total line-disappear observed | |
| L74 | Tue Aug 25 6:40 PM | fixed | self | rules/mistakes.md | A billing export flow's empty catch block around an optional dialog was hiding a real timeout on three separate runs before anyone read the trace closely. | bil-19 empty catch block replaced with a state check | |
| L73 | Tue Aug 25 4:00 PM | agreement | domain | rules/working-agreements.md | A rule that applies to a set of things is executed by enumerating that set, member by member, never by fixing the one item in hand and assuming the rest comply. | search-sort sweep across four flows, Aug 25 | |
| L72 | Tue Aug 25 1:30 PM | learned | domain | app-notes/account.md | The account activity log only shows the last ninety days by default; older entries exist but require an explicit date range to appear. | acc-07 activity-log date-range default | |
| L71 | Tue Aug 25 11:45 AM | improved | self | tools/hotkey-test.sh | A new panel key had no entry in its watcher's help screen, which the coverage check now catches before it ships instead of after Kevin asks about it. | hotkey coverage check extended, Aug 25 | |
| L70 | Tue Aug 25 10:00 AM | healed | domain | app-notes/search.md | Search pagination resets to page one on any filter change, so a flow that expects to stay on page three after adding a filter is testing behavior the app does not have. | srch-02 pagination reset confirmed | |
| L69 | Tue Aug 25 8:25 AM | fixed | self | rules/assertions.md | A settings flow asserted the toggle's visual state instead of the underlying saved value, so a slow render could show the wrong toggle position while the save had actually gone through. | set-01 visual-vs-saved-state mismatch | |
| L68 | Mon Aug 24 6:00 PM | learned | domain | app-notes/checkout.md | The checkout billing address can differ from the shipping address only when a separate billing toggle is explicitly checked; otherwise the shipping address silently overwrites it on submit. | chk-11 address-overwrite observed | |
| L67 | Mon Aug 24 3:30 PM | agreement | domain | rules/working-agreements.md | A wording fix gets applied as a sweep across every surface that shows it, never as a single spot fix; a stale label elsewhere would just reappear later. | admin table label sweep, four surfaces found | |
| L66 | Mon Aug 24 1:00 PM | improved | self | tools/board.sh | The board write for a status change was happening at the end of the turn instead of the moment the state changed, so a live investigation looked idle from outside. | board timing fix, admin batch, Aug 24 | |
| L65 | Mon Aug 24 11:20 AM | learned | domain | app-notes/account.md | Account password reset links expire after fifteen minutes, shorter than the session timeout, so a flow that pauses between requesting and using the link can find it already dead. | acc-07 reset-link expiry measured | |
| L64 | Mon Aug 24 9:45 AM | healed | frustration | memory/evidence-as-the-right-user.md | A permissions flow's evidence came from an admin session even though the flow itself runs as a limited user, which is exactly the same mistake the ledger already warns about. | Kevin, Aug 24: 'wrong user again, we wrote this down already' | 1 |
| L63 | Mon Aug 24 8:15 AM | fixed | self | rules/timing.md | A notifications flow clicked mark-as-read before the unread count finished its own re-render, so the badge sometimes still showed the old number after the click. | ntf-08 badge re-render race in trace | |
| L62 | Fri Aug 21 6:35 PM | learned | domain | app-notes/search.md | Search saved filters persist per browser tab, not per account, so two tabs on the same account can show different active filters at once. | srch-02 per-tab filter state observed | |
| L61 | Fri Aug 21 3:55 PM | agreement | domain | rules/working-agreements.md | A repeated instruction from Kevin means the earlier capture of it failed; the fix is to strengthen that capture, never write a second note saying the same thing. | notifications sweep, second time the badge rule came up | |
| L60 | Fri Aug 21 1:25 PM | improved | self | skills/bulk-review.md | Grouping a batch of nineteen flows by their shared page object before reviewing found one broken method behind eleven of the failures in a single pass. | bulk review census, notifications batch, Aug 21 | |
| L59 | Fri Aug 21 11:40 AM | learned | domain | app-notes/checkout.md | Checkout order confirmation emails are queued, not sent immediately, so a flow checking for the email right after submit needs to wait on the queue, not the page. | chk-04 email-queue delay observed | |
| L58 | Fri Aug 21 9:50 AM | fixed | self | rules/mistakes.md | A billing flow read the invoice total from a cached page state before a page reload finished, so it compared the new total against the old page's memory. | bil-19 stale-page-state trace | |
| L57 | Fri Aug 21 8:20 AM | healed | frustration | rules/selectors.md | Kevin found a first-of-type selector on the search results list with no justification; the census showed four other flows had the same unjustified pattern copied from it. | Kevin, Aug 21: 'this got copied everywhere, check them all' | |
| L56 | Thu Aug 20 7:45 PM | learned | correction | app-notes/account.md | Kevin corrected an assumption that account deactivation is immediate; it actually queues for thirty minutes, during which the account still shows as active. | Kevin, Aug 20: 'it's queued, not instant, check the timestamp' | |
| L55 | Thu Aug 20 5:15 PM | agreement | retro | rules/working-agreements.md | The retro decided that a batch is only closed once every flow in it is genuinely passed on the platform, not merely reattempted; two batches had been marked done early on a hopeful reattempt. | retro Aug 20, batch-close criteria tightened | |
| L54 | Thu Aug 20 2:50 PM | fixed | self | rules/timing.md | A reports flow's while loop deleting old exports had no attempt counter, so a server hiccup would have looped indefinitely instead of failing loudly. | rpt-12 while-loop safety counter added | |
| L53 | Thu Aug 20 12:40 PM | agreement | retro | rules/assertions.md | The retro flagged three flows that asserted an element was present rather than what it said; all three got rewritten the same day to check the actual text or value. | retro Aug 20, presence-only assertion sweep | |
| L52 | Thu Aug 20 11:00 AM | learned | domain | app-notes/checkout.md | The checkout gift message field has a two hundred character limit enforced only on submit, not on keystroke, so a flow typing past the limit sees no visible truncation until it submits. | chk-11 gift-message limit observed | |
| L51 | Thu Aug 20 9:30 AM | agreement | retro | memory/parallel-runs.md | The retro traced three slow batches to serial runs on flows that had no shared account or fixture dependency at all; the fix was simply to stop assuming they did. | retro Aug 20, lane audit | |
| L50 | Thu Aug 20 8:10 AM | agreement | retro | rules/working-agreements.md | The week's retro found that verification was still happening one fix at a time; the rule became that a free lane gets filled the moment a fix is written, never batched to the end. | retro Aug 20, verification-lag pattern | |
| L49 | Wed Aug 19 6:15 PM | improved | self | memory/parallel-runs.md | Routing the two team-storage-fixture flows to the runner while the other four ran locally kept all six moving at once instead of six serial runs. | billing batch routing, Aug 19 | |
| L48 | Wed Aug 19 3:35 PM | learned | domain | app-notes/account.md | Account onboarding requires the phone step even when a user signs up through a work email invite, contrary to the assumption that invited users skip it. | onb-05 phone-step confirmed for invited users | |
| L47 | Wed Aug 19 1:10 PM | fixed | self | rules/timing.md | A settings save flow waited on a toast that fades in over an animation, and reading its text before the fade completed returned an empty string. | set-01 toast fade-in timing trace | 1 |
| L46 | Wed Aug 19 11:25 AM | healed | frustration | rules/selectors.md | Kevin pointed out an nth-child selector on the admin permissions table with no justification comment; the rule already required one for every usage, not just the first. | Kevin, Aug 19: 'each one needs its own comment, we've said this' | |
| L45 | Wed Aug 19 9:45 AM | fixed | self | rules/mistakes.md | A reports export flow matched the downloaded filename against a hardcoded date, which broke the moment the run crossed midnight. | rpt-12 filename date mismatch after a late run | |
| L44 | Wed Aug 19 8:15 AM | learned | domain | app-notes/checkout.md | The checkout order summary total recalculates on a five hundred millisecond debounce after any quantity change, so reading it immediately after an edit returns the previous total. | chk-04 debounce timing measured live | |
| L43 | Tue Aug 18 6:30 PM | agreement | domain | rules/working-agreements.md | Kevin's platform run is the final word on a fix; a runner pass on the same file only proves the fix survives one load pattern, not that it is done. | billing regression note, Aug 18 | |
| L42 | Tue Aug 18 3:50 PM | improved | self | skills/flow-work.md | Extracting the login-to-billing chain used by four flows into one shared sequence removed a duplicated four step setup from each of them. | billing sequence extraction, Aug 18 | |
| L41 | Tue Aug 18 1:20 PM | learned | domain | app-notes/search.md | Search autocomplete suggestions only populate after the third typed character, so a flow checking suggestions after two characters will always see an empty list. | srch-02 autocomplete threshold confirmed | |
| L40 | Tue Aug 18 11:35 AM | fixed | self | rules/timing.md | A login flow clicked submit before the password field's own debounce validation cleared, so the click sometimes landed on a disabled button. | log-02 disabled-button click in trace | |
| L39 | Tue Aug 18 9:55 AM | healed | correction | rules/selectors.md | Kevin caught a last-of-type selector on the notifications list; the fix matches the notification by its data id instead of its position in the list. | correction on ntf-08 review, Aug 18 | |
| L38 | Tue Aug 18 8:25 AM | learned | domain | app-notes/account.md | The account profile photo upload accepts a file up to five megabytes, silently truncating anything larger to a generic placeholder with no error shown to the user. | prf-03 large-file upload observed live | |
| L37 | Mon Aug 17 6:10 PM | agreement | domain | rules/working-agreements.md | A product-change-versus-bug question gets filed for Kevin to answer, not guessed at; two such calls sat wrong for a day before this became standard. | settings toggle behavior filed as a decision, Aug 17 | |
| L36 | Mon Aug 17 3:30 PM | improved | self | tools/quick-pull.sh | The merge step for a shared page object was landing a teammate's rename on top of an already-renamed local copy, producing a silent duplicate method. | quick pull dry run on the account page object | |
| L35 | Mon Aug 17 1:05 PM | learned | domain | app-notes/checkout.md | The checkout page's shipping method list reorders itself by estimated delivery date once an address is entered, so a flow selecting by position picks a different option every run. | chk-11 shipping-list reorder confirmed | |
| L34 | Mon Aug 17 11:20 AM | healed | frustration | memory/evidence-as-the-right-user.md | Evidence for a guest account view has to come from a guest login; a default-user page dump said nothing about what the guest actually sees on the billing page. | Kevin, Aug 17: 'that's not the guest screen, why would that prove anything' | 2 |
| L33 | Mon Aug 17 9:40 AM | fixed | self | rules/assertions.md | An admin flow asserted the presence of a status badge instead of its text, which would have passed even if the badge read the wrong status. | adm-03 assertion rewritten to check text | |
| L32 | Mon Aug 17 8:10 AM | learned | domain | app-notes/search.md | The search sort dropdown resets to relevance every time the query text changes, even if a user picked a different sort a moment earlier. | srch-02 sort-reset observed live | |
| L31 | Fri Aug 14 6:20 PM | agreement | domain | rules/working-agreements.md | A batch investigation starts with a plain re-run before any code change; a suite that pushes many flows through the app at once manufactures failures no fix would touch. | billing batch, five of nine first failures cleared on re-run | |
| L30 | Fri Aug 14 3:45 PM | improved | self | memory/parallel-runs.md | Splitting a nine flow queue into three lanes of three instead of running it serially cut the batch from about seventy minutes to under thirty. | checkout batch lane timing, Aug 14 | |
| L29 | Fri Aug 14 1:15 PM | learned | domain | app-notes/account.md | The account deletion confirmation modal requires typing the account email exactly, case sensitive, before the delete button enables. | acc-07 modal enable-state check | |
| L28 | Fri Aug 14 11:30 AM | fixed | self | rules/timing.md | An onboarding wizard step advanced before the address sub-step finished its own validation, so the next step sometimes rendered with stale field state. | onb-05 trace, step transition raced validation | |
| L27 | Fri Aug 14 9:50 AM | healed | correction | rules/selectors.md | Kevin flagged a first-of-type selector on the reports table; the fix scopes the row by its report id attribute instead of position. | correction on rpt-12 review, Aug 14 | |
| L26 | Fri Aug 14 8:20 AM | learned | domain | app-notes/checkout.md | The checkout promo field trims leading and trailing spaces before validating, so a code copied with a trailing space still applies correctly and a flow should not strip it itself first. | chk-04 trim-before-validate check confirmed live | |
| L25 | Thu Aug 13 6:30 PM | learned | backfill | app-notes/search.md | Search result counts include archived items unless a filter explicitly excludes them, which is not the same as what the visible list shows. | srch-02 archived-count mismatch | |
| L24 | Thu Aug 13 3:40 PM | healed | backfill | rules/timing.md | A settings flow waited on a spinner that never appears for fast connections, so the wait sometimes ran the full timeout for nothing; waiting on the saved-confirmation text instead fixed it. | set-01 spinner-wait note | |
| L23 | Thu Aug 13 12:50 PM | agreement | backfill | rules/working-agreements.md | The board is updated the moment a flow's state changes, not batched to the end of the turn; a fifteen minute investigation with no board entry looked like nothing happened. | old note on stale board entries | |
| L22 | Thu Aug 13 10:20 AM | learned | backfill | app-notes/checkout.md | The checkout promo field silently caps at one active code; applying a second code replaces the first without any visible error, so a flow expecting two applied codes will always be wrong. | chk-11 second-code replace note | |
| L21 | Thu Aug 13 8:25 AM | improved | backfill | skills/bulk-review.md | Quoting the source step verbatim in the review report made a coverage gap obvious at a glance; a paraphrased step had been hiding a missing assertion for two batches. | bulk review notes, onboarding batch | |
| L20 | Wed Aug 12 6:00 PM | learned | backfill | app-notes/account.md | Exporting an account's activity log names the file with the account id, not the account name, so a flow matching on filename by name always missed. | exp-02 filename mismatch note | |
| L19 | Wed Aug 12 3:15 PM | fixed | backfill | rules/mistakes.md | A billing invoice total was read before the currency converter finished settling, giving a stale number; the fix waits for the converter's loading class to clear. | bil-19 stale-total read, second occurrence this week | 2 |
| L18 | Wed Aug 12 12:15 PM | healed | backfill | rules/selectors.md | The profile page's save button shares a label with the billing page's save button; a flow without a page-scoped selector clicked the wrong one twice. | prf-03 wrong-button click found in trace | |
| L17 | Wed Aug 12 10:00 AM | fixed | backfill | rules/mistakes.md | A create-project flow used the deprecated typing method to fill the project name field, which dropped characters under load; switching to fill removed the flake. | crt-09 dropped-character trace | |
| L16 | Wed Aug 12 8:15 AM | learned | backfill | app-notes/search.md | The search filter panel closes itself if the results list re-renders underneath it, so a flow must reopen the panel after every filter change instead of assuming it stays open. | srch-02 filter-panel close note | |
| L15 | Tue Aug 11 6:45 PM | healed | backfill | rules/timing.md | A login flow's lockout check used a try and catch around an expected error, which hid a real timeout for three runs before anyone noticed. | log-02 empty catch block found in review | |
| L14 | Tue Aug 11 3:30 PM | agreement | backfill | rules/working-agreements.md | Times shown to Kevin are twelve hour with AM or PM everywhere, never twenty four hour; a report using military time had to be redone. | old report reformatted after the fact | |
| L13 | Tue Aug 11 12:45 PM | improved | backfill | skills/flow-work.md | Reading the sibling flow's page object methods in full before writing a new one saved a rewrite; two flows had already solved the same login-to-settings path. | settings flow-creation notes, set-01 | |
| L12 | Tue Aug 11 10:15 AM | learned | backfill | app-notes/account.md | The notifications badge counts unread items only, not the total list length, so an assertion comparing it to the row count was comparing the wrong two numbers. | ntf-08 badge count mismatch note | |
| L11 | Tue Aug 11 8:30 AM | healed | backfill | rules/assertions.md | An admin table flow asserted a row was present rather than checking its status value, which let a wrong status slip through review undetected. | adm-03 review comment on presence-only assertion | |
| L10 | Mon Aug 10 6:20 PM | learned | backfill | app-notes/checkout.md | Cart contents persist across a login redirect on the checkout page, so a flow that expects an empty cart after login is testing the wrong assumption. | chk-04 cart-state note from onboarding week | |
| L9 | Mon Aug 10 3:00 PM | fixed | backfill | rules/mistakes.md | A reports flow asserted a total before the export finished writing, so it read a partial file; the fix waits for the download event, not a fixed delay. | rpt-12 partial csv caught in an early trace | 3 |
| L8 | Mon Aug 10 12:30 PM | learned | backfill | app-notes/account.md | The account address form validates each field on blur, not on submit, so an assertion right after fill without a blur event always read the old error state. | acc-07 assertion timing note | |
| L7 | Mon Aug 10 10:05 AM | healed | backfill | rules/timing.md | A fixed three second wait on the onboarding welcome screen was covering for an animation, not a network call; naming the mechanism in the comment made the real cause obvious. | onb-05 wait comment rewritten after a review pass | |
| L6 | Mon Aug 10 8:20 AM | improved | backfill | memory/parallel-runs.md | Running flows one at a time was the biggest time sink in early batches; three to four lanes at once cut a ten-flow queue from two hours to under forty minutes. | onboarding batch timing notes from the first week | |
| L5 | Fri Aug 7 5:40 PM | agreement | backfill | rules/working-agreements.md | Nothing unverified reaches Kevin; a fix without a passing run attached is not ready to hand over, even under time pressure. | old note from the account batch, pre-dates the current ledger | |
| L4 | Fri Aug 7 2:15 PM | learned | backfill | app-notes/search.md | Search results default to relevance sort, not recency; a flow that hardcoded a date-sorted expectation was wrong about the app, not broken. | srch-02 assertion mismatch traced to sort default | |
| L3 | Fri Aug 7 11:00 AM | fixed | backfill | rules/selectors.md | A positional selector on the billing invoice list was the actual flake, not the app; the rows reorder while the currency converter is still running. | bil-19 trace showed two rows swap mid-run | 3 |
| L2 | Fri Aug 7 9:30 AM | healed | backfill | rules/selectors.md | A positional selector on the checkout summary row was flaky because the row order changes once a promo code is applied. | chk-11 failed twice with the same reordering signature | |
| L1 | Fri Aug 7 8:10 AM | learned | backfill | app-notes/checkout.md | The checkout promo field only validates on blur, not on every keystroke; a wait tied to input events fired before the discount ever applied. | old notes from the first week on chk-04 |
Files: run-status/learnings.tsv (written by learn.sh add/recur, enforced by the Stop hook), learning-recur.log, learning-metrics.tsv (learning-metrics.py, daily), learning-signals.log (prompt hook). All protected from retention.