import { Arbiter } from '../../../src/index.js'; Arbiter.DEBUG = false; /** * Shared test graph setup for ChainRule tests. * Creates a comprehensive organizational hierarchy with users, groups, projects, * departments, budgets, facilities, and access levels. */ export function setupChainRuleTestGraph() { const arbiter = new Arbiter({ embeddingDimensions: 256 }); // Configure basic relation types arbiter.setRelationConfig('member_of', { type: 'direct' }); arbiter.setRelationConfig('parent', { type: 'direct' }); arbiter.setRelationConfig('can_edit', { type: 'direct' }); arbiter.setRelationConfig('has_budget', { type: 'direct' }); arbiter.setRelationConfig('has_cost', { type: 'direct' }); arbiter.setRelationConfig('belongs_to', { type: 'direct' }); arbiter.setRelationConfig('manages', { type: 'direct' }); arbiter.setRelationConfig('located_in', { type: 'direct' }); arbiter.setRelationConfig('has_access_level', { type: 'direct' }); // Create organizational hierarchy arbiter.addNode('user:alice', 'user'); arbiter.addNode('user:bob', 'user'); arbiter.addNode('user:charlie', 'user'); arbiter.addNode('user:diana', 'user'); arbiter.addNode('group:engineering', 'group'); arbiter.addNode('group:qa', 'group'); arbiter.addNode('group:management', 'group'); arbiter.addNode('project:web-app', 'project'); arbiter.addNode('project:mobile-app', 'project'); arbiter.addNode('project:ai-platform', 'project'); arbiter.addNode('department:tech', 'department'); arbiter.addNode('department:ops', 'department'); arbiter.addNode('budget:tech-2024', 'budget'); arbiter.addNode('budget:ops-2024', 'budget'); arbiter.addNode('facility:hq', 'facility'); arbiter.addNode('facility:remote', 'facility'); arbiter.addNode('access:level-3', 'access_level'); arbiter.addNode('access:level-5', 'access_level'); // Set up membership relationships arbiter.addRelation('user:alice', 'member_of', 'group:engineering'); arbiter.addRelation('user:bob', 'member_of', 'group:qa'); arbiter.addRelation('user:charlie', 'member_of', 'group:management'); arbiter.addRelation('user:diana', 'member_of', 'group:engineering'); // Set up group ownership of projects arbiter.addRelation('group:engineering', 'manages', 'project:web-app'); arbiter.addRelation('group:engineering', 'manages', 'project:ai-platform'); arbiter.addRelation('group:qa', 'manages', 'project:mobile-app'); // Set up project budgets with values arbiter.addRelation('project:web-app', 'has_budget', 'budget:tech-2024', { value: 500000 }); arbiter.addRelation('project:ai-platform', 'has_budget', 'budget:tech-2024', { value: 1200000 }); arbiter.addRelation('project:mobile-app', 'has_budget', 'budget:ops-2024', { value: 300000 }); // Set up project costs arbiter.addRelation('project:web-app', 'has_cost', 'budget:tech-2024', { value: 450000 }); arbiter.addRelation('project:ai-platform', 'has_cost', 'budget:tech-2024', { value: 1100000 }); arbiter.addRelation('project:mobile-app', 'has_cost', 'budget:ops-2024', { value: 280000 }); // Set up hierarchical relationships arbiter.addRelation('group:engineering', 'belongs_to', 'department:tech'); arbiter.addRelation('group:qa', 'belongs_to', 'department:ops'); arbiter.addRelation('group:management', 'belongs_to', 'department:tech'); // Set up access levels arbiter.addRelation('department:tech', 'has_access_level', 'access:level-5'); arbiter.addRelation('department:ops', 'has_access_level', 'access:level-3'); // Set up physical locations arbiter.addRelation('user:alice', 'located_in', 'facility:hq'); arbiter.addRelation('user:bob', 'located_in', 'facility:remote'); arbiter.addRelation('user:charlie', 'located_in', 'facility:hq'); arbiter.addRelation('user:diana', 'located_in', 'facility:remote'); return arbiter; }