通过 causal-learner MCP 工具执行 Scenario D:水垢学习闭环。提交误预测观测 → 记录修复 → 触发归纳 → 验证因果图更新 → 计算学习指标。无需编译。
验证完整学习回路在 MCP/图层真正闭合:
suggest_causes 可检索到 calcium 作为原因所有 submit_observation 调用中,facts 数组每项必须是:
{ "pred": "<谓词名>", "value": "<值>", "args": { ... } }
不要使用 type/description 字段。
调用 mcp__causal-learner__set_test_mode 进入测试命名空间:
{ "enabled": true }
调用 mcp__causal-learner__graph_stats 记录基线(atoms_count, refs_count)。
调用 mcp__causal-learner__submit_observation 提交正常执行:
{
"facts": [{"pred": "brew_outcome", "value": "brew_success", "args": {"program": "BrewCoffeeV1", "hasPower": true}}],
"context": {"program": "BrewCoffeeV1", "hasPower": true, "outcome": "brew_success"}
}
调用 mcp__causal-learner__submit_observation 提交已知失败:
{
"facts": [{"pred": "brew_outcome", "value": "brew_failed", "args": {"program": "BrewCoffeeV1", "hasPower": false}}],
"context": {"program": "BrewCoffeeV1", "hasPower": false, "outcome": "brew_failed"}
}
断言 D1:两条观测均成功写入。
调用 mcp__causal-learner__submit_observation 提交 calcium 失败场景(V1 误预测):
{
"facts": [
{"pred": "brew_outcome", "value": "brew_failed", "args": {"program": "BrewCoffeeV1", "calciumBlocked": true}},
{"pred": "prediction_mismatch", "value": true, "args": {"predicted": "brew_success", "actual": "brew_failed"}}
],
"context": {
"program": "BrewCoffeeV1",
"calciumBlocked": true,
"predicted": "brew_success",
"actual": "brew_failed",
"errorKind": "outcome_mismatch"
}
}
断言 D2:observation 返回成功,误预测被记录。
记录 D2 步骤返回的 storyId,调用 mcp__causal-learner__record_fix:
{
"eventId": "<D2 返回的 storyId>",
"fix": {
"fixCommit": "fix/BrewCoffeeV2-calcium-check",
"fixDescription": "升级到 BrewCoffeeV2:在 failsWhen 中增加 calciumBlocked=true 条件",
"filesChanged": ["BrewCoffee.ts"],
"testsPassed": true
}
}
断言 D3:record_fix 成功,修复被写入图,状态变为 resolved。
调用 mcp__causal-learner__trigger_induction:
{}
此步让系统从已有观测(V1 power failure + calcium misprediction)生成 regulations。
调用 mcp__causal-learner__submit_observation 提交 V2 正确预测:
{
"facts": [{"pred": "brew_outcome", "value": "brew_failed", "args": {"program": "BrewCoffeeV2", "calciumBlocked": true, "correct": true}}],
"context": {"program": "BrewCoffeeV2", "calciumBlocked": true, "outcome": "brew_failed", "correct": true}
}
调用 mcp__causal-learner__submit_observation 提交 V2 无回归:
{
"facts": [{"pred": "brew_outcome", "value": "brew_success", "args": {"program": "BrewCoffeeV2", "hasPower": true, "calciumBlocked": false}}],
"context": {"program": "BrewCoffeeV2", "hasPower": true, "calciumBlocked": false, "outcome": "brew_success"}
}
断言 D4:两条 V2 观测均成功写入。
调用 mcp__causal-learner__suggest_causes:
{
"facts": [{"pred": "brew_outcome", "value": "brew_failed"}]
}
断言 D5:结果中出现 calciumBlocked 或 calcium 相关原因;若图尚无相关 regulations 则记 SKIP。
调用 mcp__causal-learner__causal_search: