Rocko's round 2 candidate, approved by Darkwing (#1519 comment 26757).
build.patch 40d7e838, manifest 61519059, 24 files under packages/bus,
schema v3b (179ffe35, lead decision 60). Integration gate in a git
worktree of 942dca9e (S1 in the tree) plus the patch: bus 43/43 and
business 60/60 on Node 24 and 26, every package test and every
scripts/test-*.sh green, test-task 98/98 with the live-provider cases.
Rulings from lead decisions 62 and 63: the human proof is cooperative in
slice 1, and a self-raised cross-role decision routes to the human.
Single-use gated approvals follow in row 43.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
22 lines
816 B
JavaScript
22 lines
816 B
JavaScript
import { BusError } from './broker.mjs';
|
|
// Adapt S1's validated loadBusiness + resolveInstance outputs, without loading or writing files.
|
|
export function busBusiness(business, resolved) {
|
|
if (!business || typeof business.id !== 'string' || !business.roles || !resolved)
|
|
throw new BusError('invalid-business');
|
|
const out = structuredClone(business);
|
|
for (const role of Object.keys(out.roles)) {
|
|
const r = resolved[role];
|
|
if (
|
|
!r ||
|
|
r.business !== business.id ||
|
|
r.instance !== role ||
|
|
r.definition !== out.roles[role].definition ||
|
|
!r.limits?.authority
|
|
)
|
|
throw new BusError('invalid-resolution');
|
|
out.roles[role].authority = structuredClone(r.limits.authority);
|
|
out.roles[role].credentials = structuredClone(r.credentials ?? {});
|
|
}
|
|
return out;
|
|
}
|