Repository navigation
Conversation
Add ParamSpec.intake_field and a fail-closed gate that refuses taught-tool parameter values which disagree with operator-registered intake provenance. Wire the gate into AgentBridge and RunService. Pre-register three synthetic intake-borne injection cases with unit tests.
Independent adversarial review: BLOCKHead: What I ran
What holds up
Findings
No app-specific code: the generality rule holds. |
Part of #1890
What changed
Taught MCP/workflow tool parameters can declare which intake field they may come from (
ParamSpec.intake_field). Before a run, a fail-closed gate compares the proposed values to operator-registered intake provenance (*.provenance.jsonfromopenadapt-flow intake) and refuses mismatches. Refusal text names parameters only, never values. The same gate runs on the legacy per-workflow run tools and onrun_workflow.How tested
pytest -q tests/test_intake_param_gate.py— 8 passed (3 pre-registered steered-injection cases, missing provenance, unbound skip, rename binding, fixture id list, ParamSpec dump compatibility)pytest -q tests/test_intake_param_gate.py tests/test_provenance.py tests/test_intake.py— 38 passed, 1 skippedintake/param_gate.pymade the new tests fail to import (proves they are not vacuous on base)ruff check/ruff format --checkon touched filesWhat was not tested
openadapt-agent servewith a real taught tool registration CLI flag (registration is viaAgentBridge.register_intake_provenance)Do not merge until reviewed.