ADPT-005 | device manifests validate against the MHS schema | PASS | CL0 | 1 device manifest(s) validate against device.schema.json |
TCON-001 | the profile matches the subject kind and every device mode | PASS | CL0 | endpoint subject under MHS-Sim; device modes simulated |
CAP-035 | bound classes are catalogue classes or extensions | PASS | CL0 | 8 binding(s) name catalogue classes or extension namespaces |
CAP-017 | bindings do not lower their class risk floor | PASS | CL0 | 6 catalogue binding(s) respect their class risk floor |
CAP-016 | binding schemas do not drift from their class (advisory) | FAIL | CL0 | mhs://localhost:7400/lab/conveyor-workcell: cap.actuation.valve.v1 property-not-in-class at input.gate |
TCAP-002 | bindings target a resource kind their class accepts (advisory) | FAIL | CL0 | mhs://localhost:7400/lab/conveyor-workcell: cap.actuation.valve.v1 bound to resource kind 'world.sim'; mhs://localhost:7400/lab/conveyor-workcell: cap.motion.stop.v1 bound to resource kind 'world.sim' |
CON-031 | hardware is not actuated without allow_actuation (suite check) | PASS | CL0 | no hardware or hybrid device: the actuation gate was not engaged |
CON-032 | e-stops are sent only to software/both e-stops (suite check) | PASS | CL0 | mhs.safety.estop sent 3 time(s) and mhs.safety.reset 4 time(s), only to software/both e-stops |
TPROTO-901 | every mandatory CL1 method is implemented (dispatch-level probe) | PASS | CL1 | 8/8 CL1 mandatory methods reached dispatch; probes: mhs.hello=present, mhs.devices.list=present, mhs.devices.get=present, mhs.schema.get=present, mhs.session.open=present, mhs.session.close=MHS.SESSION.UNKNOWN, mhs.resource.read=present, mhs.evidence.export=present |
TPROTO-902 | every mandatory CL2 method is implemented (dispatch-level probe) | PASS | CL2 | 4/4 CL2 mandatory methods reached dispatch; probes: mhs.command=present, mhs.subscribe=MHS.PROTOCOL.INVALID_PARAMS, mhs.unsubscribe=MHS.SESSION.UNKNOWN, mhs.operations.get=MHS.OPERATION.UNKNOWN |
TPROTO-903 | every mandatory CL3 method is implemented (dispatch-level probe) | PASS | CL3 | 2/2 CL3 mandatory methods reached dispatch; probes: mhs.operations.cancel=MHS.OPERATION.UNKNOWN, mhs.safety.status=present |
PROTO-013 | mhs.hello negotiates the protocol and lists devices | PASS | CL1 | hello ok: 1.0, 1 device(s) |
PROTO-021 | devices.list/get return complete manifests | PASS | CL1 | devices.list/get ok for 1 device(s) |
PROTO-023 | resource.read returns a verifiable revision and state hash | PASS | CL1 | read workcell@r0 hash verifies |
PROTO-024 | reads are stable without mutations | PASS | CL1 | read is stable at revision 0 |
SESS-001 | session.open returns a grant, mode and expiry | PASS | CL1 | session opened with 8 granted capability(s) |
MODE-002 | session mode mismatch is rejected | PASS | CL1 | mode 'hardware' rejected with MHS.SESSION.MODE_MISMATCH |
SESS-005 | session heartbeat refreshes the lease | PASS | CL3 | session heartbeat refreshed the lease |
OP-001 | a valid command returns a completed receipt | PASS | CL2 | cap.world.step.v1 (invoke, class example input) completed r0->r1; revision advanced; read-verb cap.world.state.v1 (class example input) completed and kept the revision at r1 |
TCAP-001 | a completed command's output validates against its output_schema | PASS | CL2 | cap.world.step.v1 output validates against the binding output_schema |
TCAP-003 | a probe command has an observable effect (writes change state) | PASS | CL2 | invoke cap.world.step.v1 changed resource 'workcell' state |
OP-003 | command_id idempotency replays without re-execution | PASS | CL2 | duplicate command_id with identical input replayed without a second effect |
OP-004 | command_id reuse with different input is a conflict | PASS | CL2 | command_id reuse with different input rejected with MHS.CONFLICT.COMMAND_ID_REUSE |
OP-005 | expected_revision conflicts are rejected | PASS | CL2 | stale expected_revision rejected with MHS.CONFLICT.REVISION |
PROTO-027 | schema-invalid input is rejected without effects | PASS | CL2 | input with a wrongly typed 'ticks' rejected with MHS.CAPABILITY.INPUT_INVALID |
PROTO-014 | unknown capabilities are rejected | PASS | CL2 | unknown capability rejected with MHS.CAPABILITY.UNKNOWN |
PROTO-030 | operations can be queried for commands | PASS | CL2 | operations.get(op_01M6PPRAMG45TG86XXME6H5ZP4) returns the receipt snapshot |
PROTO-011 | deadlines surface as a timeout outcome | PASS | CL2 | deadline exceeded on cap.world.step.v1 surfaced as MHS.OUTCOME.TIMEOUT (status 'unknown') |
OP-011 | cancellation resolves to a declared safe state | SKIP | CL3 | endpoint does not declare a cancellable capability; OP-011 is not applicable |
OP-013 | unknown-outcome semantics survive a lost receipt | PASS | CL2 | lost response surfaced as MHS.OUTCOME.UNKNOWN (status 'unknown'; observed r9) |
SAFE-001 | safety.status exposes risk, e-stop, interlocks and safe state | PASS | CL3 | safety.status ok: risk R1, 1 interlock(s) |
SAFE-045 | hardware R2+ devices declare an independent stop path | SKIP | CL3 | no hardware or hybrid device at R2/R3; SAFE-045 is not applicable |
SAFE-029 | safe_state.achieved_by resolves to bound, permit-free actions | PASS | CL3 | safe_state.achieved_by resolves on 1 device(s) |
TSAFE-001 | e-stop latches, blocks commands and reset releases it | PASS | CL3 | e-stop latched within its declared latency, blocked commands, reset released the latch without auto-resume, a new command recovered |
SAFE-028 | the e-stop reaches the device and its safe state | PASS | CL3 | e-stop reached mhs://localhost:7400/lab/conveyor-workcell: latched, safe state achieved in 0 ms; driver estop() invoked |
SAFE-011 | open interlocks block actuation | PASS | CL3 | refused with no bridge call: cap.world.step.v1 (door_closed open: MHS.SAFETY.INTERLOCK_OPEN) |
SAFE-012 | interlocks in an unknown state block actuation | PASS | CL3 | refused with no bridge call: cap.world.step.v1 (door_closed unknown: MHS.SAFETY.INTERLOCK_OPEN) |
SAFE-041 | reset is refused while a hard interlock is open | PASS | CL3 | reset returned 'rejected' MHS.SAFETY.RESET_REFUSED while 'door_closed' was open |
SAFE-031 | gated capabilities require a valid single-use permit | PASS | CL3 | permit required, accepted for the bound input, rejected for a different input (MHS.SAFETY.PERMIT_INVALID) |
SAFE-014 | safety envelope bounds are enforced before effects | PASS | CL3 | 7 out-of-limit probe(s) refused with MHS.SAFETY.ENVELOPE_VIOLATION before any effect (0 inside the schema range), covering 4 limited path(s): cap.actuation.valve.v1 gate, cap.world.step.v1 ticks, x-cap.mhs-reference.feed.v1 count, x-cap.mhs-reference.start.v1 speed_mm_s; values gate='mhs-conformance-not-allowed', ticks=10001, ticks=0, count=33, count=0, speed_mm_s=201, speed_mm_s=-1 |
SAFE-050 | MHS.SAFETY.NOT_CERTIFIED is disclosed in hello | PASS | CL3 | hello advertises MHS.SAFETY.NOT_CERTIFIED |
EVID-015 | evidence exports and verifies offline | PASS | CL4 | evidence bundle verified offline (15 receipts, head sha256:7e40e7047b696ed89937879884fb14767f67412b1b5e3414162302da58d6db97) |
EVID-016 | tampered evidence is detected | PASS | CL4 | tampered bundle rejected: {'seq': 1, 'mhs_code': 'MHS.EVIDENCE.CHAIN_BROKEN', 'detail': "digest mismatch (recomputed sha256:cb24c8b396eeaa8e311366c0839d16e945b0517921ccc85dab562b05c2727f3e, receipt claims 'sha256:f8e7cd3359cdbcd3b5a332b561fbbe017e2edaa3f91a09321a3d3252551fe759')"} |
EVID-010 | receipt evidence links form a hash chain | PASS | CL4 | evidence chain links verified across 15 receipt(s) |
FID-005 | simulated devices disclose a complete fidelity contract | PASS | CL4 | fidelity contracts disclosed for 1 device(s) |
FID-016 | restore reproduces an identical state_hash sequence | PASS | CL4 | restored snapshot reproduced identical state_hash sequence (2 commands) |
FID-025 | seeded replay reproduces identical sequences for the same seed | SKIP | CL4 | primary device does not declare seeded determinism |
MODE-005 | replay endpoints are read-only but readable and snapshotable | SKIP | CL1 | endpoint does not expose a replay-mode device |