# AIE018-LAB1 — Qualified Tool Registry

Inspect each synthetic case in `fixtures/cases.json` and implement `evaluate(case)` in `starter.py`.

Your result must contain these eight fields: `action`, `qualification_status`, `identity_match`, `schema_match`, `permission_match`, `network_match`, `eligibility`, and `decision_reason_class`.

Rules to preserve:
- discovery metadata does not grant qualification;
- exact server/tool/protocol/schema/permission/side-effect/data/network evidence owns qualification;
- decisive drift suspends or creates a new candidate until evidence is renewed;
- stale evidence does not silently remain qualified;
- workflow allowlisting is checked after qualification and can block one invocation without rewriting qualification history;
- absence from an external discovery listing does not by itself erase a still-verifiable local qualified record.

Run `python run_checks.py` for learner-visible structural checks. The hidden evaluation checks the decision matrix.
