Horizon Docs

August 28, 2026

Invest 1.0 brings invitations, groups, and cross-group results, plus voting that stays inside your own group.

Versions included: v1.0.0, v1.0.1, v1.0.2, v1.0.3

This week we shipped Invest 1.0. It is the release where a Strategic Investment Planning event can be run end to end with real portfolio data: you invite the people you want, split them into groups, bring your own investment items in, and close the session with results that show how the whole room landed on each item — not just one group.

Features

  • Invite participants by email — sessions now have a guest list. Add people by address, and Invest sends each of them an invitation email with a link straight into the session. Invitations are listed alongside the roster in one People & Access view, where you can resend, cancel, or change someone's role without leaving the phase you are in.
  • Paste a whole list of invitees at once — the Invite Participants dialog accepts a pasted block of addresses in whatever shape you have them, whether comma-separated, one per line, or in Name <address> form from your mail client. Duplicates and addresses already invited are flagged as you paste, invalid entries are called out by row, and you can add people to the guest list without sending mail yet.
  • Decide who can reach a session — each session now carries a named access setting: Restricted, or Anyone with the Link. The help text says exactly what the selected value grants, so sharing a decision event is a choice you make rather than a default you inherit.
  • Split a session into groups — a session has a group from the moment you create it, and joiners are placed automatically into groups of the size you set. You can add, rename, and delete groups, move people between them, and rebalance the whole roster with a preview of who moves before you commit. Turn auto-assignment off and you manage the split by hand instead.
  • See how every group landed on every item — closed sessions open on a cross-group Overview: one row per investment, one mark per group, with unanimously, partially, and not-funded readings. A Groups tab drills into any single group's ballot, member by member.
  • Set an over-budget ballot aside while you read the results — any viewer can include or ignore each group that closed over budget, and everything on the screen recomputes: marks, counts, funding labels, and the "of N groups" denominators. It is your own reading of the results and is never saved or shared.
  • Bring your own investment items — decision sessions can import items from a CSV file or from another decision event you run, with a preview that classifies every row as new, already present, or invalid before anything is written. You can export a session's items back to CSV, and optionally replace the existing set on import.
  • Edit the item list directly — decision events get add, edit, and remove for investment items, a free-text category field, and an editable budget while the session is still in draft.
  • Training and decision sessions are separate — practice runs and real portfolio decisions now live in their own lists with their own navigation, and the dashboard reports on each. The ballot's autocomplete shortcut appears only in training, where filling a ballot instantly is helpful rather than harmful.
  • A front door that explains itself — the Invest home page is now public, and the sign-in page is a gate that says why you are there. An invited participant arriving from their email meets a page that tells them an invitation only works for the address it was sent to, rather than a marketing page with the buttons they need below the fold.

Improvements

  • The room reads a closed session the same way on every screen — we reworked the results screens around packed mark bars, with the table leading each tab instead of sitting a full screen below charts and prose. Horizon and Category get their own sortable columns, per-item counts sit behind an info control beside the outcome, and every table carries a key built from the states actually on screen.
  • Everyone starts on the whole-room view — results now open on the Overview for every viewer, including people who belong to a group. A closed session's first answer is how the room landed on each investment; your own group's ballot is one click away.
  • An over-budget ballot says what it asked for — the budget row now leads with what a group consented to against what it had, so a group that overspent no longer reads as one that asked for exactly what it got. Those figures stay on screen even when you set the ballot aside.
  • Votes are named by the decision, not the mechanism — a vote that used to read as a bare "Cannot" now reads "Cannot Consent" everywhere it appears, and an item a group vetoed reads "Not funded" rather than exposing the word "blocked" to participants who never cast such a vote.
  • Counts that add up to what you see — the count lines under each results row are now an exact reading of the marks beside them, including groups funded through the over-budget resolution, which previously disappeared into the general funded total. Counts that could not be named without overlapping another count were dropped rather than kept under a confusing label.
  • Readable notes inside tooltips — muted text in results tooltips had been rendering at roughly a quarter of the contrast it needed against the dark tooltip background. It now meets the accessible contrast floor.
  • Live updates that heal themselves — a session's realtime connection now recovers on its own when it drops, rebuilds with a fresh sign-in token, and backs off rather than hammering the server. The banner tells you honestly whether Invest is reconnecting or has given up.
  • Private session channels — the live channel behind a session is now private and authorized at join, so only session members can see who is present or receive live vote updates.
  • Participants can see their group — people in a session see their group's name and its full roster including themselves, are told when a facilitator moves them, and get a clear waiting state if they have not been placed yet.

Fixes

  • Vote notifications no longer leak across groups — during group consensus, members of one group were seeing toasts about votes cast in other groups. Notifications now follow your own group, and stay silent when the voter's group cannot be confirmed.
  • Observing another group no longer looks like voting in it — a facilitator drilling into a group they do not belong to saw live voting buttons and their own vote highlighted against that group's items, and clicking recorded a real vote. Those controls are now disabled, with a tooltip explaining that you can only vote on your own group's board.
  • Session settings show the real value — a new training session could display a stale budget until you reloaded the page, and once you had typed in a field it stopped showing changes made by a co-facilitator. Fields now follow the server whenever you have nothing unsaved, keep your text while you do, and no longer lose the last keystrokes if you navigate away mid-edit.
  • Decision sessions no longer fill themselves with training data — every decision session created after the training split was silently loading the Meridian Bank training scenario on its first Design visit, taking on sixteen items it did not ask for and overwriting its budget. Both the page and the underlying operation now refuse to load a scenario into a decision session.
  • Share links land on the shared session — opening a session link while signed out sent you to the dashboard after sign-in instead of the session someone shared with you.
  • Unassigned participants no longer vote into the wrong board — a participant who had not been placed in a group saw a session-wide consensus board and could cast group-phase votes into it.
  • Deleting an item reports the truth — when a permission rule refused a deletion, the item disappeared from the list and quietly returned on the next refresh. A refused delete now surfaces as an error.
  • The locked cost field is genuinely locked — during an active session, the cost field could still be changed with the arrow keys or the stepper, and the change was silently discarded on save.
  • Live updates were silently dead — votes, roster changes, group changes, and phase transitions had stopped propagating between browsers, because the live connection was joining before it was signed in. Every live update now reaches other participants without a reload.
  • Members without a profile name are distinguishable — participants whose names had not synced were all rendering under the same "Anonymous" label, which made them impossible to tell apart on the roster, in consensus voting, and in presence. They now fall back to the local part of their email address.

Breaking Changes

  • New decision sessions are restricted by default — link sharing starts off for new decision events and for decision events still in draft, so a session link no longer admits anyone who happens to hold it. If you rely on sharing a link, set access to Anyone with the Link on that session. Existing active sessions keep sharing on and are unaffected.

On this page