Repository navigation
v0.3.54 — A step is saved only if it can run
Upgrading from 0.3.53:
- Rebuild and recreate the app container (
docker compose up -d --build alexclaw-prod). No configuration or database change. - Step configs are checked when a step is saved and when a workflow is imported. Refused: an unknown key, a value of the wrong type, a missing required field, a skill that does not exist, and a skill that is not configured on this instance. Keys starting with
_are reserved for the runtime and cannot be saved. An import that breaks the contract is refused naming the problem, and creates nothing. - A workflow's schedule must be a valid cron expression (five fields, or a shortcut such as
@daily); anything else is refused when the workflow is saved. - Steps saved before this release are not rewritten. One that breaks the contract fails its run at that step, naming the step and the field, instead of running on what it has.
- Uploaded dynamic skills used in steps with config need re-uploading with
config_schema/0before upgrading. Until they are, those steps fail at run, naming the fields their skill does not declare. - Dynamic skills declare their config fields with
config_schema/0. A dynamic skill that declares none can be used only in steps without config (the executor's own options —timeout_ms,on_circuit_open,fallback_skill,on_missing_skill— are accepted for every skill).
Changes
- Every core skill declares its config fields and their types (
config_schema/0); rules across fields are declared byvalidate_config/1(api_request: aurl, or apathwith an assigned api resource). - Skills that need something configured say whether they can run (
available?/0, oravailable?/1when the step's own config can make them usable):web_automation,telegram_notify(the main bot, or the step's ownbot_tokenandchat_id),discord_notify,github_security_review,google_calendar,google_tasks. - Presets and scaffolds offer only keys their skill accepts:
web_automationno longer offersresource, which it never read, and github's "Specific PR" preset no longer holds an emptypr_number. receive_from_workflowno longer declares_source_node; the executor sets it for a run that a remote node started.- Skill load, unload and reload start only from the Admin UI, as they already did; the documentation said the Telegram/Discord
/skillcommands could do it, and the unreachable code behind those commands is removed. The notices sent when a skill's file changed since it was approved, or when a skill did not load, now point to the Skills page of the Admin UI. - A test pins the boot check that loads a dynamic skill only if its file still matches the one approved.