Skip to content

Pulse TELOS page: four composite dimension bars stand in for the seven in LIFEOS_STATE.json, and template files score as real numbers #2049

Description

@lgertel

Version: LifeOS 7.40.4 (ce046f2)

What

LIFEOS_STATE.json carries seven dimensions (health, money, freedom, creative, relationships, rhythms, infrastructure). The TELOS page's "Life Dimensions" band renders four surfaces built by averaging pairs: creative_freedom = avg(creative, freedom), finances = avg(money, finances), plus health and relationships. Two consequences:

  • rhythms and infrastructure never appear anywhere on the page, and the band's "average" is an average of the four composites, not of the seven captured values.
  • A dimension whose source file is still the shipped template (provenance: template) contributes its scaffold number as if it were captured. With creative = 0 (template) and freedom = 75, the page reads "Creative Freedom 38" — a number no file states.

Where

LIFEOS/PULSE/Observability/observability.ts, buildDimensionsFromIdealState (line 3408):

  • the comment at line 3406: "Composite rule for creative_freedom: average the underlying creative and freedom percentages … Missing source dimension contributes 0";
  • the surface table at lines 3442–3450: four entries (health, creative_freedom, relationships, finances) with sources: ["CREATIVE.md", "FREEDOM.md"] etc.;
  • avg at lines 3425–3428 averages whatever numbers are present and returns 0 for none, with no provenance check on the source files.

Reproduce

  1. Fresh install, run the interview for one or two dimensions only, so the rest keep provenance: template in USER/TELOS/IDEAL_STATE/*.md.
  2. bun LIFEOS/TOOLS/UpdateLifeosState.ts (or wait for the Stop hook), then curl -s localhost:31337/api/telos/overview | jq '.dimensions'.
  3. Observe four entries, none for rhythms or infrastructure, and a creative_freedom.cur that is the mean of a captured and a template value.

Expected

  • One dimension list, shared by the state updater, the gap computer and Pulse, so every surface renders the same seven and cannot drift.
  • A template dimension scores null ("not captured"), never a number, and is never averaged into a composite; a composite with no captured source is null too.
  • Rings, bars and the band average only captured dimensions and say "not captured" for the rest.

Fix shape

A LIFEOS/TOOLS/lib/dimensions.ts exporting the seven-entry DIMENSIONS list, the surface definitions and a composeSurface(pcts, sources) that returns the mean of captured sources or null; UpdateLifeosState.ts writes pct: null plus provenance for template files; observability.ts and the page consume the list and treat null as "not captured". Landed as one library file plus three consumer edits; a PR can follow.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions