Persistence & runs¶
NeuroCore records every blueprint execution as a durable run with an ordered list of steps. This turns a one-shot framework into an operable runtime: you can inspect what happened, replay from inputs, and resume after a failure.
Configuration¶
# neurocore.yaml
persistence:
enabled: true # on by default
backend: sqlite # sqlite | memory
path: runs.db # relative to the data directory
persist_step_snapshots: false # store a full context snapshot per step
The SQLite database lives at <data_dir>/runs.db and uses only the Python
standard library (sqlite3) — no extra dependencies.
CLI¶
neurocore runs list [--status suspended] [--blueprint research] [--limit 20]
neurocore runs inspect <run_id> [--full] [--json]
neurocore runs replay <run_id>
neurocore runs resume <run_id> [--data key=value ...]
neurocore runs approve <run_id> [--reject] [--note "..."] [--by you@example.com]
Run ids may be abbreviated to any unique prefix.
Statuses¶
Status |
Meaning |
|---|---|
|
in progress |
|
finished successfully |
|
raised an error (resume to retry from the failed step) |
|
paused at an approval gate (resume/approve to continue) |
Replay vs resume¶
Replay re-executes the blueprint from its original
initial_data, creating a new run. Deterministic re-run from inputs.Resume continues an existing
suspendedorfailedrun, skipping already-completed steps (tracked viacompleted_nodes).
Programmatic API¶
from neurocore.runtime.executor import execute_blueprint_tracked, resume_blueprint
from neurocore.persistence import build_run_store, RunStatus
store = build_run_store(config)
ctx = execute_blueprint_tracked(blueprint, registry, config, run_store=store)
if ctx.metadata.suspended:
resume_blueprint(run_id, registry, config,
resume_data={"approved": True}, run_store=store)
for run in store.list_runs(status=RunStatus.SUSPENDED):
print(run.run_id, run.suspended_at_node)
Implement the RunStore ABC (save_run, save_step, load_run, load_steps,
list_runs, delete_run) to add a Postgres or S3 backend.