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:
amosblomqvist
2026-09-29 18:14:30 +03:00
parent 00b3c23e06
commit da0cd558d0
7 changed files with 803 additions and 5 deletions
+10 -1
View File
@@ -122,7 +122,16 @@ describe("the dictation keyless seam (owner dictation trio)", () => {
const catalog = (strongProvider: string | null, ...keyedProviders: string[]): ModelCatalogResponse => ({
models: [],
defaults: null,
rolePins: { researcher: null, demoBuilder: null, visualMaker: null, extractor: null, auditor: null },
rolePins: {
researcher: null,
demoBuilder: null,
visualMaker: null,
extractor: null,
auditor: null,
partitioner: null,
problemGenerator: null,
grader: null,
},
slots: {
strong: strongProvider
? { model: { provider: strongProvider, id: `${strongProvider}/model` }, thinkingLevel: "low" }