ChangelogWhat shipped, in the words it shipped with.
OutcomeFactory runs its own loop on itself. Every change lands with a sentence saying what it does, and this is the list of those sentences, newest first.
22 October 2026- The trace page and "Suggest a plan" run roster agents, so nothing on the page needs eve#614
21 October 2026- The image rebuilds whenever any edition caller changes#612
- A dedicated image builds, boots as its edition, and refuses to start half-configured#611
- A dedicated instance is the same image under a record#610
- Every name with a person behind it opens their card#609
- A person has a card, each name is drawn once, and Kestrel's sessions have people#608
- A room may stand for a team it is not#607
20 October 2026- A login may be nobody here: leavers stop asking, one press, undoable#606
- An unnamed login is one chip that asks, with a dot saying a link is wanted#605
- A GitHub login is named where it is seen, and in one place for everyone#604
- A work page lists the sessions that built it, and a ticket key links to its ticket#603
- A Work page row wears the coding agent's own mark, as its card does#602
- A room's work says what belongs there and what is its team's elsewhere#599
- A work card names the person, wears the agent's own mark, and opens where you point#601
- A room places work by the ticket in its branch or title, never its description#600
- A room holds the work that names its tickets, and the sessions on their branches#598
- A room shows its team's work once somebody says which login is whose#597
19 October 2026- The priority list's fold rule is pinned, and its button says it is folded#596
- A factor's label drops a duplicate column's (2)#595
- The priority list quotes the source's own prioritisation fields#594
- The portfolio's tiles drill down, and unsized work folds away#593
- The demand chart fits the demand, and the portfolio lists its timing conflicts#592
- The portfolio draws its demand, its heat and what it has cost#591
- A portfolio is prioritised by dragging, and the line says what fits#590
- An import report says what is missing, not what is there#589
- Sample people stand in for an org graph, and say so#588
- A file-imported portfolio reads its own day and its own change or run#587
15 October 2026- The Kestrel demo bills Devin, in ACUs#586
13 October 2026- A room's spend is AI and people, added#584
- Kestrel's rooms are full: Insurance, a 149-person Everyday Money, sessions on PRs, and capacity plans#583
- The site shows the product running, not a picture of it#582
- Devin is a runner, and a watch may be read rather than streamed#581
12 October 2026- A room's spend weighs a session by its whole life, so the tile and the page agree#579
- A room's goals are all on its map, and the views lose a blank row#575
- A goal may be judged by the sum of the numbers watched beside it#576
- A room's spend follows its work, not its repositories#577
- A sparkline's hover card stays inside the column#578
- A goal's page names the goals above it once#573
- A room's links live on its Overview#574
- A reading filed in error may be withdrawn, and the trail keeps it#572
- A person row draws the human's face, not the row's#568
- An admin may remove a signal whose verdict was the mistake#570
- A room's Shipped tile and its Work page count the same thing#571
- Nothing under a room's name reads the company#569
- A room opens on what moved, and what is next#563
- A room keeps its decisions and its links#566
- Kestrel's rooms are fed: repositories and projects attached, sessions standing somewhere#567
- A room says what it costs and who works there#565
- A watched number may be kept by hand, an assistant may keep it, and a month's total is stale on the month's terms#562
- The inline-subquery guard sees exists and in, not only (select#559
- A room has a Work page: its weeks, its work under cuts, and the sessions that built it#564
- A goal is not judged before it started#560
- A goal id a caller sends is found under its org before a trace run names it#558
- A room says where you are on every page, with a way out#561
- A room draws its own goal as a north star, and its other goals beneath it#557
- A room's top goals are read with a join, not an ambiguous subquery#556
- Where work starts may be read for one room#554
- A room may keep a goal of its own, and an unlinked goal lands where we chose#553
- Analytics knows our own people from a customer's, and nothing more about either#555
11 October 2026- A period's reading is dated at its end, and a stored age is a date#551
- Home says where your attention went, and suggests what to do about it#552
- A leadership summary can be shared, and Slack only carries the one the server wrote#550
- A goal drafted in a room returns to the room, which lists what your plans will place there#548
- A room may be called something other than its source calls it#549
- The composer stops spending height it has nothing to put in#547
- A room keeps proposing: its work is read again whenever something lands#546
- Plan reads a room: its own work, its own goals, and a goal it proposes lands there#545
- A later choice of owner withdraws a handover parked for somebody who has not signed in#544
- A room draws its own activity band: decisions take the brand ramp, volume a grey one#543
- Work reads in GitHub's colours, and a room's rows open, preview and sort by time#542
- A room names its sources: a repository's work, its sessions, and a feedback connection land there#534
- The Forge app's icons are files this deployment serves#501
- The portfolio on one page, and a press that hands the write-up to Claude, ChatGPT or Copilot#541
- A scenario is a plan, and OutcomeFactory computes what it would do#540
- A portfolio is read here and written up anywhere#539
- A plan says yes, no or not yet, by name#538
- Supply is what the org graph confirms, as it records it#537
- Capacity is read, never typed, and it never judges a goal#535
- Jira says what is planned, in the file import's words#536
- A tenant may wear TeamForm's frame, and the frame reaches nothing a page draws#533
10 October 2026- An import may make goals when a person ticks it, a file's parent link is a link, and suggestions accept in one press#531
- A demo may be filled around a company's own goals#532
8 October 2026- Spreadsheet work import, parts 3 and 4: the import screens, and types as suggested goals#530
- Spreadsheet work import, part 2: file sources, the one commit, and import_work over MCP#529
- Spreadsheet work import, part 1: the engine, reader, Jira preset, re-import planner and data-quality report#528
- Dependency vulnerabilities fixed#527
7 October 2026- A goal's chart says where its readings are heading, and colours nothing#526
- The share no work reaches opens onto the AI sessions behind it, and you can say what yours was for#524
- Kestrel ships at a bank's scale: fifty-five engineers, a steady stream of pull requests#525
- Every source in the measure picker wears its system's mark#522
- Pay arrives as pools from a program the customer runs, and Kestrel carries the whole chain#521
- Send to be built says it sends new work, not the row above it#523
- People's time is priced from pull requests, at rates an owner sets#520
- Kestrel's estate: 28 connected systems behind the demo, and a year of what they read#519
- Dependency vulnerabilities fixed#518
1 October 2026- The empty box may offer a goal, and says what it came from#515
- A PostHog bucket still running is not a reading#514
- A session whose pull request settled is not drawn as one that opened nothing#516
- Next stays on the composer's row, and the Plan foot says less#512
- A piece of work has a page, and every row in flight opens it#511
- The empty composer asks about what you hold#513
- A group whose goal was withdrawn is drawn as what no goal fits#510
- Every item is drawn on its own row, beside why it points where it does#509
- Every item is read on its own words, and a group is what its items agree on#504
- A click away saves an edit, or says what it is missing#507
- A hovered link is already the page, and a goal-to-goal click lands at once#508
- Plan mode looks the same in every box that offers it#506
- Small type beside a big figure, and beside a button, sits on one baseline#505
30 September 2026- A room is made, not implied, and its row takes you into it#503
- Design system, part 1: one menu, one segmented control, one select, and fewer words#502
- A sample goal can be edited, and stays a sample#500
- A goal is not judged at its start, and setup asks whether the company runs OKRs#494
- An area's page lists the work done there, and a repository is placed by where its work was filed#499
- A dragged group lands on the goal under the pointer, and picking it up moves nothing#498
- Each unit of work is filed where it touched, never where it lives#497
- The goal tree judges goals as the plan leaves them#496
- When no goal fits, the mapper proposes a few, and they reach back to the work#495
- A goal written down after its work began is offered a start, not a link#493
- The goal tree sits beside a plan's groups, and groups are dragged onto goals#492
- White: one sidebar, clean whites, and a benchmark path with no dead ends#490
- The mapper offers the goal work served#491
- A room shows who is in it, wears its tile beside its name, and its controls fit on one line#487
- A goal is offered a group when any of its work can serve it#489
- Web search runs inside the Anthropic call, not through a gateway vendor#481
- The chief of staff can suggest a change to a goal's measure, and never re-suggests a title#485
- A suggested reply sends itself, history floats over the chat, and Plan mode looks like Plan#482
- The measure picker renders each source as it answers#486
- Add measure has its own door, and a supporting number opens its chart#488
29 September 2026- The mapper learns from corrections, and three agreeing answers offer a rule#484
- Groups of work are reviewed on the plan page, and Plan starts a mapping#483
- Commit writes a group of links and a rule, and a goal-less rule comes back at ninety days#480
- The work mapper groups the work reaching no goal and suggests a goal for each#478
- Connect measure lands at once, and a source's catalogue is asked for once#467
- A rule may say "not linked, keeps us safe", and every link records its mode#479
- Plan mode drafts goal changes, and the plan page commits them#477
- A confirmed share is posted with the goal#476
- One plan object holds every plan, and a plan writes nothing#474
- A plan's goal changes, and the writers they commit through#475
- Work is mapped a group at a time: an agent plans, a person commits#471
- Work reaching no goal is cut into groups before any model sees it#473
- A goal can earn its share after it was written#472
- A goal that has not started takes no share yet#470
- A goal starts, a line is drawn, and a period is a lens#469
- Conversations leave the rail: Ask is the one door to the chief of staff#468
- Add Sentry error monitoring#466
- The chat panel is a conversation with the chief of staff, and it breaks out to a page#465
- A plan for unlinked work: an agent proposes by group, a person commits#457
- A chief of staff works in a session, with the team it briefs and the people you bring in#463
28 September 2026- The Kestrel demo carries its AI bill#462
- Add to Slack: one app, a workspace per company#461
- Upgrade eve from 0.31.3 to 0.67.2#460
- The phone's bar is the mark, search and the queue; the mark opens the sidebar#455
- Land on Home, and a room is in the address#458
- A merge made yesterday stays made, and two systems' records of you are linked#456
25 September 2026- Members says when each person was last active#422
- One search for people: folded across systems, members and not-yet-joined together#445
- Slack has a card on Integrations, and a setup page that fills in the manifest#449
- A goal's comments open from the pill beside its title#454
- The company page shows the north star's comments#452
- The leadership summary draws its charts and says each fact once#453
- The north star's owner chip on /company is the goal page's: a face, and a way to hand it on#451
- The callback guard accepts consumeConsent, which is consumeState with the binding#450
- Where work starts is a measure, and its page is Usage#448
- A goal page with one of everything: status and owner beside the title, and no separate details panel#446
- A comment that is too short says so under the box, not on an error page#441
- A chart is named, never drawn; and /design draws the design system#443
- Home's In flight rail reads what In flight reads, the merge card shows both records, and Off track filters#442
- Continue in opens toward the room it has#447
- Escape closes an inline editor wherever focus has gone#440
- A login you said is yours lives in the account menu, and Cursor is a mark once it has a row#439
- The Goals page reads as a tree: Create beside the count, Import on its own page, History folded#438
- The AI tools wear their makers' marks#437
- A form's ids are found under the tenant, and a redirect goes through isLocalPath#436
- MCP consent holds when prompt is sent twice#431
- A GitHub installation binds only to the tenant that proved it can reach it#430
- An Atlassian reconnect lands on its own connection, and a parked sign-in can be removed#429
- Ask answers in a sentence and ends in what to press#435
- Connector links, tool errors and Slack clicks are checked before they are trusted#434
- Public doors count in the shared table, and unverified bodies are read bounded#432
- Nothing but our own preamble can address the runner#433
- A room's tile wears a hue somebody chose, and its own letters#417
- Only a read follows a redirect off its origin#428
- Dependency vulnerabilities fixed#398
- An Atlassian connection may read names only, and narrowing clears what it already stored#427
- Work reaching no goal groups by the Jira epic it cites, before the repository#426
- A brief says how much open pipeline stands behind the accounts that raised it#419
- Work reaching no goal sits below the goals, grouped by the area it most likely belongs to#424
- Where the pressure is: a ranked board, not a scatter#423
- Sources are marks that say how fresh they are, states are colour, and the serif is Newsreader#420
- Topics with no area are offered a Buying journey, and a suggested place in it#418
- A pull request says what its AI spend came to, and so do its goal and the company#421
- A ladder grows at the bottom, after setup#407
- A brief is decided once, and the first answer is evidence for a goal we have#413
- One re-import at a time, and a run in flight reads as one#415
- A login is yours when you say so, and a row on In flight can wait a week#416
- Signals opens on four doors and a map of where the pressure is#414
- Re-import reads every pull request, and the two long presses run in the background#411
- Signals reads by area: one brief per area, with its goal, its breadth, and what landed#412
- Whoever was on the call can check the area a matcher gave its topic#410
- A customer owed an answer is an inbox case, not a section on Signals#406
- In flight shows the work OutcomeFactory did not send, against the goal it reaches#405
- Signals opens on what you hold, and everyone else's queue is a row each#409
- A follow-up a customer asked us for is its own stance, not an ask#408
- A card says what the customer did, and the heading counts the queue#403
- A team's areas reach its members, as a cut of their own and never as held#402
- Cursor's spend knows its pull request#404
- Signals is the word again, because it is broader than feedback#399
- The mark and the company name share one centre line, and Needs you has room#400
- Spend follows the push#401
24 September 2026- A date format you pick stays picked#395
- Headings take their spacing classes#397
- The rooms rail's mark gets room to breathe above Needs you#394
- Speak plainly: every screen in words a new user already owns#396
- The TeamForm half of the goals pull, and five corrections to the contract it reads#336
- The first reader reads what the company wrote down, and believes only what it can quote#382
- A connection is read the moment it is made, and the work proposes the goals#377
- A model's "serves nothing" is a proposal, not an answer#374
- Add Canopy connector for bi-directional work integration#338
- A router is shadowed before it routes#388
- Binding a measure takes its unit, and a different unit is a restatement#386
- Kestrel's invented people leave with the tenant, and a re-seed skips them#385
- A Marketplace app that is a surface, not a second product#326
- Search, create and feedback open in one frame, in one spot#393
- A sentence is sans, and the rooms rail has an edge#392
- A report is handed to your own AI tool by id, never by number#371
- The folded sidebar keeps the room's menu, Routing joins the foot, and Create has one door#391
- Spend knows its pull request#375
- Ask's tools hand back plain JSON, so reading the why stops failing#390
- The room's title is the room's menu, and Overview leads its nav#389
- Every page has the same header, and the verbs left the rail#387
- Ask is a column you summon, drawn as the Direction draws it#384
- Land on the queue, in the Direction's D1 shape#383
- One button#358
- Escape closes Ask from anywhere, and a click lands somewhere at once#380
- A starter is a proposal, never a set of goals that arrives already covered#379
- A quotient is a measure, headcount is a reading, and a team under five reads nothing#381
- Three more bills are readings, and each is read with its own key#378
- A work source may also count: GitHub delivery flow as measures#376
23 September 2026- Outcome in Slack: a check-in form, /goal, weekly channel digests, and notification controls#367
- An AI client gets what it was granted, and leaves a trail#363
- Rooms are places you enter from a rail, and Routing has a door#373
- The page is an inset panel, and light is the ground#368
- Ask's widen control is an icon#372
- Pay is averaged before it reaches us#369
- A date is the reader's, and a number is grouped by hand#360
- Ask: a question to the agent from anywhere in the app#362
- A rung is judged by its key results, and a key result is called what the tenant calls it#361
- The inbox offers only the kinds that have cases in them#365
- A cost is inferred, and no rate can be solved for#366
- An icon is a name, not a character#359
- A label is a word, not a shout#357
- A leadership summary says it is still going#356
- A key result read from a document keeps its numbers#348
- An objective is judged by its key results#347
- A steward may make a call, beside the computed health and never in place of it#344
- Three frictions from running a goal-setting benchmark by hand#343
- Seven sizes, and the smallest is 12px#355
- A leadership summary says only what the record holds#353
- A discussion hangs off an account#349
- A person may file a reading through an agent, and it is still theirs#350
- The site's pricing: per steward, with Goals and Loop#354
- A hand-kept number is asked for on a rhythm decided once#351
- A first run leads with the paste, and a new goal is not scolded#352
- A check-in is one act, and it says where the number should be#346
- The plan reads as a dashboard, and the table leaves as a file#345
22 September 2026- A connector is asked for, briefed, approved, and offered to its pilots#340
- A pull request says what it serves, and the product finally reads it#342
- A status line says the state and stops#341
- Read from the start reads#339
18 September 2026- A refused spine is amended, not discarded#337
- The key field names nobody, and the page says where to point it#335
- Goals, pulled back into TeamForm: the contract and the door#333
17 September 2026- A photograph beats a picture we cannot vouch for#332
- Photo handles come from the directory, and a face may be matched by address#331
- A member's face comes from the company's directory too#330
- The button that imports a directory goes and gets the faces too#329
- A face the company already has, and whose picture wins#328
- The org graph without ours in front of it, and shelves for the sources#327
16 September 2026- A key is not a person, and the count of people said it was#325
- A reading is one point, and a cadence is what made that matter#323
- The band counts what a machine did, and keeps it grey#324
- A row that says what is waiting, and the words behind it on a press#322
- A watched number has a shape, and it is grey#321
15 September 2026- A run that says why must not be overwritten by the wire#320
14 September 2026- Dependency vulnerabilities fixed#319
- The box that asks is the whole card, and what is waiting on you sits under it#318
13 September 2026- A day per cell, and the tenant's own hue on it#317
12 September 2026- The product follows a person into a room#316
- A room is where a leader works, and the switcher it replaces is gone#315
- A scope names roots, and a node draws all of its children#314
11 September 2026- A figure above the trail, and nothing on it is green#313
- A source we host is still a connector, and the tenant is whoever's token verifies#312
- A case may be put off, and only by its reader#310
- A seat's usage is not a bill, and the card says whose week it saw#311
- A bill can be read back, and a refusal says why#309
- A judge is worth the calls that held, not the calls they made#308
- A bill is a reading, and an admin key only reads#307
- A spine cut off mid-sentence is not a spine that broke the rules#306
- Whether work moved the number is scored when it falls due, and the scoring cannot flatter anybody#305
- A swallowed error is a hang, so the streaming passes throw again#300
- A model call that dies must still say so#302
- A session you can leave#301
10 September 2026- The front door is the site, and the wall is one wall#298
- A bank a quarter in: the Kestrel demo spine#299
- An idle colleague is still breathing#297
- An agent has a face, and the face is a pebble in its own stone#296
9 September 2026- An account is owed against a reading#295
- A drop proposes a re-hang; the reason is still typed#294
- The number asks, not the calendar#293
- Paste a quarter's plan, get a proposal you can argue with#292
- One goal per screen, for the room#291
- The spine as a grid, cut by the states worth asking about#290
- The sentence is restated where it is read, and a row says how old its number is#289
28 August 2026- The browser draws the calendar glyph, so it must be told the ground#288
- The margin of a record names its speakers the same way its header does#287
- A badge sits beside the mark, not inside it#286
- An agent is a pattern, and motion means tokens are being spent#285
- An answer ends on the act, and the choice is data#284
- The pulse is where the work is, and it says how long#283
27 August 2026- An accept continues the thread it was made in#282
- A thread is named by its goal, not by the agent that ran#280
- The small shape is the large one, and which way means over a fortnight#281
- In flight counts conversations, not runs#279
- A refusal is a question somebody has not been asked yet#278
- An argument is not cut to fit the sidebar it was first read in#277
- A thread holds the swarm, and a reply may hand off#276
- A thread reads as a transcript, and a reply waits its turn#275
- The chart draws at the size, and the time, it says it does#274
- A numbered box on the axis is a key, and a key needs a legend#273
- A thread reads as the conversation it was#272
- One conveyor, one count#271
- A steer continues the thread, and the copy stops explaining#270
- A title is a heading, so it is the question and not the argument#269
- An agent at work on an item is said on the item#268
- A face is the one thing an account photo can honestly supply#267
- An accept is a door, and a run is a thread#266
- A queue that names one item lands you on that item#265
- The migration that did not take, again, with the reason#264
- A cursor belongs to the source, not to the row#262
- A run may pause, and only forward#263
- The register had a page and no row in its own index#242
- A queue that says it is everybody's says it is nobody's#261
- A shape error may not discard the research#260
- Research argues; a person answers#259
- A dismissal is a sentence, so the box it is typed in fits the card#258
- A run ends where it was watched#257
- One row, one run#256
- A custom source is declared, not coded#255
- A roster is staffed by arithmetic#254
26 August 2026- Two strengths of suggestion, and a field you can see before you click it#253
- A reading you can point at, on an axis that says when#252
- A consequence is what will happen, not what it is called#251
- A goal is finished when it hangs somewhere, and the measure can wait#250
- A target has a date, so the readings can be drawn against it#249
- Four doors at every width, because the desk has the same day#248
- The read is the offered path, and the card asks one thing at a time#247
- Work that already exists can be pointed at its initiative#246
25 August 2026- A role is somebody's to change, and a membership somebody's to end#231
24 August 2026- Deals of one type, and the cuts nobody asked for stay absent#245
- A past worked out afterwards is not a past anybody watched#244
- Who was in the room from our side#243
- Attio knows what the pipeline is worth, not what it was worth#241
- A confidence nothing writes, and a blob larger than the judgement#240
- The form said there was no gap, and the button sent it anyway#239
- A decision had nowhere to be, so now it has a page#238
- A title you must type looked like one already written#237
- A signal card said how many and never when#236
- A date is written the way its reader writes one#235
- A field with an answer already should say so#234
- A panel that names an exit should be able to reach it#233
- Not now was a verdict, so the thumb kept the lighter instrument#232
23 August 2026- Work's share of a goal is scored, so the bar can stop saying "no evidence yet"#230
- What a customer may model, and the four things we refuse#229