Skip to content

Automation migration notes

This page records automation changes an upgrading reader needs. Newest notes first. Current behavior lives on the automation pages.

Neutral gate bundles and per-option input

New producers write schema-v3 neutral gate bundles. Readers still resolve in-flight plan, question, launch, and HITL request directories from earlier layouts, then fall back to those trees. New producers do not dual-write the old trees.

Upgrade sase-core first so every surface has indexed turn lookup and acceptance policy. Then upgrade the SASE Python package, sase's TUI, and mobile clients against that binding, and finally Telegram so its receiver submits answers through the same supervised proc path. In-flight gates from the earlier layout still finish through response.json.

--input @file.json and the shared input / input_data fields remain accepted for bundles that predate per-option submission. New answers submit option_inputs. /sase_plan still creates a PLAN turn for those earlier plans alongside TALE and EPIC.

See Command-backed interaction gates.

Monitor hand-off is sase pipe

A successor used to be obtained by monitoring a no-op command:

sase monitor start -s SLEEPING -S SLEPT -r '...' -n '<the real prompt>' -- sleep 1

Use sase pipe for a hand-off instead. See Monitor operations.

sase monitor start --lane remains accepted as an alias of --agent.

OOM in a SASE scope

SASE scopes set OOMPolicy=continue, so one OOM-killed process does not stop the whole scope. systemd's default OOMPolicy=stop used to SIGTERM every agent launched from the same terminal or tmux pane cgroup. See Scheduler.

Scheduler lifecycle journal

New ~/.sase/axe/lifecycle.jsonl records omit the retired desired-state marker. Readers tolerate old entries that still carry the field.

Rejected agent: and macro: job fields

Scheduled agent work must originate from a script's structured launch proposals. agent: and macro: job fields in configuration are rejected. See Scheduler configuration.

Scheduler routine and job names

Current commands, configuration, examples, and public JSON use routine/job terms. Older spellings remain accepted as compatibility aliases:

Older spelling Current spelling Notes
sase axe lumberjack ... sase axe routine ... Hidden CLI alias; completions and help advertise routine.
sase axe chop ... sase axe job ... Hidden CLI alias; older invocations keep schema-version-1 JSON.
axe.lumberjacks.<name>.chops axe.routines.<name>.jobs Accepted on input; effective config and new examples use canonical keys.
chop_script_dirs, chop_timeout job_script_dirs, job_timeout The old keys remain input aliases.
lumberjack_log_*, lumberjack_restart_backoff_max_seconds routine_log_*, routine_restart_backoff_max_seconds The old keys remain input aliases.
verbose_lumberjack_diagnostics verbose_routine_diagnostics The old key remains an input alias.
SASE_CHOP_*, sase_chop_*, sase.chops SASE_JOB_*, sase_job_*, sase.jobs Script authors should use the job-named entrypoints and SDK facade.
sase_chop_tg_inbound, sase_chop_tg_outbound (sase-telegram) sase_job_tg_inbound, sase_job_tg_outbound sase axe job doctor warns when only the older entrypoints are found.
chop:<routine>/<job> artifact references job:<routine>/<job> artifact references Both resolve to the same stored link identity.
sase doctor -C axe.chops sase doctor -C axe.jobs The old check ID remains a selection alias.
Stored chop agent tribe job tribe See Scheduler jobs.

Canonical sase axe job list --json and sase axe job doctor --json emit schema-version-2 JSON with routine/job field names. Hidden chop commands keep schema-version-1 envelopes. On-disk paths under ~/.sase/axe/lumberjacks/ and agent_chops.json are not migrated.

inhibit_if.changespec remains accepted as an alias of inhibit_if.patch.

ToolRun project identity

Named-tool runs are recorded under the repository that owns the catalog, not the host project. Rows written before that rule keep the identity they were recorded with and are not rewritten. Linked-repo check runs from that period carry the host project's identity and are told apart only by definition_digest. See Named tools and ToolRuns.

Unparseable snooze deadlines

A stored row whose snooze_until is unparseable or timezone-naive resurfaces immediately. New mutations reject that value. Rows written before resurfaced_at existed default to resurfaced_at: null. See Notifications.

  • Automation — current notification, scheduler, monitor, and tool behavior.
  • Upgrading — other upgrade notes.

_[project]: A sase project is a named unit of work registered with SASE. _[workspace]: A sase workspace is a numbered clone of a project's primary repo, managed by the workspace store and tracked in that project's registry.json. _[agent]: A sase agent is an agent session or a single agent that does not belong to a session. _[prompt]: A prompt is the text SASE hands to a provider to start an agent turn. _[macro]: A macro is a reusable prompt triggered with #name in agent prompts. _[Patch]: A Patch is SASE's local unit of change. _[bead]: A bead is one tracked work item in SASE's git-native issue tracker. _[plan]: A plan is a persisted, approved artifact recording the intent behind agent work. _[TUI]: The TUI is SASE's terminal interface for running agents and reviewing results. _[epic]: An epic is an executable multi-phase plan run with sase bead work. _[gate]: A sase gate is a durable, command-backed request for one user decision, created when work must pause for the user. _[monitor]: A sase monitor is a monitor turn that runs one long command under a detached supervisor, so the command outlives the agent that started it. *[stitch]: A stitch is the lightweight ordered change record inside a Patch's STITCHES: section.