Skip to content

agent-spec documents aware.units() as shipped; nothing in the runtime or atoms implements it #484

Description

@pawellisowski

The gap

10-core/agent-spec.md (lines 329–337 on main @ f8d213f67) documents a unit-typed numeric helper as a shipped part of the expression engine, with worked code:

const dead = aware.units('4.0 kN/m^2');
const live = aware.units('2.5 kN/m^2');
return aware.units(dead.plus(live));   // returns "6.5 kN/m^2"

Mixing kN/m² with kN/m or m would throw at run time, not produce silent garbage. The expression engine ships with the SI base + derived units library; per-discipline conventions (kip, klf, kN/m) round-trip cleanly.

Nothing implements it.

Verified

On origin/main:

git grep -n "aware\.units" origin/main -- 10-core          # 3 hits, all in the spec's example
git grep -n -E "units\s*\(|fn units" origin/main -- cli/src atoms 20-agents/_core   # 0 hits
git grep -n -i "units" origin/main -- cli/src/runtime atoms                         # 0 hits

The only units in the runtime are viewer-3d scene metadata strings (cli/src/render/viewer_3d.rs:2649, 20-agents/_core/viewer-3d/skills/scene-schema.md:16), which are labels, not a units library. No atom under atoms/ handles units.

Why it matters

A map node written from the spec's own example fails at run time with an undefined aware.units. Any agent author following the documented contract hits it on first use. It also matters downstream: floless.app is planning server-recomputable elevation provenance for steel reads (pawellisowski/floless.app#1029), where feet-and-inch ↔ millimetre handling is exactly the kind of unit-typed arithmetic this helper promises; with no substrate primitive, that stays app-side (first consumer), and the spec's promise is the thing a second consumer would look for.

Expected

Either the expression engine ships the helper the spec describes (SI base + derived units, discipline conventions, throw on unit mismatch), or the spec stops describing it as shipped and marks it planned.

Found while studying main for the floless.app elevation-provenance plan, 2026-09-02. Not a floless misuse: no floless code calls it; the spec was read as the source of truth for what the runtime owns.

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

    qa-readyFix shipped or ready for QA validation

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions