{"version": 2, "width": 100, "height": 34, "timestamp": 1787598002, "env": {"SHELL": null, "TERM": "dumb"}}
[0.006665, "o", "\u001b[H\u001b[2J\u001b[3J"]
[1.008117, "o", "\u001b[1;36m═══ The kernel: every capability is a Cordis service ═══\u001b[0m\r\n"]
[2.41062, "o", "The server boots as one ordered pass over config/cordis-entries.toml.\r\nEach entry names a plugin factory; the Loader instantiates them into\r\none typed Context and journals every fiber for admin operations.\r\n"]
[6.011886, "o", "\r\n$ sed -n 1,20p config/cordis-entries-shared.toml\r\n"]
[6.914494, "o", "# the top-level file; order here IS effective boot order within the splice.\r\n\r\n[[entry]]\r\nid = \"tools\"\r\nplugin = \"Tools\"\r\ndisabled = false\r\n\r\n[entry.config]\r\n\r\n[[entry]]\r\nid = \"llm\"\r\nplugin = \"Llm\"\r\ndisabled = false\r\n\r\n[entry.config]\r\n\r\n[[entry]]\r\nid = \"execute\"\r\nplugin = \"Execute\"\r\ndisabled = false\r\n"]
[11.91665, "o", "\u001b[H\u001b[2J\u001b[3J"]
[11.916791, "o", "\u001b[1;36m═══ The live service graph — 16 fibers, one Context ═══\u001b[0m\r\n"]
[13.51789, "o", "$ curl -s $BASE/api/admin/cordis/entries | jq -r \".current[]\"\r\n"]
[14.52675, "o", "events [0:28] EventsService\r\noverlay [0:28] Overlay\r\nstore [0:28] Store\r\ntools [0:28] Tools\r\nllm [0:28] Llm\r\nexecute [0:28] Execute\r\nauth [0:28] AuthService\r\nscheduler [0:28] SchedulerService\r\npipeline [0:28] PipelineService\r\ntrigger [0:28] TriggerService\r\nhealth [0:28] HealthJobService\r\ncalculator [0:28] CalculatorService\r\n"]
[14.526818, "o", "probe [0:28] noop_probe\r\nhttp [0:28] Http\r\npolicy-emergency-gate [0:28] RhaiPolicy\r\npolicy-admission-audit [0:28] RhaiPolicy\r\n"]
[20.528454, "o", "\r\n\u001b[1;36m═══ Dependency cycles: detected at boot, reported live ═══\u001b[0m\r\n"]
[21.929916, "o", "$ … | jq \".dependency_cycles\"\r\n"]
[22.939453, "o", "\"cycles: []\"\r\n"]
[22.9397, "o", " → empty: the graph is a clean DAG\r\n"]
[27.941932, "o", "\u001b[H\u001b[2J\u001b[3J"]
[27.942047, "o", "\u001b[1;36m═══ Zero-downtime replacement: drain-and-shift ═══\u001b[0m\r\n"]
[29.544253, "o", "Replace a provider under live traffic. The loader builds the new\r\nfiber out-of-band, proves it ready, then promotes it — concurrent\r\nreaders never observe an absence window.\r\n"]
[33.545519, "o", "$ curl -X POST /api/admin/cordis/services/CalculatorService/replace \\\r\n -d \"{\\\"config\\\":{}}\"\r\n"]
[34.755928, "o", "{\r\n \"replaced\": true,\r\n \"plugin\": \"CalculatorService\",\r\n \"fiber_id\": 18\r\n}\r\n"]
[34.758412, "o", " → old fiber drained, new fiber 18 promoted in its place\r\n"]
[40.760581, "o", "\u001b[H\u001b[2J\u001b[3J"]
[40.760697, "o", "\u001b[1;36m═══ Guarded operations: the kernel refuses what it cannot do safely ═══\u001b[0m\r\n"]
[42.362891, "o", "Retire asks a provider to leave the graph. Services wrapped by other\r\nservices are refused outright — no partial teardown, no half state:\r\n"]
[45.764166, "o", "$ curl -X POST /api/admin/cordis/services/Execute/retire\r\n"]
[46.972113, "o", "{\r\n \"retired\": false,\r\n \"service\": \"Execute\",\r\n \"error\": \"service Execute is not retirably supported: only direct Cordis services (concrete-type provides) can be retired; wrapper services are not supported today\",\r\n \"cascaded_notify\": true\r\n}\r\n"]
[46.972411, "o", " → structured refusal, graph untouched, dependents intact\r\n"]
[52.974589, "o", "\u001b[H\u001b[2J\u001b[3J"]
[52.974704, "o", "\u001b[1;36m═══ Fail-closed policy gates ship active ═══\u001b[0m\r\n"]
[54.577323, "o", "id = \"policy-emergency-gate\"\r\nplugin = \"RhaiPolicy\"\r\nisolate = \"policy-emergency\"\r\ndisabled = false\r\n\r\n[entry.config]\r\nscript = \"\"\"\r\nfn halt(p) { if p.agent_name == \"EMERGENCY-HALT\" { #{deny: \"emergency-halt\"} } else { () } }\r\n\"\"\"\r\n"]
[58.579596, "o", "Two RhaiPolicy entries run in an isolated realm: an emergency-halt\r\ngate (deny on match, fail-closed on error) and an admission auditor.\r\nAgent runs, JWT chat, API-key calls, MCP tool calls — all gated.\r\n"]
[63.582043, "o", "\u001b[H\u001b[2J\u001b[3J"]
[63.582158, "o", "\u001b[1;36m═══ And the whole graph embeds as a library ═══\u001b[0m\r\n"]
[64.984393, "o", " use ares_server::register_plugins;\r\n let ctx = Context::new_root();\r\n register_plugins(®);\r\n // same factories, same kernel — no HTTP stack required\r\n"]
[68.985643, "o", "\r\n\u001b[2mARES · Agentic Runtime Extensible Server · cordis-hardened kernel\u001b[2m\r\n\u001b[2mcrates.io: ares-server 0.9.1 · ares-cordis 0.9.1\u001b[0m\r\n"]