Downloads

Fixes

  • Planning no longer offers a path through a step that produces nothing. A cap that takes anything and gives nothing, such as discard, was a step a path could continue from, so capdag plan --to png could list a candidate that could not be made into a machine and failed with an internal error. The same holds in the Go and Python libraries.
  • A live source runs into a first step that takes a sequence again. capdag run with a microphone or webcam source, and a single cap run on one, refused the capture as a gather instead of sending the feed to the step.
  • A cap a cartridge bundled with capdag provides is answered by that cartridge. capdag install of such a cap installs nothing and prints the bundled cartridge, capdag find names it, and a run hosts it without asking the cartridge registry; capdag install render-page-image-txt was refused because only the registry was asked.
  • A run that needs a cartridge from the registry beside other cartridges starts it. Only the first cartridge a run hosted was started on its own; a registry cartridge hosted after another one, bundled or from the registry, never started, and its caps waited 15 seconds and failed with “no master advertised a cap dispatchable for this request”.
  • A webcam opens on macOS when no frame rate is given. The capture asked for 29.97 frames per second, which Mac cameras do not offer, and failed with “Input/output error”; it now asks for 30. When a camera refuses the mode it is asked for, the error says which size and rate were asked for and that the width, height and framerate params choose another.
  • An editor model types every node of a machine written in canonical notation, where each member and target is named: a named target holds the output it takes, and a named member the type its argument accepts. It marks a step that maps per item wherever a sequence feeds an argument taking one value, named or not. build_editor_model takes the cap definitions instead of their sequence shapes.
  • The summary of capdag run counts runs. A machine of several independent parts counted each part as a run of its own, so one input could be reported as two completed runs.
  • A plan can be handed back and run as it was shown. StrandPlan carries its strand, serializes whole, and StrandPlan::check_is_a_resolution_of says whether it is the plan its machine resolves to now for the same run inputs — equal in everything but the values of its step tokens — or where they differ. A host that keyed argument values by the tokens of the plan it was shown runs that plan, and every value reaches its step. input_slots() and output_names() read the plan’s own nodes.

Download CapDAG