Skip to content

Final validation: tiny-harness: A tiny agent harness! (issue-3) ​

The evidence node's proof: what is presented to the user to show the acceptance criteria are met. Summarised from the executed verification — testing-plan.md's Verification results — and mapped onto the acceptance criteria rather than re-derived. Raw captures sit beside this file under evidence/.

Everything below ran on 2026-10-10 at the head of the stacked series (PR #15), after the review rounds; the counts are the results table's.

Final validation evidence ​

Acceptance criterionHow it was provedWhere
R1 entities and registryunit tests of the registry (PEP 440, *, not-found, remote protocol, override); API snapshotunit.md, contract.md
R2 hooks on every operationunit tests of the chain, pre/in/post replacement, abort, remote executors; integration: activity.failed/activity.retried between attemptsunit.md, integration.md (durable scenarios)
R3 pluginsunit tests of the loader; security tests of path escape and ${VAR} rules; the demo plugin loaded liveunit.md, security.md, e2e.md
R4 system prompt, R5 skillsunit tests of sections, front matter, disclosure levels; the demo's support-agent skill loaded by load_skill in the e2e traceunit.md, e2e.md
R6 tools through MCPunit tests of validation and idempotency; security tests of unknown tools and schema drift; the demo's two stdio servers called liveunit.md, security.md, e2e.md
R7 remote agentsintegration: delegation to a second harness tracks the remote task; security: a card requiring unsupported extensions refusedintegration.md, security.md
R8 task, R9 planunit tests; task extension and intrinsic schemas pinned; plan visible in both renderersunit.md, contract.md, ui/axe.md
R10 context windowunit tests of ordering, never-compact set, compaction record, untrusted framing; cached_tokens from call 2 in the live rununit.md, e2e.md
R11 persistenceunit tests of the store; push tokens encrypted; retention sweep in the heartbeat scenariosunit.md, security.md, integration.md
R12, R13 participants and channelsintegration: help request → INPUT_REQUIRED → reply resumes; non-member refused; fail-closed assertionsintegration.md, security.md
R14 A2A serverintegration: every verb, streaming, replay after restart, unadvertised extension refused; agent card snapshotintegration.md, contract.md
R15 inbox and eventsintegration: a message to an executing task drained next iteration, returnImmediately, push configs, task envelopes on an existing taskintegration.md
R16 heartbeatintegration: schedule, poll, snapshot, sweepintegration.md
R17 observabilityintegration: one span per operation with GenAI attributes; redaction tests; the live traceintegration.md, security.md, e2e/trace.json
R18 modelsunit tests of both adapters, retries off, wire names; gpt-6.1-sol liveunit.md, e2e.md
R19 durable executionintegration: crash mid-activity resumes without a second LLM call, non-idempotent failure not retried, continue-as-new; live kill -9 at two points with the activity attempt tables from Temporal historyintegration.md, crash-recovery.md
R20 surfaces and renderersTUI snapshots and keys; web unit, visual and axe suites; both surfaces captured live, the second-surface subscriptionui/axe.md, evidence/ui/
R21 configurationunit tests of secrets and unknown keys; the demo configurationunit.md, gates.md
R22 code structure and typingpyright strict 0 errors, no Any; layout testsgates.md, unit.md
R23 contract tests29 contract tests, 14 snapshotscontract.md
R24 the demothe e2e run: plan, model, MCP tools, A2UI card with an action, a two-turn help request, COMPLETED; both renderers; crash recovery on Temporal Cloude2e.md, crash-recovery.md, ui/
Security considerations (abuse cases 2–9)one negative test per casesecurity.md, security-review.md

Not run: T11, the owner's manual walkthrough, closed by the approver's decision (manual-walkthrough.md).