authz.lock: fastapi-todos@c059889: same-sha

Verdict: PASS · 0 new invariant violations · 0 widened cells · 0 changed cells

probes639
probe time (s)104.0
coverage17/20 operations
never green (unprobed)DELETE /users/{id}, POST /auth/reset-password, POST /auth/verify
harnessvalid
appfastapi-todos@c059889
expectedPASS
whatSame SHA, second run

Identity × operation

PASS = no invariant violation in any probe of that pair; FAIL = at least one new violation; CHANGED = widened vs base without a violation. Letters: A=ALLOW D=DENY I=INCONCLUSIVE probe counts. Expand a cell for per-probe evidence (status, leaked canary owners, DB row changes with owner attribution); request/response bodies are not stored in the lock, and tokens/passwords are redacted.

operationalg_noneanonymousdeleted_userexpiredforged_siginactivesuperuseruser_auser_b
DELETE /categories/{category_id}
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS A1 D4
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 404--None
sharedbaseDENY 403--None
superuserbaseALLOW 204-delete:category:self, delete:todo_category:self, delete:todo_category:selfNone
user_abaseDENY 403--None
user_bbaseDENY 403--None
PASS A1 D4
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 404--None
sharedbaseDENY 403--None
superuserbaseDENY 403--None
user_abaseALLOW 204-delete:category:self, delete:todo_category:self, delete:todo_category:self, delete:todo_category:self, delete:todo_category:self, delete:todo_category:self, delete:todo_category:self, delete:todo_category:selfNone
user_bbaseDENY 403--None
PASS A1 D4
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 404--None
sharedbaseDENY 403--None
superuserbaseDENY 403--None
user_abaseDENY 403--None
user_bbaseALLOW 204-delete:category:self, delete:todo_category:self, delete:todo_category:self, delete:todo_category:selfNone
DELETE /todos/{todo_id}
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS A1 D4
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 404--None
sharedbaseDENY 404--None
superuserbaseALLOW 204-delete:todo:self, delete:todo_category:selfNone
user_abaseDENY 403--None
user_bbaseDENY 403--None
PASS A1 D4
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 404--None
sharedbaseDENY 404--None
superuserbaseDENY 403--None
user_abaseALLOW 204-delete:todo:self, delete:todo_category:selfNone
user_bbaseDENY 403--None
PASS A1 D4
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 404--None
sharedbaseDENY 404--None
superuserbaseDENY 403--None
user_abaseDENY 403--None
user_bbaseALLOW 204-delete:todo:self, delete:todo_category:selfNone
DELETE /users/{id}
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D2 I3
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 404--None
sharedbaseDENY 404--None
superuserbaseINCONCLUSIVE 500--None
user_abaseINCONCLUSIVE 500--None
user_bbaseINCONCLUSIVE 500--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 403--None
sharedbaseDENY 403--None
superuserbaseDENY 403--None
user_abaseDENY 403--None
user_bbaseDENY 403--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 403--None
sharedbaseDENY 403--None
superuserbaseDENY 403--None
user_abaseDENY 403--None
user_bbaseDENY 403--None
GET /categories
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS A1
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200self-None
PASS A1
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200self-None
PASS A1
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200self-None
GET /priorities
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS A1
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200--None
PASS A1
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200--None
PASS A1
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200--None
GET /todos
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS A1
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200self-None
PASS A1
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200self-None
PASS A1
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200self-None
GET /users/me
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS A1
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200self-None
PASS A1
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200self-None
PASS A1
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200self-None
GET /users/{id}
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
sharedbaseDENY 401--None
superuserbaseDENY 401--None
user_abaseDENY 401--None
user_bbaseDENY 401--None
PASS A3 D2
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 404--None
sharedbaseDENY 404--None
superuserbaseALLOW 200self-None
user_abaseALLOW 200user_a-None
user_bbaseALLOW 200user_b-None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 403--None
sharedbaseDENY 403--None
superuserbaseDENY 403--None
user_abaseDENY 403--None
user_bbaseDENY 403--None
PASS D5
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 403--None
sharedbaseDENY 403--None
superuserbaseDENY 403--None
user_abaseDENY 403--None
user_bbaseDENY 403--None
PATCH /users/me
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200selfupdate:user:selfNone
-hostileALLOW 200selfupdate:user:selfNone
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200selfupdate:user:selfNone
-hostileALLOW 200selfupdate:user:selfNone
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200selfupdate:user:selfNone
-hostileALLOW 200selfupdate:user:selfNone
PATCH /users/{id}
PASS D10
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
nonexistenthostileDENY 401--None
sharedbaseDENY 401--None
sharedhostileDENY 401--None
superuserbaseDENY 401--None
superuserhostileDENY 401--None
user_abaseDENY 401--None
user_ahostileDENY 401--None
user_bbaseDENY 401--None
user_bhostileDENY 401--None
PASS D10
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
nonexistenthostileDENY 401--None
sharedbaseDENY 401--None
sharedhostileDENY 401--None
superuserbaseDENY 401--None
superuserhostileDENY 401--None
user_abaseDENY 401--None
user_ahostileDENY 401--None
user_bbaseDENY 401--None
user_bhostileDENY 401--None
PASS D10
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
nonexistenthostileDENY 401--None
sharedbaseDENY 401--None
sharedhostileDENY 401--None
superuserbaseDENY 401--None
superuserhostileDENY 401--None
user_abaseDENY 401--None
user_ahostileDENY 401--None
user_bbaseDENY 401--None
user_bhostileDENY 401--None
PASS D10
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
nonexistenthostileDENY 401--None
sharedbaseDENY 401--None
sharedhostileDENY 401--None
superuserbaseDENY 401--None
superuserhostileDENY 401--None
user_abaseDENY 401--None
user_ahostileDENY 401--None
user_bbaseDENY 401--None
user_bhostileDENY 401--None
PASS D10
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
nonexistenthostileDENY 401--None
sharedbaseDENY 401--None
sharedhostileDENY 401--None
superuserbaseDENY 401--None
superuserhostileDENY 401--None
user_abaseDENY 401--None
user_ahostileDENY 401--None
user_bbaseDENY 401--None
user_bhostileDENY 401--None
PASS D10
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
nonexistenthostileDENY 401--None
sharedbaseDENY 401--None
sharedhostileDENY 401--None
superuserbaseDENY 401--None
superuserhostileDENY 401--None
user_abaseDENY 401--None
user_ahostileDENY 401--None
user_bbaseDENY 401--None
user_bhostileDENY 401--None
PASS A6 D4
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 404--None
nonexistenthostileDENY 404--None
sharedbaseDENY 404--None
sharedhostileDENY 404--None
superuserbaseALLOW 200selfupdate:user:selfNone
superuserhostileALLOW 200selfupdate:user:selfNone
user_abaseALLOW 200user_aupdate:user:user_aNone
user_ahostileALLOW 200user_aupdate:user:user_a[priv:is_superuser]None
user_bbaseALLOW 200user_bupdate:user:user_bNone
user_bhostileALLOW 200user_bupdate:user:user_b[priv:is_superuser]None
PASS D10
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 403--None
nonexistenthostileDENY 403--None
sharedbaseDENY 403--None
sharedhostileDENY 403--None
superuserbaseDENY 403--None
superuserhostileDENY 403--None
user_abaseDENY 403--None
user_ahostileDENY 403--None
user_bbaseDENY 403--None
user_bhostileDENY 403--None
PASS D10
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 403--None
nonexistenthostileDENY 403--None
sharedbaseDENY 403--None
sharedhostileDENY 403--None
superuserbaseDENY 403--None
superuserhostileDENY 403--None
user_abaseDENY 403--None
user_ahostileDENY 403--None
user_bbaseDENY 403--None
user_bhostileDENY 403--None
POST /auth/forgot-password
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
POST /auth/login
PASS A3 D7
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentvalid_credsDENY 400--None
nonexistentwrong_passwordDENY 400--None
sharedvalid_credsDENY 400--None
sharedwrong_passwordDENY 400--None
superuservalid_credsALLOW 200--None
superuserwrong_passwordDENY 400--None
user_avalid_credsALLOW 200--None
user_awrong_passwordDENY 400--None
user_bvalid_credsALLOW 200--None
user_bwrong_passwordDENY 400--None
PASS A3 D7
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentvalid_credsDENY 400--None
nonexistentwrong_passwordDENY 400--None
sharedvalid_credsDENY 400--None
sharedwrong_passwordDENY 400--None
superuservalid_credsALLOW 200--None
superuserwrong_passwordDENY 400--None
user_avalid_credsALLOW 200--None
user_awrong_passwordDENY 400--None
user_bvalid_credsALLOW 200--None
user_bwrong_passwordDENY 400--None
PASS A3 D7
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentvalid_credsDENY 400--None
nonexistentwrong_passwordDENY 400--None
sharedvalid_credsDENY 400--None
sharedwrong_passwordDENY 400--None
superuservalid_credsALLOW 200--None
superuserwrong_passwordDENY 400--None
user_avalid_credsALLOW 200--None
user_awrong_passwordDENY 400--None
user_bvalid_credsALLOW 200--None
user_bwrong_passwordDENY 400--None
PASS A3 D7
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentvalid_credsDENY 400--None
nonexistentwrong_passwordDENY 400--None
sharedvalid_credsDENY 400--None
sharedwrong_passwordDENY 400--None
superuservalid_credsALLOW 200--None
superuserwrong_passwordDENY 400--None
user_avalid_credsALLOW 200--None
user_awrong_passwordDENY 400--None
user_bvalid_credsALLOW 200--None
user_bwrong_passwordDENY 400--None
PASS A3 D7
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentvalid_credsDENY 400--None
nonexistentwrong_passwordDENY 400--None
sharedvalid_credsDENY 400--None
sharedwrong_passwordDENY 400--None
superuservalid_credsALLOW 200--None
superuserwrong_passwordDENY 400--None
user_avalid_credsALLOW 200--None
user_awrong_passwordDENY 400--None
user_bvalid_credsALLOW 200--None
user_bwrong_passwordDENY 400--None
PASS A3 D7
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentvalid_credsDENY 400--None
nonexistentwrong_passwordDENY 400--None
sharedvalid_credsDENY 400--None
sharedwrong_passwordDENY 400--None
superuservalid_credsALLOW 200--None
superuserwrong_passwordDENY 400--None
user_avalid_credsALLOW 200--None
user_awrong_passwordDENY 400--None
user_bvalid_credsALLOW 200--None
user_bwrong_passwordDENY 400--None
PASS A3 D7
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentvalid_credsDENY 400--None
nonexistentwrong_passwordDENY 400--None
sharedvalid_credsDENY 400--None
sharedwrong_passwordDENY 400--None
superuservalid_credsALLOW 200--None
superuserwrong_passwordDENY 400--None
user_avalid_credsALLOW 200--None
user_awrong_passwordDENY 400--None
user_bvalid_credsALLOW 200--None
user_bwrong_passwordDENY 400--None
PASS A3 D7
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentvalid_credsDENY 400--None
nonexistentwrong_passwordDENY 400--None
sharedvalid_credsDENY 400--None
sharedwrong_passwordDENY 400--None
superuservalid_credsALLOW 200--None
superuserwrong_passwordDENY 400--None
user_avalid_credsALLOW 200--None
user_awrong_passwordDENY 400--None
user_bvalid_credsALLOW 200--None
user_bwrong_passwordDENY 400--None
PASS A3 D7
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentvalid_credsDENY 400--None
nonexistentwrong_passwordDENY 400--None
sharedvalid_credsDENY 400--None
sharedwrong_passwordDENY 400--None
superuservalid_credsALLOW 200--None
superuserwrong_passwordDENY 400--None
user_avalid_credsALLOW 200--None
user_awrong_passwordDENY 400--None
user_bvalid_credsALLOW 200--None
user_bwrong_passwordDENY 400--None
POST /auth/logout
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS D1
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
PASS A1
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200--None
PASS A1
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200--None
PASS A1
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 200--None
POST /auth/register
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 201-insert:user:newNone
-hostileALLOW 201-insert:user:newNone
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 201-insert:user:newNone
-hostileALLOW 201-insert:user:newNone
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 201-insert:user:newNone
-hostileALLOW 201-insert:user:newNone
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 201-insert:user:newNone
-hostileALLOW 201-insert:user:newNone
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 201-insert:user:newNone
-hostileALLOW 201-insert:user:newNone
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 201-insert:user:newNone
-hostileALLOW 201-insert:user:newNone
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 201-insert:user:newNone
-hostileALLOW 201-insert:user:newNone
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 201-insert:user:newNone
-hostileALLOW 201-insert:user:newNone
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 201-insert:user:newNone
-hostileALLOW 201-insert:user:newNone
POST /auth/request-verify-token
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 202--None
-hostileALLOW 202--None
POST /auth/reset-password
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
POST /auth/verify
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 400--None
-hostileDENY 400--None
POST /categories
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 201-insert:category:selfNone
-hostileALLOW 201-insert:category:selfNone
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 201-insert:category:selfNone
-hostileALLOW 201-insert:category:selfNone
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 201-insert:category:selfNone
-hostileALLOW 201-insert:category:selfNone
POST /todos
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS D2
targetvariantdecisionleaked canariesDB changescountviolation
-baseDENY 401--None
-hostileDENY 401--None
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 201-insert:todo:selfNone
-hostileALLOW 201-insert:todo:selfNone
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 201-insert:todo:selfNone
-hostileALLOW 201-insert:todo:selfNone
PASS A2
targetvariantdecisionleaked canariesDB changescountviolation
-baseALLOW 201-insert:todo:selfNone
-hostileALLOW 201-insert:todo:selfNone
PUT /todos/{todo_id}
PASS D10
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
nonexistenthostileDENY 401--None
sharedbaseDENY 401--None
sharedhostileDENY 401--None
superuserbaseDENY 401--None
superuserhostileDENY 401--None
user_abaseDENY 401--None
user_ahostileDENY 401--None
user_bbaseDENY 401--None
user_bhostileDENY 401--None
PASS D10
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
nonexistenthostileDENY 401--None
sharedbaseDENY 401--None
sharedhostileDENY 401--None
superuserbaseDENY 401--None
superuserhostileDENY 401--None
user_abaseDENY 401--None
user_ahostileDENY 401--None
user_bbaseDENY 401--None
user_bhostileDENY 401--None
PASS D10
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
nonexistenthostileDENY 401--None
sharedbaseDENY 401--None
sharedhostileDENY 401--None
superuserbaseDENY 401--None
superuserhostileDENY 401--None
user_abaseDENY 401--None
user_ahostileDENY 401--None
user_bbaseDENY 401--None
user_bhostileDENY 401--None
PASS D10
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
nonexistenthostileDENY 401--None
sharedbaseDENY 401--None
sharedhostileDENY 401--None
superuserbaseDENY 401--None
superuserhostileDENY 401--None
user_abaseDENY 401--None
user_ahostileDENY 401--None
user_bbaseDENY 401--None
user_bhostileDENY 401--None
PASS D10
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
nonexistenthostileDENY 401--None
sharedbaseDENY 401--None
sharedhostileDENY 401--None
superuserbaseDENY 401--None
superuserhostileDENY 401--None
user_abaseDENY 401--None
user_ahostileDENY 401--None
user_bbaseDENY 401--None
user_bhostileDENY 401--None
PASS D10
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 401--None
nonexistenthostileDENY 401--None
sharedbaseDENY 401--None
sharedhostileDENY 401--None
superuserbaseDENY 401--None
superuserhostileDENY 401--None
user_abaseDENY 401--None
user_ahostileDENY 401--None
user_bbaseDENY 401--None
user_bhostileDENY 401--None
PASS A2 D8
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 404--None
nonexistenthostileDENY 404--None
sharedbaseDENY 404--None
sharedhostileDENY 404--None
superuserbaseALLOW 200-delete:todo_category:self, update:todo:selfNone
superuserhostileALLOW 200-delete:todo_category:self, update:todo:selfNone
user_abaseDENY 403--None
user_ahostileDENY 403--None
user_bbaseDENY 403--None
user_bhostileDENY 403--None
PASS A2 D8
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 404--None
nonexistenthostileDENY 404--None
sharedbaseDENY 404--None
sharedhostileDENY 404--None
superuserbaseDENY 403--None
superuserhostileDENY 403--None
user_abaseALLOW 200-delete:todo_category:self, update:todo:selfNone
user_ahostileALLOW 200-delete:todo_category:self, update:todo:selfNone
user_bbaseDENY 403--None
user_bhostileDENY 403--None
PASS A2 D8
targetvariantdecisionleaked canariesDB changescountviolation
nonexistentbaseDENY 404--None
nonexistenthostileDENY 404--None
sharedbaseDENY 404--None
sharedhostileDENY 404--None
superuserbaseDENY 403--None
superuserhostileDENY 403--None
user_abaseDENY 403--None
user_ahostileDENY 403--None
user_bbaseALLOW 200-delete:todo_category:self, update:todo:selfNone
user_bhostileALLOW 200-delete:todo_category:self, update:todo:selfNone

Generated by report.py from the lockfile; the verdict is computed by authzlock.diff (deterministic, no LLM).