code wiki / _hdl_build / nx_mgmt_api_toolchain_session_20260910.nx
nx_mgmt_api_toolchain_session_20260910.nx
buildroot/runtime/_hdl_build/nx_mgmt_api_toolchain_session_20260910.nx
about
nx_mgmt_api.nx -- THE IO / TRANSPORT ring of the sovereign ecosystem control-plane API (the primary adapter).
THIN by design (clean three-tier / hexagonal -- see knowledge/library/arch_*): it owns ONLY transport --
the socket loop, HTTP request parse, routing, JSON serialization, and auth gating. ALL business rules live in
the LOGIC core (nx_mgmt_core, mc_*); ALL outside-world access lives in the DATA adapters (nx_mgmt_data, md_*).
Dependency direction: api -> {core, data}, data -> core-free, core -> nothing (dependency inversion). The
router is a PURE FUNCTION ma_handle(ctx, req, req_n, snapfile, out) -> out_n (bytes in, bytes out, NO socket);
the gate drives it IN-PROCESS (no curl/shell). Reuses nx_status_daemon's HTTP-parse + Modern-Auth helpers.
TRUE MONITORING (no false +/-): /api/health + /api/services read a live SNAPSHOT (md_read_file) and surface
dueling-supervisors / duplicate-instances / crash-loops via the core rules; missing snapshot -> UNKNOWN,
never OK. Health/services + all write actions are AUTH-gated; write actions are confirm-gated + fail-closed.
Routes (auth = X-Nishi-Session Ed25519 session header, canonical Modern Auth, NO cookies):
GET /api -> 200 route index (public)
POST /api/login -> 200 {"token":...} | 401
GET /api/health -> (auth) 200 {overall,degraded,reasons[...]} | 401
GET /api/services -> (auth) 200 {services:[...]} | 401
POST /api/upload?target=&seq=&final=[&sha256=] -> (auth) chunked artifact publish; append raw body chunk ->
<target>.upload, on final rename -> <target>.new (staged for /api/deploy; NEVER promotes) | 400 | 401
POST /api/deploy -> (auth) allowlist+validate->promote->http-health->auto-rollback | 400 | 401
POST /api/rollback -> (auth, confirm=yes) | 400 | 401
POST /api/reconcile -> (auth, confirm=yes) single-supervisor | 400 | 401
POST /api/restart -> (auth, confirm=yes, service=) surgical kick | 400 | 401
POST /api/migrate|update -> (auth) 501 reserved (R3b: URL->.site ingest) | 401
(any other) -> 404
Snapshot line format (the monitor writes; md_* reads): "SUP <n>" / "SVC <name> <port> <state> <procs> <rwin> <rtot>"
argv: [1]=port [2]=keysfile [3]=storefile [4]=realm [5]=snapfile [6]=budget. license_tier: ORIGINAL
dependencies 15 imports · 1 importers
diagram shows first 10 each side; +5 more imports, +0 more importers in the complete lists below.
imports: nx_status_daemon.nxnx_mgmt_data_toolchain_session_20260910.nxnx_builddeploy_lib.nxnx_organkind.nxnx_mgmt_core.nxnx_access_lib.nxnx_os_introspect.nxnx_shard_view.nxnx_srcfresh.nxnx_fio.nxnx_sha256.nxnx_buildecho.nxnx_routeguard_lib.nxnx_mgmt_upload.nxnx_tool_exec_allow.nx
imported by: nx_toolchain_session_gate_20260910.nx
structs
| 2542 | struct NxInstallRequest |
| 2660 | struct NxInstallReceiptWriter |
consts
| 43 | const MA_MAGIC_4096: i64 = 4096 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 44 | const MA_MAGIC_16384: i64 = 16384 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 45 | const MA_MAGIC_8192: i64 = 8192 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 46 | const MA_MAGIC_262144: i64 = 262144 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 47 | const MA_MAGIC_1024: i64 = 1024 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 48 | const MA_MAGIC_2048: i64 = 2048 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 49 | const MA_MAGIC_2046: i64 = 2046 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 50 | const MA_MAGIC_8190: i64 = 8190 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 51 | const MA_MAGIC_65536: i64 = 65536 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 52 | const MA_MAGIC_16380: i64 = 16380 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 53 | const MA_MAGIC_262140: i64 = 262140 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 54 | const MA_MAGIC_60000: i64 = 60000 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 55 | const MA_MAGIC_32768: i64 = 32768 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 56 | const MA_MAGIC_1400: i64 = 1400 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 57 | const MA_MAGIC_2040: i64 = 2040 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 58 | const MA_MAGIC_65500: i64 = 65500 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 59 | const MA_MAGIC_8000: i64 = 8000 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 60 | const MA_MAGIC_16000: i64 = 16000 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 61 | const MA_MAGIC_12000: i64 = 12000 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 62 | const MA_MAGIC_300000: i64 = 300000 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 63 | const MA_MAGIC_4000: i64 = 4000 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 64 | const MA_MAGIC_8180: i64 = 8180 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 65 | const MA_MAGIC_10000: i64 = 10000 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 66 | const MA_MAGIC_2000000: i64 = 2000000 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 67 | const MA_MAGIC_1600: i64 = 1600 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 68 | const MA_MAGIC_20480: i64 = 20480 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 69 | const MA_MAGIC_86400: i64 = 86400 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 70 | const MA_MAGIC_19456: i64 = 19456 // NX-UNNAMED: mechanical, collision-free placeholder -- this name RESTATES the value and so carries no meaning. Replace it with a domain term that says WHY, or move the number to a config row. |
| 80 | const MA_PROMOTE_LEASE_TTL_S: i64 = 300 |
| 87 | const MA_BUILD_LEASE_TTL_S: i64 = 600 |
| 88 | const MA_DEPLOY_LEASE_TTL_S: i64 = 600 |
| 89 | const MA_RESTART_LEASE_TTL_S: i64 = 300 |
| 104 | const TS_NONRETRY_TTL_S: i64 = 300 |
| 105 | const TS_JITTER_DIV: i64 = 4 |
| 107 | const MA_BODYCAP: i64 = 131072 |
| 116 | const MA_UPLOAD_REQCAP: i64 = 2097152 // 2 MiB -- the scoped upload-request buffer (headers + one big chunk body) |
| 117 | const MA_UPLOAD_TOOBIG: i64 = 0 - 1 // sentinel: declared Content-Length would overflow MA_UPLOAD_REQCAP -> 413 refuse |
| 118 | const MA_SHARDS_CONF: *u8 = "/volume1/homes/elderwesto/nishihost/shards.conf" as *u8 // the shard-registry SSOT the control plane reads |
| 121 | const MA_ROLES: *u8 = "/volume1/ai/hub/roles.tsv" as *u8 |
| 122 | const MA_IDX: *u8 = "/volume1/homes/elderwesto/nishihost/nishi_uid_handle.tsv" as *u8 |
| 123 | const MA_LVL_READ: i64 = 2 // member+ may READ /api/health + /api/services |
| 124 | const MA_LVL_ACT: i64 = 3 // OPERATOR required for the write actions (deploy/rollback/reconcile/restart) |
| 127 | const CM_DAYS_DEFAULT: i64 = 30 // default cap lifetime when `days` is omitted |
| 128 | const CM_DAYS_MAX: i64 = 730 // 2 years -- upper bound so a mint can't grant a near-eternal cap |
| 129 | const CM_SECS_PER_DAY: i64 = 86400 // exp = now + days * this |
| 130 | const CM_ALLOW_MAX: i64 = 480 // max bytes of the allow= csv (bounds the mint scratch buffers) |
| 131 | const CM_NAME_MAX: i64 = 120 // max bytes of one tool name inside the csv |
| 170 | const MA_ROUTES: *u8 = "/api/login /api/health /api/release_identity /api/services /api/upload /api/deploy /api/deploy_status /api/unpack /api/build /api/gate_run /api/proc_kill /api/promote /api/promote_toolchain /api/v2/promote_toolchain /api/tools/register /api/cap/mint /api/hostctl /api/promote_content /api/rollback /api/reconcile /api/restart /api/openapi.json /api/migrate /api/update /api/compare/registry /api/compare/upsert /api/compare/regen /api/compare/publish" |
| 171 | const MA_RT_SP: i64 = 32 // ' ' -- the separator in MA_ROUTES |
| 172 | const MA_RT_QUOTE: i64 = 34 // '"' -- JSON string delimiter |
| 173 | const MA_RT_COMMA: i64 = 44 // ',' -- JSON element separator |
| 174 | const MA_RT_BUF: i64 = 4096 // one index body; MA_ROUTES is ~420 B and the JSON wrapper ~250 B |
| 775 | const MA_MEM_AVAIL_MIN_PERMIL: i64 = 150 |
| 776 | const MA_SWAP_USED_MAX_PERMIL: i64 = 950 |
| 1300 | const MA_DEPLOY_STATUS: *u8 = "/tmp/nx_ma_deploy_status" as *u8 |
| 1611 | const MA_PROMOTE_REFUSE_BACKWARDS: i64 = 0 - 2 |
| 1612 | const MA_PROMOTE_REFUSE_CAPLOSS: i64 = 0 - 3 |
| 2387 | const MA_ORGAN_ALLOWLIST: *u8 = "tool_allowlist.conf" as *u8 |
| 2388 | const MA_ORGAN_CONFCAP: i64 = 262144 |
| 2389 | const MA_ORGAN_MAXARGS: i64 = 12 |
| 2452 | const MA_OA_INVALID: i64 = 0 - 1 |
| 2453 | const MA_OA_CAPACITY: i64 = 0 - 2 |
| 2454 | const MA_OA_ENCODING: i64 = 0 - 3 |
| 2926 | const MA_GR_ROOT: *u8 = "/volume1/homes/elderwesto/nishihost/" as *u8 |
| 2927 | const MA_GR_JOBS: *u8 = "_jobs" as *u8 |
| 2928 | const MA_GR_CLAIM_PROBES: i64 = 100 // the tools-API job lane's anti-collision walk: epoch-second ids, +1 per O_EXCL collision |
| 2929 | const MA_GR_O_EXCL_CREATE: i64 = 193 // O_CREAT(0x40)|O_EXCL(0x80)|O_WRONLY(0x1): the reservation IS the open |
| 2930 | const MA_GR_CAPTURE_CAP: i64 = MA_MAGIC_16384 // FAST-path transcript cap (rb is MA_MAGIC_65536 and ma_gate_esc can double a byte); ANNOUNCED in the payload, no longer silent |
| 2931 | const MA_GR_DEADLINE_MIN_MS: i64 = 1000 |
| 2932 | const MA_GR_DEADLINE_MAX_MS: i64 = MA_MAGIC_300000 |
| 2933 | const MA_GR_SRC_CALLER: i64 = 2 // deadline_src: 0 = compiled default, 1 = conf row (TEA_SRC_*), 2 = caller's deadline_ms |
| 3745 | const MA_D001_BUF: i64 = 262144 |
functions
| 135 | func ma_emit_json(out: *u8, prefix: *u8, body: *u8, body_n: i64) -> i64 |
| 148 | func ma_wants_text(req: *u8, req_n: i64) -> i64 |
| 176 | func ma_routes_json(b: *u8, off: i64) -> i64 called by 1: ma_index |
| 200 | func ma_index_text(out: *u8) -> i64 |
| 212 | func ma_docs(out: *u8) -> i64 |
| 218 | func ma_events(out: *u8) -> i64 |
| 227 | func ma_emit_binary(out: *u8, body: *u8, body_n: i64) -> i64 |
| 237 | func ma_rpc(req: *u8, req_n: i64, out: *u8) -> i64 |
| 256 | func ma_rpc_contract(out: *u8) -> i64 calls 1: ma_emit_200 |
| 273 | func ma_inventory(out: *u8) -> i64 |
| 328 | func ma_index(out: *u8) -> i64 |
| 342 | func op_path(out: *u8, o: i64, path: *u8, method: *u8, summary: *u8, authed: i64) -> i64 |
| 353 | func ma_openapi(out: *u8) -> i64 |
| 387 | func ma_emit_404(out: *u8) -> i64 |
| 392 | func ma_emit_403(out: *u8) -> i64 |
| 397 | func ma_emit_501(out: *u8) -> i64 |
| 411 | func ma_compiled_name(buf: *u8, n: i64, out: *u8) -> i64 |
| 437 | func ma_emit_400(out: *u8, body: *u8) -> i64 |
| 446 | func ma_emit_200(out: *u8, body: *u8) -> i64 |
| 455 | func ma_emit_503(out: *u8, body: *u8) -> i64 |
| 466 | func ma_emit_413(out: *u8) -> i64 |
| 471 | func ma_comma(body: *u8, b: i64, first: *i64) -> i64 |
| 478 | func ma_emit_services(snap: *u8, snap_n: i64, out: *u8) -> i64 |
| 530 | func ma_emit_shards(out: *u8) -> i64 |
| 536 | func ma_emit_services_file(snapfile: *u8, out: *u8) -> i64 |
| 550 | func mnp_readproc(path: *u8, buf: *u8, cap: i64) -> i64 |
| 571 | func mnp_skip_sp(buf: *u8, n: i64, p: i64) -> i64 |
| 579 | func mnp_pdec(buf: *u8, n: i64, p: i64, pend: *i64) -> i64 |
| 592 | func mnp_count_sub(buf: *u8, n: i64, needle: *u8, nl: i64) -> i64 |
| 603 | func mnp_find_after(buf: *u8, n: i64, key: *u8, klen: i64) -> i64 |
| 615 | func mnp_loadavg_milli(buf: *u8) -> i64 |
| 640 | func mnp_ncpu(buf: *u8, cap: i64) -> i64 |
| 647 | func mnp_meminfo_kb(buf: *u8, n: i64, key: *u8, klen: i64) -> i64 |
| 654 | func ma_emit_nodes(out: *u8) -> i64 |
| 692 | func ma_health_count(snap: *u8, snap_n: i64, supb: *i64, nsvcb: *i64, ndownb: *i64) -> i64 |
| 725 | func ma_health_reasons(snap: *u8, snap_n: i64, sup: i64, body: *u8, b0: i64) -> i64 |
| 782 | func ma_key_int(buf: *u8, n: i64, key: *u8) -> i64 |
| 815 | func ma_read_small(path: *u8, buf: *u8, cap: i64) -> i64 |
| 822 | func ma_mem_conf(key: *u8, defv: i64) -> i64 |
| 831 | func ma_mem_pressure() -> i64 |
| 850 | func ma_emit_health(snap: *u8, snap_n: i64, out: *u8) -> i64 |
| 903 | func ma_emit_health_file(snapfile: *u8, out: *u8) -> i64 |
| 915 | func ma_authed(ctx: *NxAuthContext, req: *u8, req_n: i64) -> i64 |
| 927 | func ma_auth_index()->*u8 { if (ma_auth_index_path as i64)!=0 { return ma_auth_index_path };return MA_IDX } called by 1: ma_level_of |
| 928 | func ma_auth_roles()->*u8 { if (ma_auth_roles_path as i64)!=0 { return ma_auth_roles_path };return MA_ROLES } |
| 929 | func ma_level_of(ctx: *NxAuthContext, req: *u8, req_n: i64) -> i64 |
| 936 | func ma_confirmed(req: *u8, req_n: i64) -> i64 |
| 948 | func ma_login(ctx: *NxAuthContext, req: *u8, req_n: i64, out: *u8) -> i64 |
| 1001 | func mau_query_off(path: *u8, pn: i64) -> i64 |
| 1011 | func mau_qparam(path: *u8, pn: i64, qoff: i64, name: *u8, name_n: i64, voff: *i64, vlen: *i64) -> i64 |
| 1038 | func mau_qint(path: *u8, off: i64, len: i64) -> i64 |
| 1054 | func mau_build_path(path: *u8, toff: i64, tlen: i64, suffix: *u8, buf: *u8) -> i64 |
| 1066 | func mau_read_seq(sidecar: *u8) -> i64 |
| 1076 | func mau_write_seq(sidecar: *u8, val: i64) -> i64 |
| 1093 | func mau_hex32(dig: *u8, out: *u8) -> i64 |
| 1108 | func mau_hex_eq(path: *u8, hoff: i64, hlen: i64, want: *u8) -> i64 |
| 1124 | func mau_mkdirs(path: *u8) -> i64 |
| 1142 | func ma_do_upload(req: *u8, req_n: i64, out: *u8) -> i64 |
| 1301 | func ma_write_status(s: *u8) -> i64 |
| 1321 | func ma_do_adnet_creative(req: *u8, req_n: i64, out: *u8) -> i64 |
| 1351 | func ma_do_adnet_invoice(out: *u8) -> i64 |
| 1360 | func ma_do_deploy_status(out: *u8) -> i64 |
| 1372 | func ma_sanitize_name(src: *u8, off: i64, len: i64, buf: *u8, cap: i64) -> i64 |
| 1393 | func ma_json_esc_tail(src: *u8, n: i64, maxsrc: i64, dst: *u8, cap: i64) -> i64 |
| 1416 | func ma_read_tail(path: *u8, buf: *u8, cap: i64) -> i64 |
| 1430 | func ma_find(src: *u8, n: i64, pat: *u8) -> i64 |
| 1447 | func ma_path_exists(path: *u8) -> i64 |
| 1464 | func ma_bank_staged(nm: *u8) -> i64 |
| 1485 | func ma_restore_staged(nm: *u8) -> i64 |
| 1506 | func ma_hexstr_eq(a: *u8, b: *u8) -> i64 |
| 1520 | func ma_release_identity(out: *u8) -> i64 |
| 1536 | func ma_file_sha_hex(path: *u8, hexout: *u8) -> i64 |
| 1548 | func ma_build_dup_shadow(nm: *u8) -> i64 |
| 1576 | func ma_build_refusal_body(bao: *u8, ban: i64, batr: i64, nm: *u8, qrc: i64, qout: *u8) -> *u8 |
| 1613 | func ma_promote_refusal_body(mprc: i64, nm: *u8, livehex: *u8) -> *u8 |
| 1640 | func ma_build_enqueue(nm: *u8, qout: *u8) -> i64 |
| 1662 | func ma_runner_refused(pbuf: *u8, pn: i64) -> i64 |
| 1667 | func ma_do_build(req: *u8, req_n: i64, out: *u8) -> i64 |
| 2273 | func ma_do_unpack(req: *u8, req_n: i64, out: *u8) -> i64 |
| 2351 | func ma_gate_esc(d: *u8, o: i64, s: *u8, n: i64) -> i64 |
| 2393 | func ma_organ_resolve(nm: *u8, outp: *u8) -> i64 |
| 2455 | func ma_organ_arg_hex(c: i64) -> i64 |
| 2461 | func ma_organ_arg_legacy(c: i64) -> i64 |
| 2471 | func ma_organ_args_parse(raw: *u8, n: i64, encoded: i64, dst: *u8, cap: i64, av: *i64, maxargs: i64) -> i64 |
| 2521 | func ma_organ_args_form(body: *u8, n: i64, dst: *u8, cap: i64, av: *i64, maxargs: i64) -> i64 |
| 2551 | func ma_install_request_init(r: *NxInstallRequest) -> i64 |
| 2556 | func ma_install_request_close(r: *NxInstallRequest) -> i64 |
| 2564 | func ma_install_component(p: *u8,n: i64) -> i64 |
| 2582 | func ma_install_request_decode(body: *u8,n: i64,r: *NxInstallRequest) -> i64 |
| 2639 | func ma_install_dispatch(req: *u8,n: i64,level: i64,registry: *u8,snapshot_allowance: i64,intent_allowance: i64,scratch: *u8,scratch_bytes: i64,parsed: *NxInstallRequest,result: *NxRegisteredInstallResult) -> i64 |
| 2666 | func ma_ir_byte(w: *NxInstallReceiptWriter,ch: u8) -> i64 |
| 2675 | func ma_ir_text(w: *NxInstallReceiptWriter,s: *u8) -> i64 |
| 2680 | func ma_ir_string(w: *NxInstallReceiptWriter,s: *u8) -> i64 |
| 2700 | func ma_ir_number(w: *NxInstallReceiptWriter,value: i64) -> i64 |
| 2712 | func ma_ir_named_string(w: *NxInstallReceiptWriter,key: *u8,value: *u8) -> i64 |
| 2715 | func ma_ir_named_number(w: *NxInstallReceiptWriter,key: *u8,value: i64) -> i64 |
| 2718 | func ma_install_receipt_fields(w: *NxInstallReceiptWriter,status: i64,when: i64,request: *NxInstallRequest,result: *NxRegisteredInstallResult) -> i64 |
| 2772 | func ma_install_receipt_emit(w: *NxInstallReceiptWriter,status: i64,when: i64,request: *NxInstallRequest,result: *NxRegisteredInstallResult,destination: *u8,capacity: i64) -> i64 |
| 2782 | func ma_do_organ_run(req: *u8, req_n: i64, out: *u8) -> i64 |
| 2880 | func ma_gate_src(nm: *u8, sp: *u8) -> i64 |
| 2943 | func ma_gr_set_fixture(root: *u8, jobs: *u8, conf: *u8) -> i64 { ma_gr_root_ov = root; ma_gr_jobs_ov = jobs; ma_gr_conf_ov = conf; return 0 } called by 1: ma_do_gate_run |
| 2944 | func ma_gr_root() -> *u8 { if (ma_gr_root_ov as i64) != 0 { return ma_gr_root_ov } return MA_GR_ROOT } |
| 2945 | func ma_gr_jobs() -> *u8 { if (ma_gr_jobs_ov as i64) != 0 { return ma_gr_jobs_ov } return MA_GR_JOBS } called by 1: ma_do_gate_run |
| 2946 | func ma_gr_conf() -> *u8 { if (ma_gr_conf_ov as i64) != 0 { return ma_gr_conf_ov } return TEA_WINDOW_CONF } |
| 2948 | func ma_gr_verdict(rc: i64) -> *u8 |
| 2960 | func ma_gr_src_txt(src: i64) -> *u8 |
| 2966 | func ma_gr_jobpath(dst: *u8, jid: i64, sfx: *u8) -> i64 |
| 2977 | func ma_gr_claim(nm: *u8, pathbuf: *u8) -> i64 |
| 3006 | func ma_gate_run_finish() -> i64 |
| 3062 | func ma_gr_emit_freshness(rb: *u8, b0: i64, nm: *u8, ep: *u8) -> i64 |
| 3085 | func ma_do_gate_run(req: *u8, req_n: i64, out: *u8) -> i64 |
| 3218 | func ma_do_proc_kill(req: *u8, req_n: i64, out: *u8) -> i64 |
| 3250 | func ma_do_put_source(req: *u8, req_n: i64, out: *u8) -> i64 |
| 3297 | func ma_do_deploy(req: *u8, req_n: i64, out: *u8) -> i64 |
| 3593 | func ma_do_hostctl(req: *u8, req_n: i64, out: *u8) -> i64 |
| 3619 | func ma_do_promote_content(req: *u8, req_n: i64, out: *u8) -> i64 |
| 3687 | func mau_is_elf(path: *u8) -> i64 |
| 3702 | func ma_hexlc(c: i64) -> i64 |
| 3708 | func ma_hex_eq(hex: *u8, buf: *u8, off: i64, n: i64) -> i64 |
| 3747 | func ma_name_is_oracle(nm: *u8, n: i64) -> i64 |
| 3766 | func ma_d001_scan(path: *u8, buf: *u8) -> i64 |
| 3793 | func ma_inherits_verdict(nm: *u8, nmlen: i64) -> i64 |
| 3830 | func ma_lease_ttl_txt(secs: i64) -> *u8 |
| 3841 | func ts_retry_after_derived(b: *u8, o: i64, ttl_s: i64) -> i64 |
| 3858 | func ma_promote_lease_release(please: *u8) -> i64 |
| 3870 | func ma_promote_refuse(out: *u8, nm: *u8, kind: i64, sfx_kind: i64) -> i64 |
| 3892 | func ma_do_promote(req: *u8, req_n: i64, out: *u8) -> i64 |