practice slice 3B — the practice agents: partitioner, generator, grader
src/agent/subagents/practice.ts: createPracticeAgents(deps) with the ExtractionModels mirror (per-stage engine overrides + engineFor + providerKeyMissing + refuseIfStagesUnready, all three roles strong-tier). Generator doctrine = the owner's problem-engineering framework verbatim (minus Sources) + Part III wiring section per the green-lit amendments (FULL SET input with minimal-use doctrine; degradation never in meta-commentary). Partitioner: true-partition doctrine, validate via chainCoverage + exactly-once + unknown-ids, error-back retries through runSubmitAgent's new validate hook (ToolInputError → error tool result). Generator: echo law (chains set === target). Grader: verdict union + nonempty feedback (schema-enforced). renderChains/renderPropositions/ renderParams/renderPreviousProblems. BACKGROUND_MODEL_ROLES extended with the practice trio (settings override symmetry). runSubmitAgent gains the validate seam (null = accept). 16-test faux-engine suite incl. retry paths, refusal gates, neverSubmitted.
This commit is contained in:
@@ -49,7 +49,7 @@ describe("parseAgentSettingsBody", () => {
|
||||
});
|
||||
const bad = parseAgentSettingsBody({ models: { teacher: {} } });
|
||||
assert.equal(bad.ok, false);
|
||||
if (!bad.ok) assert.match(bad.error, /unknown role "teacher" \(supported: researcher, demoBuilder, visualMaker, extractor, auditor\)/);
|
||||
if (!bad.ok) assert.match(bad.error, /unknown role "teacher" \(supported: researcher, demoBuilder, visualMaker, extractor, auditor, partitioner, problemGenerator, grader\)/);
|
||||
const malformed = parseAgentSettingsBody({ models: { researcher: { model: { provider: 1, id: "x" } } } });
|
||||
assert.equal(malformed.ok, false);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user