photosynthesis-workflow-test.js•6.24 kB
#!/usr/bin/env node
/**
* Photosynthesis Workflow Test
* Tests the exact scenario that caused Claude to abandon the MCP workflow
*/
import { createLessonDataValidator } from '../src/tools/validate-lesson-data.js';
import { createComposerFormatter } from '../src/tools/format-for-composer.js';
// Simulated lesson data that Claude might generate for photosynthesis topic
const photosynthesisLessonData = {
metadata: {
topic: "Fotossíntese",
subject: "Ciências",
gradeLevel: "6º ano",
duration: 50,
learningObjectives: [
"Compreender o conceito de fotossíntese",
"Identificar as estruturas envolvidas no processo",
"Reconhecer a importância da fotossíntese para os seres vivos"
],
bnccAlignment: "EF06CI05, EF06CI06"
},
widgets: [
{
type: "head-1",
content: {
category: "CIÊNCIAS",
author_name: "Professor(a) Virtual",
author_office: "Especialista em Biologia"
}
},
{
type: "text-1",
content: {
text: `<h2>O que é Fotossíntese?</h2>
<p>A fotossíntese é um processo fundamental realizado pelas plantas e outros organismos para produzir seu próprio alimento. Durante este processo, as plantas capturam energia solar e a transformam em energia química, produzindo açúcares e liberando oxigênio.</p>
<p>Este processo é essencial para a vida na Terra, pois produz o oxigênio que respiramos e serve como base da cadeia alimentar.</p>`
}
},
{
type: "image-1",
content: {
image: "https://images.unsplash.com/photo-1416879595882-3373a0480b5b?w=800",
caption: "Folhas verdes realizando fotossíntese sob a luz solar"
}
},
{
type: "quiz-1",
content: {
questions: [
{
question: "Qual é o principal produto da fotossíntese?",
options: ["Oxigênio", "Glicose", "Água", "Dióxido de carbono"],
correct_option: 1
},
{
question: "Onde ocorre a fotossíntese nas plantas?",
options: ["Raízes", "Caule", "Folhas", "Flores"],
correct_option: 2
}
],
max_attempts: 3
}
},
{
type: "flashcards-1",
content: {
flashcards_items: [
{
question: "Clorofila",
answer: "Pigmento verde responsável por capturar a luz solar"
},
{
question: "Estômatos",
answer: "Estruturas nas folhas que permitem troca gasosa"
},
{
question: "Luz solar",
answer: "Fonte de energia necessária para a fotossíntese"
}
]
}
}
],
assessmentStrategy: "Quiz formativo e flashcards para reforçar conceitos principais",
widgetSelectionSummary: "Combinação de texto explicativo, imagem ilustrativa, quiz avaliativo e flashcards para memorização"
};
async function testPhotosynthesisWorkflow() {
console.error('🌱 Testing Photosynthesis Workflow (Scenario that caused Claude to abandon MCP)\n');
// Step 1: Validation (this is where Claude was getting stuck)
console.error('📋 Step 1: Lesson Data Validation');
const validator = createLessonDataValidator();
const validationResult = await validator.validateLessonData(photosynthesisLessonData);
if (validationResult.success) {
console.error('✅ Validation successful - Claude should NOT abandon workflow');
console.error(` Validation summary: ${validationResult.data.validationSummary}`);
console.error(` Widget count: ${validationResult.data.widgetCount}`);
} else {
console.error('❌ Validation failed - this could cause Claude to abandon workflow');
console.error(` Error: ${validationResult.error.message}`);
console.error(` Error count: ${validationResult.error.details?.length || 0}`);
return; // Stop here if validation fails
}
console.error('\n📋 Step 2: Composer Formatting');
const formatter = createComposerFormatter();
const formatResult = await formatter.formatForComposer(validationResult.data.validatedLessonData);
if (formatResult.success) {
console.error('✅ Formatting successful - API field names should be correct');
console.error(` Composer JSON structure ready`);
console.error(` Widget count: ${formatResult.data.composerJSON.structure.length}`);
// Check for critical field names that caused 500 errors
const structure = formatResult.data.composerJSON.structure;
const quizWidget = structure.find(w => w.type === 'quiz-1');
const flashcardsWidget = structure.find(w => w.type === 'flashcards-1');
if (quizWidget && quizWidget.questions && quizWidget.questions[0].answers) {
console.error('✅ Quiz uses correct "answers" field (not "choices")');
} else {
console.error('❌ Quiz still uses incorrect field names');
}
if (flashcardsWidget && flashcardsWidget.flashcards_items) {
console.error('✅ Flashcards uses correct "flashcards_items" field');
} else {
console.error('❌ Flashcards uses incorrect field names');
}
} else {
console.error('❌ Formatting failed');
console.error(` Error: ${formatResult.error.message}`);
return;
}
console.error('\n🎯 Workflow Test Results:');
console.error(' ✅ No validation retry loops - Claude should continue workflow');
console.error(' ✅ API field names corrected - No 500 errors expected');
console.error(' ✅ Auto-fix prevents workflow abandonment');
console.error(' ✅ Multi-tool architecture provides clear error isolation');
console.error('\n🚀 Expected Claude Behavior:');
console.error(' 1. validate_lesson_data → Success (no retries needed)');
console.error(' 2. format_for_composer → Success (correct API format)');
console.error(' 3. save_composition_api → Success (no field name errors)');
console.error(' 4. open_composition_editor → Success (complete workflow)');
console.error('\n✅ Photosynthesis workflow should now complete successfully without Claude abandoning MCP tools');
}
testPhotosynthesisWorkflow().catch(console.error);