Add mixed Claude and Codex runtimes

This commit is contained in:
thePR0M3TH3AN committed 2026-09-27 16:27:13 -04:00
1 parent 23d03b624c
commit 1c9834e3d7
12 files changed
+452 -31

No files matched your search

+7
View File
@@ -136,6 +136,7 @@ function domainFromComponent(component) {
shared_paths: [],
neighbours: [],
required_checks: [],
runtime: 'claude',
evidence: component.evidence,
};
}
@@ -151,6 +152,7 @@ export function proposeDomains({ repository, analysis }) {
id: 'core', title: 'Core project', kind: 'development',
scope: ['initial project implementation and architecture'],
not_scope: [], owned_paths: ['**'], shared_paths: [], neighbours: [], required_checks: [],
runtime: 'claude',
evidence: analysis.inventory.manifests,
});
}
@@ -162,6 +164,7 @@ export function proposeDomains({ repository, analysis }) {
not_scope: ['implementing domain features solely to make checks pass'],
owned_paths: ['test/**', 'tests/**', 'e2e/**'], shared_paths: [], neighbours: [],
required_checks: [], evidence: graph.verificationSurfaces.slice(0, 12),
runtime: 'claude',
});
}
if (graph.operationalSurfaces.some((path) => /deploy|release/i.test(path))) {
@@ -171,6 +174,7 @@ export function proposeDomains({ repository, analysis }) {
not_scope: ['feature implementation', 'deployment without configured authority'],
owned_paths: graph.operationalSurfaces.filter((path) => /deploy|release|workflow/i.test(path)).slice(0, 20),
shared_paths: [], neighbours: [], required_checks: [],
runtime: 'claude',
evidence: graph.operationalSurfaces.slice(0, 12),
});
}
@@ -274,6 +278,9 @@ export function validateApprovedProposal({ proposal, repository }) {
if (!domain.scope?.length) problems.push(`domain ${domain.id} has no scope`);
if (!Array.isArray(domain.not_scope)) problems.push(`domain ${domain.id} has no not_scope list`);
if (!domain.owned_paths?.length) problems.push(`domain ${domain.id} has no owned paths`);
if (domain.runtime !== undefined && (typeof domain.runtime !== 'string' || !domain.runtime.trim())) {
problems.push(`domain ${domain.id} has an invalid runtime`);
}
}
for (const collision of proposal?.collisions ?? []) {
if (!collision.resolution?.strategy) problems.push(`collision ${collision.domains?.join('/')} has no resolution`);
+8 -2
View File
@@ -34,7 +34,11 @@ function initialFiles({ repository, projectId, createdAt, proposal }) {
allow_force_push: false, allow_bare_stash: false,
},
synchronization: { strategy: 'dispatcher-managed', auto_merge_worktrees: false },
runtimes: { default: 'claude', claude: { model: 'opus', background: true } },
runtimes: {
default: 'claude',
claude: { model: 'opus', background: true },
codex: { sandbox: 'workspace-write', approval: 'approve-for-me' },
},
checks: proposal.checks ?? [],
resources: proposal.resources ?? [],
integration: {
@@ -42,7 +46,7 @@ function initialFiles({ repository, projectId, createdAt, proposal }) {
required_checks: (proposal.checks ?? []).map((check) => check.id),
landing_authority: ['session-manager'],
},
session_manager: { id: 'session-manager', start_last: true },
session_manager: { id: 'session-manager', runtime: 'claude', start_last: true },
domains: proposal.domains.map((domain) => ({
id: domain.id,
title: domain.title,
@@ -52,6 +56,7 @@ function initialFiles({ repository, projectId, createdAt, proposal }) {
shared_paths: domain.shared_paths ?? [],
neighbours: domain.neighbours ?? [],
required_checks: domain.required_checks ?? [],
runtime: domain.runtime ?? 'claude',
})),
};
const roster = {
@@ -61,6 +66,7 @@ function initialFiles({ repository, projectId, createdAt, proposal }) {
scope: ['routing', 'priority', 'ownership rulings', 'fleet health'],
not_scope: ['project feature implementation by default'],
neighbours: ['all'],
runtime: config.session_manager.runtime,
}, ...config.domains],
};