Skip to content

Fulcrum v2.0.0

Choose a tag to compare

@oernster oernster released this 23 Jul 19:06
· 175 commits to main since this release

Release notes

IMPORTANT NOTE:

  • macos dmg release asset removed since I forgot to notarise it (I didn't know that step was necessary after developer signing; the latest version has been notarised).

"Model my organisation" is redesigned around a two-pane
explorer-style editor and every model becomes reopenable, so the single worst
defect of the old editor (a mistake meant starting again) is gone.

  • A two-pane editor. The left pane is the org tree itself: units
    (Company, Group, Division, Department, Domain or your own label) nest to any
    depth with teams as leaves, each row showing a rolled-up badge such as
    "3 teams · 24 people". The dialog opens at nearly the full size of the app
    window and can be maximised, so a large organisation gets a workspace that
    scales with it; the split between the structure and the dependencies table
    is draggable. The right pane is an inspector for the selected item.
    The footer carries a live whole-org rollup and OK stays disabled (with the
    reason shown) until the model has at least one team. A unit with no teams
    beneath it shows a warning badge on its own row; hovering the row explains
    it, so the signal sits on the content rather than far away in a footer.
  • Explorer-style building. The New dropdown (or a right-click on empty
    space) starts a top-level item as any type, Company down to a single team;
    • or the context menu adds items inside any
      unit and each item's Type dropdown makes it a Division, Department, a
      custom label or a Team, converting it in place with its auto name following
      ("Team Gamma" becomes "Division Gamma"). Placeholder names run the Greek
      alphabet (Team Alpha, Team Beta, on to Omega then Alpha 2) in the editor
      and the wizard, rather than bare numbers. Rows drag like folders: onto a unit to
      move inside, between rows to reorder, Ctrl held to copy. Illegal drops (a
      tier above its parent, anything into a team, an item into its own subtree)
      show the forbidden cursor, so the nesting rule teaches itself.
  • Edit my org. A new button and File menu entry reopen the current
    organisation in the same editor fully populated, whatever its origin
    (wizard, JSON import, random generation or a previous edit). Edit, OK,
    rescore. "Model my organisation" still starts fresh and now confirms first
    when that would discard user work.
  • The model survives a restart. The current org autosaves to a per-user
    file and is restored on the next launch, so Edit my org works across
    sessions. Behind the scenes the editor is a pure function of the same
    blueprint shape the JSON import uses, which is what makes the round trip
    lossless.
  • Leads and owners are never blank. A built-in pool of over 200 full
    names (gender balanced, culturally varied, UK-weighted) fills every lead
    and owner across the editor, the wizard and random generation. Focusing a
    name field selects the whole value so a real name overtypes it in one
    motion and a dice button rolls a different one.
  • Terms explain themselves. Incentive skew, ships without asking, the
    four watched signals and the workload setting now carry plain-language
    tooltips with a concrete example each, rendered from the same source as the
    decision glossary.
  • Dependencies at any level. A dependency can now link any two items:
    team to team as before, unit to unit or across levels (a division blocked
    on a single platform team). The editor's dropdowns list teams and units by
    path; an item can never depend on itself or on its own container or
    contents, and an illegal row is flagged in red and ignored rather than
    blocking OK. A unit-level dependency counts in the frames where both its
    endpoints appear as nodes: it merges into the drilled map's arrows and the
    aggregate scores, draws between the unit boxes on the complete picture and
    is deliberately not converted into synthetic team queues, so the flat
    team-level score stays honest. Rank is not policed: a division waiting on
    one team is the bottleneck the score exists to expose.
  • The top level is playable. A "Play this level" toggle beside the map
    caption scores the top level as its own frame: each top-level unit rolls
    into one actor, loose teams stand as themselves and dependencies between
    root units are priced there, completing the rule that an edge counts
    wherever both its endpoints are nodes. The headline score stays the flat
    team-level truth; "Score the whole org" switches back. The guide follows
    the same frame, so a plan opened at the top level recommends unit-scale
    moves.
  • Plain-English polish. Counts pluralise correctly everywhere including
    the exported presentation ("over 1 move", never "1 moves"), signal
    readings drop their internal unit names in the chips and in plan
    rationales ("Escalations per release: 2", "Rework rate: 30%" and
    "falls 7 -> 6" rather than "2.0 count", "30.0 percent" and
    "falls 7.0 -> 6.0") and the glossary's move-classification
    entry now states the exact point ranges behind great, good, neutral, bad
    and blunder, taken from the same thresholds the engine uses, and explains
    that deltas are scored within the focused section. When an aggregate scope
    offers nothing better than neutral, the moves panel says the value lives
    deeper and points at the map (and no longer claims a flat org can drill).
  • Structure operations. Duplicate, Move up, Move down and Move to sit on
    the tree's context menu; removal confirms with what would be lost ("Remove
    Division 1 and its 2 teams, 16 people?"); dependencies and their delays are
    preserved through every edit, and removing a unit prunes any dependency its
    subtree carried.
  • Fit and finish. The tree's + and minus glyphs are optically centred in
    their buttons at every UI scale; the Type dropdown opens cleanly on click
    instead of bouncing shut; every button that carries a dropdown menu shows
    the same arrow as the spinboxes, so there is one disclosure cue across the
    app.
  • A three-state ring model and a calmer palette. Controls show no ring at
    rest, a green ring while hovered or keyboard-focused and enabled ("you can
    use this") and a permanent red ring while disabled, across the app, its
    dialogs and the installer. Amber is never a ring: it keeps carrying meaning
    only (the score, authority encoding on the map, checked states). The map's
    teal hover and change rings become a muted green, its keyboard cursor ring
    matches and the primary button drops its light blue fill for the standard
    dark one.

Existing JSON imports load unchanged and scoring is untouched: the same model
produces the same score as 1.4.3.

Licence

Dual-licensed by component: the model under GPL-3.0 and the user interface under
LGPL-3.0. Both texts ship with the app and are shown under Help.