Mix Tasks

Copy Markdown

The ieee1164 knowledge compiler pipeline is driven by two Mix tasks. Run them in order whenever the yarn changes.

mix ieee1164.gen_uuids
mix ieee1164.compile

Both tasks require the application to be started (app.start is called internally).


mix ieee1164.gen_uuids

Walks the ieee1164 yarn, collects every name property, and assigns each a stable UUIDv7. Existing entries are preserved — only names not yet in the file receive a new UUID.

Output: priv/diffo/ieee1164/uuids.exs

mix ieee1164.gen_uuids
# priv/diffo/ieee1164/uuids.exs: 42 total (3 new)

Run this task once after adding new nodes to the yarn, then commit priv/diffo/ieee1164/uuids.exs. The file is the stable identity of every node across the diffo universe — the same name always carries the same UUID.

When a registry or Artefactory service is available, this step becomes a push to that service rather than a file write.


mix ieee1164.compile

Parses each section of the ieee1164 yarn into an %Artefact{} and serialises it to priv/diffo/ieee1164/<section>.bin using :erlang.term_to_binary/1. Also writes the fully integrated ieee1164.bin.

Requires: priv/diffo/ieee1164/uuids.exs (run gen_uuids first)

Output: priv/diffo/ieee1164/*.bin

mix ieee1164.compile
#   wrote priv/diffo/ieee1164/standard.bin
#   wrote priv/diffo/ieee1164/signals.bin
#   wrote priv/diffo/ieee1164/values.bin
#   wrote priv/diffo/ieee1164/resolutions.bin
#   wrote priv/diffo/ieee1164/operations.bin
#   wrote priv/diffo/ieee1164/projections.bin
#   wrote priv/diffo/ieee1164/transitions.bin
#   wrote priv/diffo/ieee1164/synchronicity.bin
#   wrote priv/diffo/ieee1164/ieee1164.bin
# priv/diffo/ieee1164: 9 artefacts compiled

Commit the .bin files so livebooks and other consumers can load artefacts directly without re-parsing.


Loading artefacts at runtime

Section artefacts and the integrated artefact can be loaded from the compiled binaries without re-parsing the yarn:

# A single section
Diffo.Ieee1164.load(:values)

# The fully integrated ieee1164 artefact
Diffo.Ieee1164.load_ieee1164()

Both raise with a clear message if mix ieee1164.compile has not been run.


Testing

The standard test suite runs without any prior build steps:

mix test

The compile task test is tagged :integration and excluded by default — it requires the .bin files to exist. Run the full suite with:

mix ieee1164.gen_uuids
mix ieee1164.compile
mix test --include integration

priv/diffo/ieee1164/ layout

priv/diffo/ieee1164/
 uuids.exs           stable UUIDv7s keyed by node name  (gen_uuids)
 standard.bin       
 signals.bin         
 values.bin          
 resolutions.bin      compiled section artefacts        (compile)
 operations.bin      
 projections.bin     
 transitions.bin     
 synchronicity.bin  
 ieee1164.bin        fully integrated artefact           (compile)