mindspace: guard split-service contract drift
This commit is contained in:
@@ -83,6 +83,25 @@ const userAuthSource = read('user-auth.mjs');
|
||||
const mindSpaceRpcServerSource = read(
|
||||
'mindspace-service/mindspace-rpc-server.mjs',
|
||||
);
|
||||
const mindSpaceServiceServerSource = read(
|
||||
'mindspace-service/server.mjs',
|
||||
);
|
||||
const remoteAdapterSource = read(
|
||||
'mindspace-remote-server-adapter.mjs',
|
||||
);
|
||||
const storageAdapterSource = read(
|
||||
'mindspace-storage-adapter.mjs',
|
||||
);
|
||||
const mindSpaceServiceSource = read(
|
||||
'mindspace-service.mjs',
|
||||
);
|
||||
const buildMindSpaceRuntimeSource = read(
|
||||
'scripts/build-mindspace-service-runtime.mjs',
|
||||
);
|
||||
const releaseMindSpaceServiceSource = read(
|
||||
'scripts/release-mindspace-service-prod.sh',
|
||||
);
|
||||
const packageJsonSource = read('package.json');
|
||||
const publicationServiceSource = read(
|
||||
'mindspace-publications.mjs',
|
||||
);
|
||||
@@ -220,6 +239,116 @@ requireSource(
|
||||
/'readWorkspaceHtml'/,
|
||||
'chat save contract includes workspace HTML read authority',
|
||||
);
|
||||
requireSource(
|
||||
contractSource,
|
||||
/MINDSPACE_SERVER_ADAPTER_CONTRACT_VERSION\s*=\s*2/,
|
||||
'MindSpace remote contract is explicitly versioned',
|
||||
);
|
||||
requireSource(
|
||||
contractSource,
|
||||
/MINDSPACE_SERVER_ADAPTER_REQUIRED_CAPABILITIES[\s\S]{0,240}'chat-save-authority'[\s\S]{0,240}'scoped-workspace-tools'/,
|
||||
'MindSpace remote contract advertises required authority capabilities',
|
||||
);
|
||||
requireSource(
|
||||
contractSource,
|
||||
/MINDSPACE_SERVER_ADAPTER_REQUIRED_BINDINGS[\s\S]*workspaceToolService[\s\S]{0,240}'writeBinaryFile'/,
|
||||
'MindSpace remote contract declares required method-level bindings',
|
||||
);
|
||||
requireSource(
|
||||
contractSource,
|
||||
/createMindSpaceServerAdapterContractPayload\(\{/,
|
||||
'MindSpace contract payload is generated from the shared contract module',
|
||||
);
|
||||
requireSource(
|
||||
remoteAdapterSource,
|
||||
/validateMindSpaceRemoteContract\(/,
|
||||
'remote adapter validates MindSpace service contract compatibility',
|
||||
);
|
||||
requireSource(
|
||||
remoteAdapterSource,
|
||||
/fetchRemoteContract\(\{[\s\S]{0,240}contractPath/,
|
||||
'remote adapter fetches /mindspace/v1/contract before startup succeeds',
|
||||
);
|
||||
requireSource(
|
||||
remoteAdapterSource,
|
||||
/async assertReady\(\)[\s\S]{0,700}validateMindSpaceRemoteContract\(/,
|
||||
'remote adapter assertReady fails fast on incompatible contracts',
|
||||
);
|
||||
requireSource(
|
||||
portalDomainBootstrapSource,
|
||||
/await mindSpaceRuntimeAdapter\.assertReady\?\.\(\)/,
|
||||
'Portal awaits MindSpace remote contract readiness during bootstrap',
|
||||
);
|
||||
requireSource(
|
||||
mindSpaceRpcServerSource,
|
||||
/createMindSpaceServerAdapterContractPayload\(\{/,
|
||||
'MindSpace RPC /contract uses the shared contract payload',
|
||||
);
|
||||
requireSource(
|
||||
mindSpaceRpcServerSource,
|
||||
/contractVersion:\s*[\s\S]{0,120}MINDSPACE_SERVER_ADAPTER_CONTRACT_VERSION/,
|
||||
'MindSpace RPC /health exposes the contract version',
|
||||
);
|
||||
requireSource(
|
||||
mindSpaceServiceServerSource,
|
||||
/readBuildInfo\(\)[\s\S]{0,320}build-info\.json/,
|
||||
'standalone MindSpace service reads runtime build-info.json',
|
||||
);
|
||||
requireSource(
|
||||
mindSpaceServiceServerSource,
|
||||
/serviceMeta:[\s\S]{0,160}buildInfo/,
|
||||
'standalone MindSpace service passes build metadata to RPC contract',
|
||||
);
|
||||
requireSource(
|
||||
buildMindSpaceRuntimeSource,
|
||||
/build-info\.json/,
|
||||
'MindSpace runtime artifact writes build-info.json',
|
||||
);
|
||||
requireSource(
|
||||
releaseMindSpaceServiceSource,
|
||||
/build-info\.json/,
|
||||
'MindSpace production release requires build-info.json',
|
||||
);
|
||||
requireSource(
|
||||
releaseMindSpaceServiceSource,
|
||||
/contract\.contractVersion !== 2/,
|
||||
'MindSpace production release rejects stale contract versions',
|
||||
);
|
||||
requireSource(
|
||||
releaseMindSpaceServiceSource,
|
||||
/missingCapabilities[\s\S]{0,240}missingBindings[\s\S]{0,240}expectedGitSha/,
|
||||
'MindSpace production release checks capabilities, methods, and gitSha',
|
||||
);
|
||||
requireSource(
|
||||
storageAdapterSource,
|
||||
/MINDSPACE_STORAGE_ADAPTER_CONTRACT_VERSION\s*=\s*1/,
|
||||
'MindSpace storage adapter contract is versioned for future backends',
|
||||
);
|
||||
requireSource(
|
||||
storageAdapterSource,
|
||||
/assertMindSpaceStorageAdapterContract\(/,
|
||||
'MindSpace storage adapter contract is executable',
|
||||
);
|
||||
requireSource(
|
||||
mindSpaceServiceSource,
|
||||
/assertMindSpaceStorageAdapterContract\(storageAdapter\)/,
|
||||
'MindSpace service facade validates injected storage adapters',
|
||||
);
|
||||
requireSource(
|
||||
packageJsonSource,
|
||||
/"audit:conversation-packages":\s*"node scripts\/audit-conversation-packages\.mjs"/,
|
||||
'conversation package audit is exposed as an npm script',
|
||||
);
|
||||
requireSource(
|
||||
packageJsonSource,
|
||||
/"trace:mindspace-artifact":\s*"node scripts\/trace-mindspace-artifact\.mjs"/,
|
||||
'MindSpace artifact trace is exposed as an npm script',
|
||||
);
|
||||
requireSource(
|
||||
packageJsonSource,
|
||||
/mindspace-conversation-package-audit\.test\.mjs/,
|
||||
'conversation package audit is included in the default test suite',
|
||||
);
|
||||
requireSource(
|
||||
localRuntimeSource,
|
||||
/createMindSpaceChatSaveService\(\{/,
|
||||
|
||||
Reference in New Issue
Block a user