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.
The gap
10-core/agent-spec.md(lines 329–337 onmain@f8d213f67) documents a unit-typed numeric helper as a shipped part of the expression engine, with worked code:Nothing implements it.
Verified
On
origin/main:The only
unitsin 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 underatoms/handles units.Why it matters
A
mapnode written from the spec's own example fails at run time with an undefinedaware.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
mainfor 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.