diff --git a/public/conformance/firestore-rules.json b/public/conformance/firestore-rules.json index 6bb2b3f..50c4e6f 100644 --- a/public/conformance/firestore-rules.json +++ b/public/conformance/firestore-rules.json @@ -1 +1 @@ -{"runs":[[0,4,0,"Rules expressions: literals and coercion"],[4,7,0,"Rules expressions: numeric arithmetic and comparison"],[11,5,0,"Rules expressions: boolean short circuit and errors"],[16,12,0,"Rules expressions: string list map and map diff"],[28,4,0,"Rules expressions: request auth method time query resource and existing resource"],[32,4,0,"Rules expressions: literals and coercion"],[36,7,0,"Rules expressions: numeric arithmetic and comparison"],[43,5,0,"Rules expressions: boolean short circuit and errors"],[48,12,0,"Rules expressions: string list map and map diff"],[60,4,0,"Rules expressions: request auth method time query resource and existing resource"],[64,4,0,"Rules expressions: literals and coercion"],[68,7,0,"Rules expressions: numeric arithmetic and comparison"],[75,5,0,"Rules expressions: boolean short circuit and errors"],[80,12,0,"Rules expressions: string list map and map diff"],[92,4,0,"Rules expressions: request auth method time query resource and existing resource"],[96,4,0,"Rules expressions: literals and coercion"],[100,7,0,"Rules expressions: numeric arithmetic and comparison"],[107,5,0,"Rules expressions: boolean short circuit and errors"],[112,12,0,"Rules expressions: string list map and map diff"],[124,4,0,"Rules expressions: request auth method time query resource and existing resource"],[128,4,0,"Rules expressions: literals and coercion"],[132,7,0,"Rules expressions: numeric arithmetic and comparison"],[139,5,0,"Rules expressions: boolean short circuit and errors"],[144,12,0,"Rules expressions: string list map and map diff"],[156,4,0,"Rules expressions: request auth method time query resource and existing resource"],[160,4,0,"Rules expressions: literals and coercion"],[164,7,0,"Rules expressions: numeric arithmetic and comparison"],[171,5,0,"Rules expressions: boolean short circuit and errors"],[176,12,0,"Rules expressions: string list map and map diff"],[188,4,0,"Rules expressions: request auth method time query resource and existing resource"],[192,4,0,"Rules expressions: literals and coercion"],[196,7,0,"Rules expressions: numeric arithmetic and comparison"],[203,5,0,"Rules expressions: boolean short circuit and errors"],[208,12,0,"Rules expressions: string list map and map diff"],[220,4,0,"Rules expressions: request auth method time query resource and existing resource"],[224,4,0,"Rules expressions: literals and coercion"],[228,7,0,"Rules expressions: numeric arithmetic and comparison"],[235,5,0,"Rules expressions: boolean short circuit and errors"],[240,12,0,"Rules expressions: string list map and map diff"],[252,4,0,"Rules expressions: request auth method time query resource and existing resource"],[256,4,0,"Rules expressions: literals and coercion"],[260,7,0,"Rules expressions: numeric arithmetic and comparison"],[267,5,0,"Rules expressions: boolean short circuit and errors"],[272,12,0,"Rules expressions: string list map and map diff"],[284,4,0,"Rules expressions: request auth method time query resource and existing resource"],[288,4,0,"Rules expressions: literals and coercion"],[292,7,0,"Rules expressions: numeric arithmetic and comparison"],[299,5,0,"Rules expressions: boolean short circuit and errors"],[304,12,0,"Rules expressions: string list map and map diff"],[316,4,0,"Rules expressions: request auth method time query resource and existing resource"],[320,4,0,"Rules expressions: literals and coercion"],[324,7,0,"Rules expressions: numeric arithmetic and comparison"],[331,5,0,"Rules expressions: boolean short circuit and errors"],[336,12,0,"Rules expressions: string list map and map diff"],[348,4,0,"Rules expressions: request auth method time query resource and existing resource"],[352,4,0,"Rules expressions: literals and coercion"],[356,7,0,"Rules expressions: numeric arithmetic and comparison"],[363,5,0,"Rules expressions: boolean short circuit and errors"],[368,12,0,"Rules expressions: string list map and map diff"],[380,4,0,"Rules expressions: request auth method time query resource and existing resource"],[384,4,0,"Rules expressions: literals and coercion"],[388,7,0,"Rules expressions: numeric arithmetic and comparison"],[395,5,0,"Rules expressions: boolean short circuit and errors"],[400,12,0,"Rules expressions: string list map and map diff"],[412,4,0,"Rules expressions: request auth method time query resource and existing resource"],[416,4,0,"Rules expressions: literals and coercion"],[420,7,0,"Rules expressions: numeric arithmetic and comparison"],[427,5,0,"Rules expressions: boolean short circuit and errors"],[432,12,0,"Rules expressions: string list map and map diff"],[444,4,0,"Rules expressions: request auth method time query resource and existing resource"],[448,4,0,"Rules expressions: literals and coercion"],[452,7,0,"Rules expressions: numeric arithmetic and comparison"],[459,5,0,"Rules expressions: boolean short circuit and errors"],[464,12,0,"Rules expressions: string list map and map diff"],[476,4,0,"Rules expressions: request auth method time query resource and existing resource"],[480,4,0,"Rules expressions: literals and coercion"],[484,7,0,"Rules expressions: numeric arithmetic and comparison"],[491,5,0,"Rules expressions: boolean short circuit and errors"],[496,12,0,"Rules expressions: string list map and map diff"],[508,4,0,"Rules expressions: request auth method time query resource and existing resource"],[512,4,0,"Rules expressions: literals and coercion"],[516,7,0,"Rules expressions: numeric arithmetic and comparison"],[523,5,0,"Rules expressions: boolean short circuit and errors"],[528,12,0,"Rules expressions: string list map and map diff"],[540,4,0,"Rules expressions: request auth method time query resource and existing resource"],[544,4,0,"Rules expressions: literals and coercion"],[548,7,0,"Rules expressions: numeric arithmetic and comparison"],[555,5,0,"Rules expressions: boolean short circuit and errors"],[560,12,0,"Rules expressions: string list map and map diff"],[572,4,0,"Rules expressions: request auth method time query resource and existing resource"],[576,4,0,"Rules expressions: literals and coercion"],[580,7,0,"Rules expressions: numeric arithmetic and comparison"],[587,5,0,"Rules expressions: boolean short circuit and errors"],[592,12,0,"Rules expressions: string list map and map diff"],[604,4,0,"Rules expressions: request auth method time query resource and existing resource"],[608,4,0,"Rules expressions: literals and coercion"],[612,7,0,"Rules expressions: numeric arithmetic and comparison"],[619,5,0,"Rules expressions: boolean short circuit and errors"],[624,12,0,"Rules expressions: string list map and map diff"],[636,4,0,"Rules expressions: request auth method time query resource and existing resource"],[640,4,0,"Rules expressions: literals and coercion"],[644,7,0,"Rules expressions: numeric arithmetic and comparison"],[651,5,0,"Rules expressions: boolean short circuit and errors"],[656,12,0,"Rules expressions: string list map and map diff"],[668,4,0,"Rules expressions: request auth method time query resource and existing resource"],[672,4,0,"Rules expressions: literals and coercion"],[676,7,0,"Rules expressions: numeric arithmetic and comparison"],[683,5,0,"Rules expressions: boolean short circuit and errors"],[688,12,0,"Rules expressions: string list map and map diff"],[700,4,0,"Rules expressions: request auth method time query resource and existing resource"],[704,4,0,"Rules expressions: literals and coercion"],[708,7,0,"Rules expressions: numeric arithmetic and comparison"],[715,5,0,"Rules expressions: boolean short circuit and errors"],[720,12,0,"Rules expressions: string list map and map diff"],[732,4,0,"Rules expressions: request auth method time query resource and existing resource"],[736,4,0,"Rules expressions: literals and coercion"],[740,7,0,"Rules expressions: numeric arithmetic and comparison"],[747,5,0,"Rules expressions: boolean short circuit and errors"],[752,12,0,"Rules expressions: string list map and map diff"],[764,4,0,"Rules expressions: request auth method time query resource and existing resource"],[768,4,0,"Rules expressions: literals and coercion"],[772,7,0,"Rules expressions: numeric arithmetic and comparison"],[779,5,0,"Rules expressions: boolean short circuit and errors"],[784,12,0,"Rules expressions: string list map and map diff"],[796,4,0,"Rules expressions: request auth method time query resource and existing resource"],[800,4,0,"Rules expressions: literals and coercion"],[804,7,0,"Rules expressions: numeric arithmetic and comparison"],[811,5,0,"Rules expressions: boolean short circuit and errors"],[816,12,0,"Rules expressions: string list map and map diff"],[828,4,0,"Rules expressions: request auth method time query resource and existing resource"],[832,4,0,"Rules expressions: literals and coercion"],[836,7,0,"Rules expressions: numeric arithmetic and comparison"],[843,5,0,"Rules expressions: boolean short circuit and errors"],[848,12,0,"Rules expressions: string list map and map diff"],[860,4,0,"Rules expressions: request auth method time query resource and existing resource"],[864,4,0,"Rules expressions: literals and coercion"],[868,7,0,"Rules expressions: numeric arithmetic and comparison"],[875,5,0,"Rules expressions: boolean short circuit and errors"],[880,12,0,"Rules expressions: string list map and map diff"],[892,4,0,"Rules expressions: request auth method time query resource and existing resource"],[896,4,0,"Rules expressions: literals and coercion"],[900,7,0,"Rules expressions: numeric arithmetic and comparison"],[907,5,0,"Rules expressions: boolean short circuit and errors"],[912,12,0,"Rules expressions: string list map and map diff"],[924,4,0,"Rules expressions: request auth method time query resource and existing resource"],[928,4,0,"Rules expressions: literals and coercion"],[932,7,0,"Rules expressions: numeric arithmetic and comparison"],[939,5,0,"Rules expressions: boolean short circuit and errors"],[944,12,0,"Rules expressions: string list map and map diff"],[956,4,0,"Rules expressions: request auth method time query resource and existing resource"],[960,4,0,"Rules expressions: literals and coercion"],[964,7,0,"Rules expressions: numeric arithmetic and comparison"],[971,5,0,"Rules expressions: boolean short circuit and errors"],[976,12,0,"Rules expressions: string list map and map diff"],[988,4,0,"Rules expressions: request auth method time query resource and existing resource"],[992,4,0,"Rules expressions: literals and coercion"],[996,7,0,"Rules expressions: numeric arithmetic and comparison"],[1003,5,0,"Rules expressions: boolean short circuit and errors"],[1008,12,0,"Rules expressions: string list map and map diff"],[1020,4,0,"Rules expressions: request auth method time query resource and existing resource"],[1024,6,0,"Language contract: string"],[1030,6,0,"Language contract: list"],[1036,3,0,"Language contract: map"],[1039,2,0,"Language contract: map diff"],[1041,3,0,"Language contract: set"],[1044,2,0,"Language contract: bytes"],[1046,2,0,"Language contract: duration"],[1048,3,0,"Language contract: timestamp"],[1051,2,0,"Language contract: latlng"],[1053,3,0,"Language contract: math"],[1056,2,0,"Language contract: hashing"],[1058,2,0,"Language contract: request"],[1060,1,0,"Language contract: path"],[1061,1,0,"Language contract: function"],[1062,1,0,"Language contract: resource"],[1063,1,0,"Language contract: query"],[1064,3,0,"Language contract: match"],[1067,9,0,"Limits: function depth"],[1076,5,0,"Limits: linear expression terms"],[1081,8,0,"Limits: balanced expression terms"],[1089,2,0,"Limits: linear expression terms"],[1091,17,0,"Limits: true chain terms"],[1108,9,0,"Limits: time chain terms"],[1117,3,0,"Limits: literal left terms"],[1120,5,0,"Limits: right nested terms"],[1125,4,0,"Limits: balanced parenthesised terms"],[1129,1,0,"Compiler and source size: unexpected token"],[1130,1,0,"Compiler and source size: unclosed block"],[1131,1,0,"Compiler and source size: duplicate let"],[1132,1,0,"Compiler and source size: undefined name"],[1133,1,0,"Compiler and source size: invalid function arity"],[1134,1,0,"Compiler and source size: recursive function"],[1135,1,0,"Compiler and source size: invalid recursive wildcard"],[1136,4,0,"Compiler and source size: source bytes"],[1140,1,0,"complex-firestore.rules: production compile"],[1141,1,0,"Language contract: debug"],[1142,20,0,"Limits: linear expression terms"],[1162,8,0,"Limits: true chain terms"],[1170,9,0,"Limits: time chain terms"],[1179,6,0,"Limits: literal left terms"],[1185,2,0,"Compiler and source size: source bytes"],[1187,1,1,"The ruleset the other inputs change"],[1188,8,1,"A stray or wrong word at the top level"],[1196,6,1,"rules_version gone wrong"],[1202,4,1,"A missing or extra brace"],[1206,5,1,"A missing or extra semicolon"],[1211,4,1,"A missing or extra parenthesis"],[1215,4,1,"A string left open"],[1219,2,1,"A bad match path"],[1221,21,1,"A condition cut short or mistyped"],[1242,3,1,"A bad function header or body"],[1245,3,1,"let misused"],[1248,2,1,"A misspelled keyword"],[1250,20,1,"The source ends inside a block"],[1270,4,1,"Two mistakes in one source"],[1274,3,1,"Where a position is counted from"],[1277,4,1,"The production Rules API's refusals, sent unchanged"],[1281,3,1,"A stray or wrong word at the top level"],[1284,1,1,"rules_version gone wrong"],[1285,4,1,"A missing or extra brace"],[1289,1,1,"A missing or extra parenthesis"],[1290,5,1,"A bad match path"],[1295,1,1,"A condition cut short or mistyped"],[1296,4,1,"A bad function header or body"],[1300,2,1,"let misused"],[1302,3,1,"A misspelled keyword"],[1305,1,1,"Two mistakes in one source"],[1306,1,1,"The production Rules API's refusals, sent unchanged"],[1307,1,2,"Setup"],[1308,15,2,"Coverage after a rules reload and two reads"],[1323,3,2,"A rejected reload keeps the last valid rules"],[1326,12,2,"Coverage after a rules reload and two reads"],[1338,11,3,"Firestore requests with live rules evaluations"],[1349,8,3,"Requests websocket messages"],[1357,12,3,"Firestore requests with live rules evaluations"],[1369,18,3,"Requests websocket messages"],[1387,4,4,"Firestore requests with live rules evaluations"],[1391,4,4,"Requests websocket messages"],[1395,2,4,"Firestore requests with live rules evaluations"],[1397,4,4,"Requests websocket messages"],[1401,2,5,"Reads as: no Authorization header (a signed-out client SDK)"],[1403,6,5,"Reads as: the owner credential (the Admin SDKs' emulator credential)"],[1409,6,5,"Reads as: the owner credential, lowercase scheme"],[1415,6,5,"Reads as: the owner credential, all uppercase"],[1421,2,5,"Reads as: a current unsigned token for alice"],[1423,2,5,"Reads as: current unsigned token for alice, lowercase scheme"],[1425,2,5,"Reads as: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1427,2,5,"Reads as: a token issued a day from now"],[1429,2,5,"Reads as: a token whose aud and iss name another project"],[1431,2,5,"Reads as: a token whose aud alone names another project"],[1433,2,5,"Reads as: an unsigned token with only sub: alice"],[1435,2,5,"Reads as: a token whose header has no alg"],[1437,2,5,"Reads as: an RS256 header and a signature nobody checks"],[1439,2,5,"Reads as: standard padded base64 segments"],[1441,6,5,"Reads as: a token of two segments"],[1447,6,5,"Reads as: a token whose payload is an array"],[1453,6,5,"Reads as: a credential that is not a JWT"],[1459,2,5,"Reads as: no Authorization header (a signed-out client SDK)"],[1461,6,5,"Reads as: the owner credential (the Admin SDKs' emulator credential)"],[1467,6,5,"Reads as: the owner credential, lowercase scheme"],[1473,6,5,"Reads as: the owner credential, all uppercase"],[1479,2,5,"Reads as: a current unsigned token for alice"],[1481,2,5,"Reads as: current unsigned token for alice, lowercase scheme"],[1483,2,5,"Reads as: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1485,2,5,"Reads as: a token issued a day from now"],[1487,2,5,"Reads as: a token whose aud and iss name another project"],[1489,2,5,"Reads as: a token whose aud alone names another project"],[1491,2,5,"Reads as: an unsigned token with only sub: alice"],[1493,2,5,"Reads as: a token whose header has no alg"],[1495,2,5,"Reads as: an RS256 header and a signature nobody checks"],[1497,2,5,"Reads as: standard padded base64 segments"],[1499,6,5,"Reads as: a token of two segments"],[1505,6,5,"Reads as: a token whose payload is an array"],[1511,6,5,"Reads as: a credential that is not a JWT"],[1517,3,5,"What request.auth holds for: no Authorization header (a signed-out client SDK)"],[1520,3,5,"What request.auth holds for: the owner credential (the Admin SDKs' emulator credential)"],[1523,3,5,"What request.auth holds for: the owner credential, lowercase scheme"],[1526,3,5,"What request.auth holds for: the owner credential, all uppercase"],[1529,3,5,"What request.auth holds for: a current unsigned token for alice"],[1532,3,5,"What request.auth holds for: current unsigned token for alice, lowercase scheme"],[1535,3,5,"What request.auth holds for: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1538,3,5,"What request.auth holds for: a token issued a day from now"],[1541,3,5,"What request.auth holds for: a token whose aud and iss name another project"],[1544,3,5,"What request.auth holds for: a token whose aud alone names another project"],[1547,3,5,"What request.auth holds for: an unsigned token with only sub: alice"],[1550,3,5,"What request.auth holds for: an unsigned token with only user_id: alice"],[1553,3,5,"What request.auth holds for: an unsigned token with no claims"],[1556,3,5,"What request.auth holds for: an unsigned token with sub: 7"],[1559,3,5,"What request.auth holds for: a token whose header has no alg"],[1562,3,5,"What request.auth holds for: an RS256 header and a signature nobody checks"],[1565,3,5,"What request.auth holds for: standard padded base64 segments"],[1568,3,5,"What request.auth holds for: a token of two segments"],[1571,3,5,"What request.auth holds for: a token whose payload is an array"],[1574,3,5,"What request.auth holds for: a credential that is not a JWT"],[1577,12,5,"Metadata operations need the owner"],[1589,2,5,"Enterprise pipelines are evaluated as a list"],[1591,3,5,"The rules reload route reads the body as JSON"],[1594,4,5,"Reads as: no Authorization header (a signed-out client SDK)"],[1598,4,5,"Reads as: a current unsigned token for alice"],[1602,4,5,"Reads as: current unsigned token for alice, lowercase scheme"],[1606,4,5,"Reads as: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1610,4,5,"Reads as: a token issued a day from now"],[1614,4,5,"Reads as: a token whose aud and iss name another project"],[1618,4,5,"Reads as: a token whose aud alone names another project"],[1622,4,5,"Reads as: an unsigned token with only sub: alice"],[1626,6,5,"Reads as: an unsigned token with only user_id: alice"],[1632,6,5,"Reads as: an unsigned token with no claims"],[1638,6,5,"Reads as: an unsigned token with sub: 7"],[1644,4,5,"Reads as: a token whose header has no alg"],[1648,4,5,"Reads as: an RS256 header and a signature nobody checks"],[1652,4,5,"Reads as: standard padded base64 segments"],[1656,6,5,"Reads as: a Basic credential"],[1662,6,5,"Reads as: the owner credential (Storage's admin credential), Firebase scheme"],[1668,4,5,"Reads as: no Authorization header (a signed-out client SDK)"],[1672,4,5,"Reads as: a current unsigned token for alice"],[1676,4,5,"Reads as: current unsigned token for alice, lowercase scheme"],[1680,4,5,"Reads as: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1684,4,5,"Reads as: a token issued a day from now"],[1688,4,5,"Reads as: a token whose aud and iss name another project"],[1692,4,5,"Reads as: a token whose aud alone names another project"],[1696,4,5,"Reads as: an unsigned token with only sub: alice"],[1700,6,5,"Reads as: an unsigned token with only user_id: alice"],[1706,6,5,"Reads as: an unsigned token with no claims"],[1712,6,5,"Reads as: an unsigned token with sub: 7"],[1718,4,5,"Reads as: a token whose header has no alg"],[1722,4,5,"Reads as: an RS256 header and a signature nobody checks"],[1726,4,5,"Reads as: standard padded base64 segments"],[1730,6,5,"Reads as: a Basic credential"],[1736,6,5,"Reads as: the owner credential (Storage's admin credential), Firebase scheme"],[1742,3,5,"What request.auth holds for: a Basic credential"],[1745,3,5,"What request.auth holds for: the owner credential (Storage's admin credential), Firebase scheme"],[1748,5,5,"The message of a refused request"],[1753,6,5,"Metadata operations need the owner"],[1759,2,5,"Enterprise pipelines are evaluated as a list"],[1761,5,6,"The identifier \"duration\" in each position"],[1766,5,6,"The identifier \"hashing\" in each position"],[1771,5,6,"The identifier \"latlng\" in each position"],[1776,5,6,"The identifier \"math\" in each position"],[1781,5,6,"The identifier \"timestamp\" in each position"],[1786,5,6,"The identifier \"request\" in each position"],[1791,5,6,"The identifier \"resource\" in each position"],[1796,5,6,"The identifier \"value\" in each position"],[1801,123,7,"Paths and document names under allow get"],[1924,7,7,"Document names under allow list"],[1931,5,7,"Document names under allow create"],[1936,2,9,"Contributed rooms ruleset: a function outside the service block"],[1938,3,9,"Contributed rooms ruleset: the conditional operator inside a function"],[1941,2,9,"Contributed rooms ruleset: keys().hasOnly() and hasAll()"],[1943,3,9,"Contributed rooms ruleset: type, length and list-membership checks"],[1946,3,9,"Contributed rooms ruleset: diff().affectedKeys() on update, and a delete never allowed"],[1949,3,9,"Contributed rooms ruleset: exists() on another document"],[1952,1,9,"Contributed rooms ruleset: a field check in the proof of a list query"],[1953,3,9,"Contributed rooms ruleset: get() with a default on the payload, and is int"],[1956,1,9,"Contributed rooms ruleset: get() on the parent document"],[1957,1,9,"Contributed rooms ruleset: a null value on write"],[1958,2,9,"Contributed rooms ruleset: a query pinned to a missing document id"],[1960,2,9,"Contributed rooms ruleset: matches() on the document id"],[1962,2,9,"Contributed rooms ruleset: keys().hasAny()"],[1964,1,9,"Contributed rooms ruleset: a field check in the proof of a list query"],[1965,7,10,"Document access limits (10 and 20) and cached repeated access"],[1972,2,10,"getAfter sees the pending write of a commit"],[1974,5,10,"Runtime errors deny: missing fields, division by zero, list bounds, wrong types"],[1979,1,10,"complex-firestore.rules: public read"],[1980,2,10,"complex-firestore.rules: query limit validation"],[1982,2,10,"complex-firestore.rules: auth and custom claims"],[1984,2,10,"complex-firestore.rules: field change validation"],[1986,2,10,"complex-firestore.rules: nested and recursive matches"],[1988,2,10,"complex-firestore.rules: cross document access"],[1990,1,10,"complex-firestore.rules: create update delete resource differences"],[1991,1,10,"complex-firestore.rules: field change validation"],[1992,2,10,"complex-firestore.rules: create update delete resource differences"],[1994,2,10,"complex-firestore.rules: nested and recursive matches"],[1996,2,10,"complex-firestore.rules: create update delete resource differences"],[1998,2,10,"complex-firestore.rules: field change validation"],[2000,1,10,"complex-firestore.rules: nested and recursive matches"],[2001,4,10,"complex-firestore.rules: auth and custom claims"],[2005,2,10,"complex-firestore.rules: field change validation"],[2007,2,10,"complex-firestore.rules: timestamps durations and helper functions"],[2009,2,10,"complex-firestore.rules: nested and recursive matches"],[2011,2,10,"complex-firestore.rules: auth and custom claims"],[2013,9,10,"complex-firestore.rules: complex generated policy"],[2022,2,10,"complex-firestore.rules: getAfter batch invariant"],[2024,3,10,"query-authorization: owner equality"],[2027,3,10,"query-authorization: owner absent"],[2030,3,10,"query-authorization: owner wrong uid"],[2033,3,10,"query-authorization: owner unverified"],[2036,3,10,"query-authorization: owner in single"],[2039,3,10,"query-authorization: owner in mixed"],[2042,3,10,"query-authorization: owner array is not equality"],[2045,3,10,"query-authorization: owner inequality"],[2048,3,10,"query-authorization: owner bounded equality"],[2051,3,10,"query-authorization: owner compound and"],[2054,3,10,"query-authorization: owner compound or safe"],[2057,3,10,"query-authorization: owner compound or unsafe"],[2060,3,10,"query-authorization: owner empty"],[2063,3,10,"query-authorization: owner empty unconstrained"],[2066,3,10,"query-authorization: owner empty wrong uid"],[2069,3,10,"query-authorization: owner nonmatching extra filter"],[2072,3,10,"query-authorization: permission get allowed"],[2075,3,10,"query-authorization: permission get denied"],[2078,3,10,"query-authorization: permission get missing"],[2081,3,10,"query-authorization: permission in all granted"],[2084,3,10,"query-authorization: permission in mixed"],[2087,3,10,"query-authorization: short circuit missing get"],[2090,3,10,"query-authorization: array contains owner"],[2093,3,10,"query-authorization: array contains other"],[2096,3,10,"query-authorization: array any owner"],[2099,3,10,"query-authorization: array any mixed"],[2102,3,10,"query-authorization: array absent"],[2105,3,10,"query-authorization: range equality inside"],[2108,3,10,"query-authorization: range strict bound"],[2111,3,10,"query-authorization: range inclusive bound"],[2114,3,10,"query-authorization: range unsafe inclusive"],[2117,3,10,"query-authorization: range safe in"],[2120,3,10,"query-authorization: range unsafe in"],[2123,3,10,"query-authorization: range absent"],[2126,3,10,"query-authorization: not equal null"],[2129,3,10,"query-authorization: not equal string"],[2132,3,10,"query-authorization: not in blocked"],[2135,3,10,"query-authorization: limit allowed"],[2138,3,10,"query-authorization: limit denied"],[2141,3,10,"query-authorization: limit absent"],[2144,3,10,"query-authorization: offset allowed"],[2147,3,10,"query-authorization: offset denied"],[2150,3,10,"query-authorization: offset default"],[2153,3,10,"query-authorization: order desc"],[2156,3,10,"query-authorization: order asc"],[2159,3,10,"query-authorization: order absent"],[2162,3,10,"query-authorization: get fixed path"],[2165,3,10,"query-authorization: exists fixed path"],[2168,3,10,"query-authorization: exists constrained path"],[2171,3,10,"query-authorization: exists missing path"],[2174,3,10,"query-authorization: exists unconstrained path"],[2177,3,10,"query-authorization: group recursive owner"],[2180,3,10,"query-authorization: group recursive unconstrained"],[2183,3,10,"query-authorization: group recursive empty owner"],[2186,3,10,"query-authorization: group root only rule"],[2189,3,10,"query-authorization: nested collection owner"],[2192,1,10,"query-authorization: owner absent"],[2193,1,10,"query-authorization: owner empty unconstrained"],[2194,1,10,"query-authorization: get fixed path"],[2195,1,10,"query-authorization: limit allowed"],[2196,3,10,"query-authorization: owner equality"],[2199,2,10,"query-authorization: owner absent"],[2201,2,10,"query-authorization: owner wrong uid"],[2203,2,10,"query-authorization: owner unverified"],[2205,2,10,"query-authorization: owner in single"],[2207,2,10,"query-authorization: owner in mixed"],[2209,2,10,"query-authorization: owner array is not equality"],[2211,2,10,"query-authorization: owner inequality"],[2213,2,10,"query-authorization: owner bounded equality"],[2215,2,10,"query-authorization: owner compound and"],[2217,2,10,"query-authorization: owner compound or safe"],[2219,2,10,"query-authorization: owner compound or unsafe"],[2221,2,10,"query-authorization: owner empty"],[2223,2,10,"query-authorization: owner empty unconstrained"],[2225,2,10,"query-authorization: owner empty wrong uid"],[2227,2,10,"query-authorization: owner nonmatching extra filter"],[2229,2,10,"query-authorization: permission get allowed"],[2231,2,10,"query-authorization: permission get denied"],[2233,2,10,"query-authorization: permission get missing"],[2235,2,10,"query-authorization: permission in all granted"],[2237,2,10,"query-authorization: permission in mixed"],[2239,2,10,"query-authorization: short circuit missing get"],[2241,2,10,"query-authorization: array contains owner"],[2243,2,10,"query-authorization: array contains other"],[2245,2,10,"query-authorization: array any owner"],[2247,2,10,"query-authorization: array any mixed"],[2249,2,10,"query-authorization: array absent"],[2251,2,10,"query-authorization: range equality inside"],[2253,2,10,"query-authorization: range strict bound"],[2255,2,10,"query-authorization: range inclusive bound"],[2257,2,10,"query-authorization: range unsafe inclusive"],[2259,2,10,"query-authorization: range safe in"],[2261,2,10,"query-authorization: range unsafe in"],[2263,2,10,"query-authorization: range absent"],[2265,2,10,"query-authorization: not equal null"],[2267,2,10,"query-authorization: not equal string"],[2269,2,10,"query-authorization: not in blocked"],[2271,2,10,"query-authorization: limit allowed"],[2273,2,10,"query-authorization: limit denied"],[2275,2,10,"query-authorization: limit absent"],[2277,2,10,"query-authorization: offset default"],[2279,2,10,"query-authorization: order desc"],[2281,2,10,"query-authorization: order asc"],[2283,2,10,"query-authorization: order absent"],[2285,2,10,"query-authorization: get fixed path"],[2287,2,10,"query-authorization: exists fixed path"],[2289,2,10,"query-authorization: exists constrained path"],[2291,2,10,"query-authorization: exists missing path"],[2293,2,10,"query-authorization: exists unconstrained path"],[2295,2,10,"query-authorization: group recursive owner"],[2297,2,10,"query-authorization: group recursive unconstrained"],[2299,2,10,"query-authorization: group recursive empty owner"],[2301,2,10,"query-authorization: group root only rule"],[2303,2,10,"query-authorization: nested collection owner"],[2305,3,10,"query-authorization: owner equality"],[2308,2,10,"query-authorization: owner absent"],[2310,2,10,"query-authorization: owner wrong uid"],[2312,2,10,"query-authorization: owner unverified"],[2314,2,10,"query-authorization: owner in single"],[2316,2,10,"query-authorization: owner in mixed"],[2318,2,10,"query-authorization: owner array is not equality"],[2320,2,10,"query-authorization: owner inequality"],[2322,2,10,"query-authorization: owner bounded equality"],[2324,2,10,"query-authorization: owner compound and"],[2326,2,10,"query-authorization: owner compound or safe"],[2328,2,10,"query-authorization: owner compound or unsafe"],[2330,2,10,"query-authorization: owner empty"],[2332,2,10,"query-authorization: owner empty unconstrained"],[2334,2,10,"query-authorization: owner empty wrong uid"],[2336,2,10,"query-authorization: owner nonmatching extra filter"],[2338,2,10,"query-authorization: permission get allowed"],[2340,2,10,"query-authorization: permission get denied"],[2342,2,10,"query-authorization: permission get missing"],[2344,2,10,"query-authorization: permission in all granted"],[2346,2,10,"query-authorization: permission in mixed"],[2348,2,10,"query-authorization: short circuit missing get"],[2350,2,10,"query-authorization: array contains owner"],[2352,2,10,"query-authorization: array contains other"],[2354,2,10,"query-authorization: array any owner"],[2356,2,10,"query-authorization: array any mixed"],[2358,2,10,"query-authorization: array absent"],[2360,2,10,"query-authorization: range equality inside"],[2362,2,10,"query-authorization: range strict bound"],[2364,2,10,"query-authorization: range inclusive bound"],[2366,2,10,"query-authorization: range unsafe inclusive"],[2368,2,10,"query-authorization: range safe in"],[2370,2,10,"query-authorization: range unsafe in"],[2372,2,10,"query-authorization: range absent"],[2374,2,10,"query-authorization: not equal null"],[2376,2,10,"query-authorization: not equal string"],[2378,2,10,"query-authorization: not in blocked"],[2380,2,10,"query-authorization: limit allowed"],[2382,2,10,"query-authorization: limit denied"],[2384,2,10,"query-authorization: limit absent"],[2386,2,10,"query-authorization: offset default"],[2388,2,10,"query-authorization: order desc"],[2390,2,10,"query-authorization: order asc"],[2392,2,10,"query-authorization: order absent"],[2394,2,10,"query-authorization: get fixed path"],[2396,2,10,"query-authorization: exists fixed path"],[2398,2,10,"query-authorization: exists constrained path"],[2400,2,10,"query-authorization: exists missing path"],[2402,2,10,"query-authorization: exists unconstrained path"],[2404,2,10,"query-authorization: group recursive owner"],[2406,2,10,"query-authorization: group recursive unconstrained"],[2408,2,10,"query-authorization: group recursive empty owner"],[2410,2,10,"query-authorization: group root only rule"],[2412,2,10,"query-authorization: nested collection owner"],[2414,1,10,"query-authorization: owner equality"],[2415,3,10,"query-paths: owner equality"],[2418,3,10,"query-paths: owner absent"],[2421,3,10,"query-paths: owner empty unconstrained"],[2424,3,10,"query-paths: limit allowed"],[2427,3,10,"query-paths: get fixed path"],[2430,3,10,"query-paths: path members granted"],[2433,3,10,"query-paths: path members denied"],[2436,3,10,"query-paths: path members missing"],[2439,3,10,"query-paths: path-getMembers granted"],[2442,3,10,"query-paths: path-getMembers denied"],[2445,3,10,"query-paths: path-getMembers missing"],[2448,3,10,"query-paths: path-functionMembers granted"],[2451,3,10,"query-paths: path-functionMembers denied"],[2454,3,10,"query-paths: path-functionMembers missing"],[2457,3,10,"query-paths: path-reversedMembers granted"],[2460,3,10,"query-paths: path-reversedMembers denied"],[2463,3,10,"query-paths: path-reversedMembers missing"],[2466,3,10,"query-paths: path-unknownOnly granted"],[2469,3,10,"query-paths: path-unknownOnly denied"],[2472,3,10,"query-paths: path-unknownOnly missing"],[2475,3,10,"query-paths: path-negatedAnd granted"],[2478,3,10,"query-paths: path-negatedAnd denied"],[2481,3,10,"query-paths: path-negatedAnd missing"],[2484,3,10,"query-paths: path-literalOr granted"],[2487,3,10,"query-paths: path-literalOr denied"],[2490,3,10,"query-paths: path-literalOr missing"],[2493,3,10,"query-paths: path-concreteErrorOr granted"],[2496,3,10,"query-paths: path-concreteErrorOr denied"],[2499,3,10,"query-paths: path-concreteErrorOr missing"],[2502,3,10,"query-paths: path-concreteErrorAnd granted"],[2505,3,10,"query-paths: path-concreteErrorAnd denied"],[2508,3,10,"query-paths: path-concreteErrorAnd missing"],[2511,3,10,"query-paths: path-budgetErrorOr granted"],[2514,3,10,"query-paths: path-budgetErrorOr denied"],[2517,3,10,"query-paths: path-budgetErrorOr missing"],[2520,3,10,"query-paths: path members empty granted"],[2523,3,10,"query-paths: path members filtered denied"],[2526,1,10,"query-paths: owner absent"],[2527,1,10,"query-paths: owner empty unconstrained"],[2528,1,10,"query-paths: get fixed path"],[2529,1,10,"query-paths: limit allowed"],[2530,1,10,"query-paths: path members granted"],[2531,1,10,"query-paths: path members denied"],[2532,1,10,"query-paths: path members empty granted"],[2533,3,10,"query-paths: owner equality"],[2536,2,10,"query-paths: owner absent"],[2538,2,10,"query-paths: owner empty unconstrained"],[2540,2,10,"query-paths: limit allowed"],[2542,2,10,"query-paths: get fixed path"],[2544,2,10,"query-paths: path members granted"],[2546,2,10,"query-paths: path members denied"],[2548,2,10,"query-paths: path members missing"],[2550,2,10,"query-paths: path-getMembers granted"],[2552,2,10,"query-paths: path-getMembers denied"],[2554,2,10,"query-paths: path-getMembers missing"],[2556,2,10,"query-paths: path-functionMembers granted"],[2558,2,10,"query-paths: path-functionMembers denied"],[2560,2,10,"query-paths: path-functionMembers missing"],[2562,2,10,"query-paths: path-reversedMembers granted"],[2564,2,10,"query-paths: path-reversedMembers denied"],[2566,2,10,"query-paths: path-reversedMembers missing"],[2568,2,10,"query-paths: path-unknownOnly granted"],[2570,2,10,"query-paths: path-unknownOnly denied"],[2572,2,10,"query-paths: path-unknownOnly missing"],[2574,2,10,"query-paths: path-negatedAnd granted"],[2576,2,10,"query-paths: path-negatedAnd denied"],[2578,2,10,"query-paths: path-negatedAnd missing"],[2580,2,10,"query-paths: path-literalOr granted"],[2582,2,10,"query-paths: path-literalOr denied"],[2584,2,10,"query-paths: path-literalOr missing"],[2586,2,10,"query-paths: path-concreteErrorOr granted"],[2588,2,10,"query-paths: path-concreteErrorOr denied"],[2590,2,10,"query-paths: path-concreteErrorOr missing"],[2592,2,10,"query-paths: path-concreteErrorAnd granted"],[2594,2,10,"query-paths: path-concreteErrorAnd denied"],[2596,2,10,"query-paths: path-concreteErrorAnd missing"],[2598,2,10,"query-paths: path-budgetErrorOr granted"],[2600,2,10,"query-paths: path-budgetErrorOr denied"],[2602,2,10,"query-paths: path-budgetErrorOr missing"],[2604,2,10,"query-paths: path members empty granted"],[2606,2,10,"query-paths: path members filtered denied"],[2608,3,10,"query-paths: owner equality"],[2611,2,10,"query-paths: owner absent"],[2613,2,10,"query-paths: owner empty unconstrained"],[2615,2,10,"query-paths: limit allowed"],[2617,2,10,"query-paths: get fixed path"],[2619,2,10,"query-paths: path members granted"],[2621,2,10,"query-paths: path members denied"],[2623,2,10,"query-paths: path members missing"],[2625,2,10,"query-paths: path-getMembers granted"],[2627,2,10,"query-paths: path-getMembers denied"],[2629,2,10,"query-paths: path-getMembers missing"],[2631,2,10,"query-paths: path-functionMembers granted"],[2633,2,10,"query-paths: path-functionMembers denied"],[2635,2,10,"query-paths: path-functionMembers missing"],[2637,2,10,"query-paths: path-reversedMembers granted"],[2639,2,10,"query-paths: path-reversedMembers denied"],[2641,2,10,"query-paths: path-reversedMembers missing"],[2643,2,10,"query-paths: path-unknownOnly granted"],[2645,2,10,"query-paths: path-unknownOnly denied"],[2647,2,10,"query-paths: path-unknownOnly missing"],[2649,2,10,"query-paths: path-negatedAnd granted"],[2651,2,10,"query-paths: path-negatedAnd denied"],[2653,2,10,"query-paths: path-negatedAnd missing"],[2655,2,10,"query-paths: path-literalOr granted"],[2657,2,10,"query-paths: path-literalOr denied"],[2659,2,10,"query-paths: path-literalOr missing"],[2661,2,10,"query-paths: path-concreteErrorOr granted"],[2663,2,10,"query-paths: path-concreteErrorOr denied"],[2665,2,10,"query-paths: path-concreteErrorOr missing"],[2667,2,10,"query-paths: path-concreteErrorAnd granted"],[2669,2,10,"query-paths: path-concreteErrorAnd denied"],[2671,2,10,"query-paths: path-concreteErrorAnd missing"],[2673,2,10,"query-paths: path-budgetErrorOr granted"],[2675,2,10,"query-paths: path-budgetErrorOr denied"],[2677,2,10,"query-paths: path-budgetErrorOr missing"],[2679,2,10,"query-paths: path members empty granted"],[2681,2,10,"query-paths: path members filtered denied"],[2683,1,10,"query-paths: owner equality"]],"cases":[{"t":"case 0000","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0001","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0002","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0003","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0004","q":"get: 2 + 3 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0005","q":"get: 11 - 4 == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0006","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0007","q":"get: 9 / 3 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0008","q":"get: 10 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0009","q":"get: 0 < 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0010","q":"get: -1 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0011","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0012","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0013","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0014","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0015","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0016","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0017","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0018","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0019","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0020","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0021","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0022","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0023","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0024","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0025","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0026","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0027","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0028","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0029","q":"get: request.auth.uid == 'user-0'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0030","q":"get: request.auth.token.score == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0031","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0032","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0033","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0034","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0035","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0036","q":"get: 3 + 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0037","q":"get: 12 - 4 == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0038","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0039","q":"get: 10 / 3 == 3.3333333333333335","a":"DENY","r":"c","k":"verdict"},{"t":"case 0040","q":"get: 11 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0041","q":"get: 1 < 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0042","q":"get: -2 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0043","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0044","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0045","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0046","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0047","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0048","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0049","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0050","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0051","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0052","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0053","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0054","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0055","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0056","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0057","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0058","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0059","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0060","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0061","q":"get: request.auth.uid == 'user-1'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0062","q":"get: request.auth.token.score == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0063","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0064","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0065","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0066","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0067","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0068","q":"get: 4 + 3 == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0069","q":"get: 13 - 4 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0070","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0071","q":"get: 11 / 3 == 3.6666666666666665","a":"DENY","r":"c","k":"verdict"},{"t":"case 0072","q":"get: 12 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0073","q":"get: 2 < 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0074","q":"get: -3 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0075","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0076","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0077","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0078","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0079","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0080","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0081","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0082","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0083","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0084","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0085","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0086","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0087","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0088","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0089","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0090","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0091","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0092","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0093","q":"get: request.auth.uid == 'user-2'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0094","q":"get: request.auth.token.score == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0095","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0096","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0097","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0098","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0099","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0100","q":"get: 5 + 3 == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0101","q":"get: 14 - 4 == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0102","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0103","q":"get: 12 / 3 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0104","q":"get: 13 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0105","q":"get: 3 < 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0106","q":"get: -4 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0107","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0108","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0109","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0110","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0111","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0112","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0113","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0114","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0115","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0116","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0117","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0118","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0119","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0120","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0121","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0122","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0123","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0124","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0125","q":"get: request.auth.uid == 'user-3'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0126","q":"get: request.auth.token.score == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0127","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0128","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0129","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0130","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0131","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0132","q":"get: 6 + 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0133","q":"get: 15 - 4 == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0134","q":"get: 6 * 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0135","q":"get: 13 / 3 == 4.333333333333333","a":"DENY","r":"c","k":"verdict"},{"t":"case 0136","q":"get: 14 % 7 == 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0137","q":"get: 4 < 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0138","q":"get: -5 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0139","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0140","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0141","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0142","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0143","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0144","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0145","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0146","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0147","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0148","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0149","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0150","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0151","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0152","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0153","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0154","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0155","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0156","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0157","q":"get: request.auth.uid == 'user-4'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0158","q":"get: request.auth.token.score == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0159","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0160","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0161","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0162","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0163","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0164","q":"get: 7 + 3 == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0165","q":"get: 16 - 4 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0166","q":"get: 7 * 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0167","q":"get: 14 / 3 == 4.666666666666667","a":"DENY","r":"c","k":"verdict"},{"t":"case 0168","q":"get: 15 % 7 == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0169","q":"get: 5 < 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0170","q":"get: -6 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0171","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0172","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0173","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0174","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0175","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0176","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0177","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0178","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0179","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0180","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0181","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0182","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0183","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0184","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0185","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0186","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0187","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0188","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0189","q":"get: request.auth.uid == 'user-5'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0190","q":"get: request.auth.token.score == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0191","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0192","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0193","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0194","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0195","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0196","q":"get: 8 + 3 == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0197","q":"get: 17 - 4 == 13","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0198","q":"get: 8 * 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0199","q":"get: 15 / 3 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0200","q":"get: 16 % 7 == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0201","q":"get: 6 < 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0202","q":"get: -7 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0203","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0204","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0205","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0206","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0207","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0208","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0209","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0210","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0211","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0212","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0213","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0214","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0215","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0216","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0217","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0218","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0219","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0220","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0221","q":"get: request.auth.uid == 'user-6'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0222","q":"get: request.auth.token.score == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0223","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0224","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0225","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0226","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0227","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0228","q":"get: 9 + 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0229","q":"get: 18 - 4 == 14","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0230","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0231","q":"get: 16 / 3 == 5.333333333333333","a":"DENY","r":"c","k":"verdict"},{"t":"case 0232","q":"get: 17 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0233","q":"get: 7 < 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0234","q":"get: -8 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0235","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0236","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0237","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0238","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0239","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0240","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0241","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0242","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0243","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0244","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0245","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0246","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0247","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0248","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0249","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0250","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0251","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0252","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0253","q":"get: request.auth.uid == 'user-7'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0254","q":"get: request.auth.token.score == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0255","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0256","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0257","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0258","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0259","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0260","q":"get: 10 + 3 == 13","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0261","q":"get: 19 - 4 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0262","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0263","q":"get: 17 / 3 == 5.666666666666667","a":"DENY","r":"c","k":"verdict"},{"t":"case 0264","q":"get: 18 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0265","q":"get: 8 < 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0266","q":"get: -9 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0267","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0268","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0269","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0270","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0271","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0272","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0273","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0274","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0275","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0276","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0277","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0278","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0279","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0280","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0281","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0282","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0283","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0284","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0285","q":"get: request.auth.uid == 'user-0'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0286","q":"get: request.auth.token.score == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0287","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0288","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0289","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0290","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0291","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0292","q":"get: 11 + 3 == 14","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0293","q":"get: 20 - 4 == 16","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0294","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0295","q":"get: 18 / 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0296","q":"get: 19 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0297","q":"get: 9 < 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0298","q":"get: -10 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0299","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0300","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0301","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0302","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0303","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0304","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0305","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0306","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0307","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0308","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0309","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0310","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0311","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0312","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0313","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0314","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0315","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0316","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0317","q":"get: request.auth.uid == 'user-1'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0318","q":"get: request.auth.token.score == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0319","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0320","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0321","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0322","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0323","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0324","q":"get: 12 + 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0325","q":"get: 21 - 4 == 17","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0326","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0327","q":"get: 19 / 3 == 6.333333333333333","a":"DENY","r":"c","k":"verdict"},{"t":"case 0328","q":"get: 20 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0329","q":"get: 10 < 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0330","q":"get: -11 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0331","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0332","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0333","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0334","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0335","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0336","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0337","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0338","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0339","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0340","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0341","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0342","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0343","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0344","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0345","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0346","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0347","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0348","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0349","q":"get: request.auth.uid == 'user-2'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0350","q":"get: request.auth.token.score == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0351","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0352","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0353","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0354","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0355","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0356","q":"get: 13 + 3 == 16","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0357","q":"get: 22 - 4 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0358","q":"get: 6 * 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0359","q":"get: 20 / 3 == 6.666666666666667","a":"DENY","r":"c","k":"verdict"},{"t":"case 0360","q":"get: 21 % 7 == 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0361","q":"get: 11 < 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0362","q":"get: -12 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0363","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0364","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0365","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0366","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0367","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0368","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0369","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0370","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0371","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0372","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0373","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0374","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0375","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0376","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0377","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0378","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0379","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0380","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0381","q":"get: request.auth.uid == 'user-3'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0382","q":"get: request.auth.token.score == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0383","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0384","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0385","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0386","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0387","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0388","q":"get: 14 + 3 == 17","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0389","q":"get: 23 - 4 == 19","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0390","q":"get: 7 * 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0391","q":"get: 21 / 3 == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0392","q":"get: 22 % 7 == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0393","q":"get: 12 < 13","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0394","q":"get: -13 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0395","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0396","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0397","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0398","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0399","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0400","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0401","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0402","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0403","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0404","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0405","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0406","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0407","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0408","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0409","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0410","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0411","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0412","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0413","q":"get: request.auth.uid == 'user-4'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0414","q":"get: request.auth.token.score == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0415","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0416","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0417","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0418","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0419","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0420","q":"get: 15 + 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0421","q":"get: 24 - 4 == 20","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0422","q":"get: 8 * 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0423","q":"get: 22 / 3 == 7.333333333333333","a":"DENY","r":"c","k":"verdict"},{"t":"case 0424","q":"get: 23 % 7 == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0425","q":"get: 13 < 14","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0426","q":"get: -14 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0427","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0428","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0429","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0430","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0431","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0432","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0433","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0434","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0435","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0436","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0437","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0438","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0439","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0440","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0441","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0442","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0443","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0444","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0445","q":"get: request.auth.uid == 'user-5'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0446","q":"get: request.auth.token.score == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0447","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0448","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0449","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0450","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0451","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0452","q":"get: 16 + 3 == 19","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0453","q":"get: 25 - 4 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0454","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0455","q":"get: 23 / 3 == 7.666666666666667","a":"DENY","r":"c","k":"verdict"},{"t":"case 0456","q":"get: 24 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0457","q":"get: 14 < 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0458","q":"get: -15 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0459","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0460","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0461","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0462","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0463","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0464","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0465","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0466","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0467","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0468","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0469","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0470","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0471","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0472","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0473","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0474","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0475","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0476","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0477","q":"get: request.auth.uid == 'user-6'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0478","q":"get: request.auth.token.score == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0479","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0480","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0481","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0482","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0483","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0484","q":"get: 17 + 3 == 20","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0485","q":"get: 26 - 4 == 22","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0486","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0487","q":"get: 24 / 3 == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0488","q":"get: 25 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0489","q":"get: 15 < 16","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0490","q":"get: -16 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0491","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0492","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0493","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0494","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0495","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0496","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0497","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0498","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0499","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0500","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0501","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0502","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0503","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0504","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0505","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0506","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0507","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0508","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0509","q":"get: request.auth.uid == 'user-7'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0510","q":"get: request.auth.token.score == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0511","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0512","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0513","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0514","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0515","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0516","q":"get: 18 + 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0517","q":"get: 27 - 4 == 23","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0518","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0519","q":"get: 25 / 3 == 8.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0520","q":"get: 26 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0521","q":"get: 16 < 17","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0522","q":"get: -17 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0523","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0524","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0525","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0526","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0527","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0528","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0529","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0530","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0531","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0532","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0533","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0534","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0535","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0536","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0537","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0538","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0539","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0540","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0541","q":"get: request.auth.uid == 'user-0'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0542","q":"get: request.auth.token.score == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0543","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0544","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0545","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0546","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0547","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0548","q":"get: 19 + 3 == 22","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0549","q":"get: 28 - 4 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0550","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0551","q":"get: 26 / 3 == 8.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0552","q":"get: 27 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0553","q":"get: 17 < 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0554","q":"get: -18 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0555","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0556","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0557","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0558","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0559","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0560","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0561","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0562","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0563","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0564","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0565","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0566","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0567","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0568","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0569","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0570","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0571","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0572","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0573","q":"get: request.auth.uid == 'user-1'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0574","q":"get: request.auth.token.score == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0575","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0576","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0577","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0578","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0579","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0580","q":"get: 20 + 3 == 23","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0581","q":"get: 29 - 4 == 25","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0582","q":"get: 6 * 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0583","q":"get: 27 / 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0584","q":"get: 28 % 7 == 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0585","q":"get: 18 < 19","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0586","q":"get: -19 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0587","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0588","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0589","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0590","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0591","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0592","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0593","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0594","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0595","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0596","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0597","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0598","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0599","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0600","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0601","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0602","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0603","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0604","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0605","q":"get: request.auth.uid == 'user-2'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0606","q":"get: request.auth.token.score == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0607","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0608","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0609","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0610","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0611","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0612","q":"get: 21 + 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0613","q":"get: 30 - 4 == 26","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0614","q":"get: 7 * 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0615","q":"get: 28 / 3 == 9.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0616","q":"get: 29 % 7 == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0617","q":"get: 19 < 20","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0618","q":"get: -20 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0619","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0620","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0621","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0622","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0623","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0624","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0625","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0626","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0627","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0628","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0629","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0630","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0631","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0632","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0633","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0634","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0635","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0636","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0637","q":"get: request.auth.uid == 'user-3'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0638","q":"get: request.auth.token.score == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0639","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0640","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0641","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0642","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0643","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0644","q":"get: 22 + 3 == 25","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0645","q":"get: 31 - 4 == 27","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0646","q":"get: 8 * 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0647","q":"get: 29 / 3 == 9.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0648","q":"get: 30 % 7 == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0649","q":"get: 20 < 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0650","q":"get: -21 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0651","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0652","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0653","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0654","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0655","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0656","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0657","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0658","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0659","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0660","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0661","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0662","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0663","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0664","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0665","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0666","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0667","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0668","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0669","q":"get: request.auth.uid == 'user-4'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0670","q":"get: request.auth.token.score == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0671","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0672","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0673","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0674","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0675","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0676","q":"get: 23 + 3 == 26","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0677","q":"get: 32 - 4 == 28","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0678","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0679","q":"get: 30 / 3 == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0680","q":"get: 31 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0681","q":"get: 21 < 22","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0682","q":"get: -22 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0683","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0684","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0685","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0686","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0687","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0688","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0689","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0690","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0691","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0692","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0693","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0694","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0695","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0696","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0697","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0698","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0699","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0700","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0701","q":"get: request.auth.uid == 'user-5'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0702","q":"get: request.auth.token.score == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0703","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0704","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0705","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0706","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0707","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0708","q":"get: 24 + 3 == 27","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0709","q":"get: 33 - 4 == 29","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0710","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0711","q":"get: 31 / 3 == 10.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0712","q":"get: 32 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0713","q":"get: 22 < 23","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0714","q":"get: -23 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0715","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0716","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0717","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0718","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0719","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0720","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0721","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0722","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0723","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0724","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0725","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0726","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0727","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0728","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0729","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0730","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0731","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0732","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0733","q":"get: request.auth.uid == 'user-6'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0734","q":"get: request.auth.token.score == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0735","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0736","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0737","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0738","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0739","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0740","q":"get: 25 + 3 == 28","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0741","q":"get: 34 - 4 == 30","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0742","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0743","q":"get: 32 / 3 == 10.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0744","q":"get: 33 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0745","q":"get: 23 < 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0746","q":"get: -24 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0747","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0748","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0749","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0750","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0751","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0752","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0753","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0754","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0755","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0756","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0757","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0758","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0759","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0760","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0761","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0762","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0763","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0764","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0765","q":"get: request.auth.uid == 'user-7'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0766","q":"get: request.auth.token.score == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0767","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0768","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0769","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0770","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0771","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0772","q":"get: 26 + 3 == 29","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0773","q":"get: 35 - 4 == 31","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0774","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0775","q":"get: 33 / 3 == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0776","q":"get: 34 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0777","q":"get: 24 < 25","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0778","q":"get: -25 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0779","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0780","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0781","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0782","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0783","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0784","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0785","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0786","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0787","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0788","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0789","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0790","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0791","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0792","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0793","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0794","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0795","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0796","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0797","q":"get: request.auth.uid == 'user-0'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0798","q":"get: request.auth.token.score == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0799","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0800","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0801","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0802","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0803","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0804","q":"get: 27 + 3 == 30","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0805","q":"get: 36 - 4 == 32","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0806","q":"get: 6 * 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0807","q":"get: 34 / 3 == 11.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0808","q":"get: 35 % 7 == 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0809","q":"get: 25 < 26","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0810","q":"get: -26 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0811","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0812","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0813","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0814","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0815","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0816","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0817","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0818","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0819","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0820","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0821","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0822","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0823","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0824","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0825","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0826","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0827","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0828","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0829","q":"get: request.auth.uid == 'user-1'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0830","q":"get: request.auth.token.score == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0831","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0832","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0833","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0834","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0835","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0836","q":"get: 28 + 3 == 31","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0837","q":"get: 37 - 4 == 33","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0838","q":"get: 7 * 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0839","q":"get: 35 / 3 == 11.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0840","q":"get: 36 % 7 == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0841","q":"get: 26 < 27","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0842","q":"get: -27 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0843","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0844","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0845","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0846","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0847","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0848","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0849","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0850","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0851","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0852","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0853","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0854","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0855","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0856","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0857","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0858","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0859","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0860","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0861","q":"get: request.auth.uid == 'user-2'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0862","q":"get: request.auth.token.score == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0863","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0864","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0865","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0866","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0867","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0868","q":"get: 29 + 3 == 32","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0869","q":"get: 38 - 4 == 34","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0870","q":"get: 8 * 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0871","q":"get: 36 / 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0872","q":"get: 37 % 7 == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0873","q":"get: 27 < 28","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0874","q":"get: -28 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0875","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0876","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0877","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0878","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0879","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0880","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0881","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0882","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0883","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0884","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0885","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0886","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0887","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0888","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0889","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0890","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0891","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0892","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0893","q":"get: request.auth.uid == 'user-3'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0894","q":"get: request.auth.token.score == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0895","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0896","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0897","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0898","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0899","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0900","q":"get: 30 + 3 == 33","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0901","q":"get: 39 - 4 == 35","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0902","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0903","q":"get: 37 / 3 == 12.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0904","q":"get: 38 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0905","q":"get: 28 < 29","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0906","q":"get: -29 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0907","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0908","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0909","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0910","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0911","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0912","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0913","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0914","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0915","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0916","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0917","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0918","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0919","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0920","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0921","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0922","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0923","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0924","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0925","q":"get: request.auth.uid == 'user-4'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0926","q":"get: request.auth.token.score == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0927","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0928","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0929","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0930","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0931","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0932","q":"get: 31 + 3 == 34","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0933","q":"get: 40 - 4 == 36","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0934","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0935","q":"get: 38 / 3 == 12.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0936","q":"get: 39 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0937","q":"get: 29 < 30","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0938","q":"get: -30 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0939","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0940","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0941","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0942","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0943","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0944","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0945","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0946","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0947","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0948","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0949","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0950","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0951","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0952","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0953","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0954","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0955","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0956","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0957","q":"get: request.auth.uid == 'user-5'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0958","q":"get: request.auth.token.score == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0959","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0960","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0961","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0962","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0963","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0964","q":"get: 32 + 3 == 35","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0965","q":"get: 41 - 4 == 37","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0966","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0967","q":"get: 39 / 3 == 13","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0968","q":"get: 40 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0969","q":"get: 30 < 31","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0970","q":"get: -31 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0971","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0972","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0973","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0974","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0975","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0976","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0977","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0978","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0979","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0980","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0981","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0982","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0983","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0984","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0985","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0986","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0987","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0988","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0989","q":"get: request.auth.uid == 'user-6'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0990","q":"get: request.auth.token.score == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0991","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0992","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0993","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0994","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0995","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0996","q":"get: 33 + 3 == 36","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0997","q":"get: 42 - 4 == 38","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0998","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0999","q":"get: 40 / 3 == 13.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 1000","q":"get: 41 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1001","q":"get: 31 < 32","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1002","q":"get: -32 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1003","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1004","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1005","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1006","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 1007","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1008","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1009","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1010","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1011","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1012","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1013","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1014","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1015","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1016","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1017","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1018","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1019","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1020","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1021","q":"get: request.auth.uid == 'user-7'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1022","q":"get: request.auth.token.score == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1023","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"string trim","q":"get: ' {name} '.trim() == '{name}'","a":"ALLOW","r":"c","k":"verdict"},{"t":"string case","q":"get: 'FiRe'.lower() == 'fire' && 'FiRe'.upper() == 'FIRE'","a":"ALLOW","r":"c","k":"verdict"},{"t":"string replace","q":"get: 'abcabc'.replace('a', 'x') == 'xbcxbc'","a":"ALLOW","r":"c","k":"verdict"},{"t":"string split","q":"get: 'a,b,c'.split(',') == ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"string match","q":"get: 'phase3'.matches('^phase[0-9]$')","a":"ALLOW","r":"c","k":"verdict"},{"t":"string coercion","q":"get: string(123) == '123' && string(true) == 'true'","a":"ALLOW","r":"c","k":"verdict"},{"t":"list concat","q":"get: [1, 2].concat([3]) == [1, 2, 3]","a":"ALLOW","r":"c","k":"verdict"},{"t":"list membership","q":"get: [1, 2, 3].hasAll([1, 3]) && [1, 2, 3].hasAny([9, 2])","a":"ALLOW","r":"c","k":"verdict"},{"t":"list has only","q":"get: [1, 2, 2].hasOnly([2, 1])","a":"ALLOW","r":"c","k":"verdict"},{"t":"list join","q":"get: ['a', 'b', 'c'].join('-') == 'a-b-c'","a":"ALLOW","r":"c","k":"verdict"},{"t":"list remove all","q":"get: [1, 2, 3, 2].removeAll([2]) == [1, 3]","a":"ALLOW","r":"c","k":"verdict"},{"t":"list index range","q":"get: [10, 20, 30][1] == 20 && [10, 20, 30][0:2] == [10, 20]","a":"ALLOW","r":"c","k":"verdict"},{"t":"map get","q":"get: {'a': 1}.get('missing', 7) == 7 && {'a': 1}.get('a', 7) == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"map keys values","q":"get: {'a': 1, 'b': 2}.keys().hasOnly(['a', 'b']) && {'a': 1, 'b': 2}.values().hasAll([1, 2])","a":"ALLOW","r":"c","k":"verdict"},{"t":"map size membership","q":"get: {'a': 1, 'b': 2}.size() == 2 && 'a' in {'a': 1}","a":"ALLOW","r":"c","k":"verdict"},{"t":"map diff","q":"get: {'a': 1, 'b': 2}.diff({'a': 1, 'b': 3, 'c': 4}).affectedKeys().hasOnly(['b', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"map diff sets","q":"get: {'a': 1, 'b': 2}.diff({'a': 1, 'b': 3, 'c': 4}).changedKeys().hasOnly(['b']) && {'a': 1, 'b': 2}.diff({'a': 1, 'b': 3, 'c': 4}).addedK…","a":"ALLOW","r":"c","k":"verdict"},{"t":"set union","q":"get: ['a', 'b'].toSet().union(['b', 'c'].toSet()).hasOnly(['a', 'b', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"set intersection","q":"get: ['a', 'b'].toSet().intersection(['b', 'c'].toSet()).hasOnly(['b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"set difference","q":"get: ['a', 'b'].toSet().difference(['b'].toSet()).hasOnly(['a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"bytes size hex","q":"get: 'abc'.toUtf8().size() == 3 && 'abc'.toUtf8().toHexString() == '616263'","a":"ALLOW","r":"c","k":"verdict"},{"t":"bytes base64 unicode","q":"get: 'é'.toUtf8().size() == 2 && 'abc'.toUtf8().toBase64() == 'YWJj'","a":"ALLOW","r":"c","k":"verdict"},{"t":"duration seconds","q":"get: duration.value(90, 's').seconds() == 90","a":"ALLOW","r":"c","k":"verdict"},{"t":"duration nanos","q":"get: duration.value(123, 'ns').nanos() == 123","a":"ALLOW","r":"c","k":"verdict"},{"t":"timestamp date","q":"get: timestamp.date(2024, 2, 29).year() == 2024 && timestamp.date(2024, 2, 29).month() == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"timestamp components","q":"get: timestamp.date(2024, 2, 29).day() == 29 && timestamp.date(2024, 2, 29).dayOfWeek() == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"timestamp arithmetic","q":"get: timestamp.date(2024, 2, 29) + duration.value(1, 'd') == timestamp.date(2024, 3, 1)","a":"ALLOW","r":"c","k":"verdict"},{"t":"latlng components","q":"get: latlng.value(1.25, 2.5).latitude() == 1.25 && latlng.value(1.25, 2.5).longitude() == 2.5","a":"ALLOW","r":"c","k":"verdict"},{"t":"latlng distance","q":"get: latlng.value(1, 2).distance(latlng.value(1, 2)) == 0.0","a":"ALLOW","r":"c","k":"verdict"},{"t":"math basic","q":"get: math.abs(-2) == 2 && math.ceil(1.2) == 2 && math.floor(1.8) == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"math round sqrt","q":"get: math.round(1.6) == 2 && math.sqrt(81) == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"math pow","q":"get: math.pow(2, 3) == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"hashing md5","q":"get: hashing.md5('abc'.toUtf8()).toHexString() == '900150983CD24FB0D6963F7D28E17F72'","a":"ALLOW","r":"c","k":"verdict"},{"t":"hashing sha256","q":"get: hashing.sha256('abc'.toUtf8()).toHexString() == 'BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD'","a":"ALLOW","r":"c","k":"verdict"},{"t":"request auth","q":"get: request.auth.uid == 'phase3-user' && request.auth.token.role == 'editor'","a":"ALLOW","r":"c","k":"verdict"},{"t":"request method time","q":"get: request.method == 'get' && request.time.year() == 2026","a":"ALLOW","r":"c","k":"verdict"},{"t":"path value","q":"get: resource.__name__ == /databases/$(database)/documents/phase3-language/path-value","a":"ALLOW","r":"c","k":"verdict"},{"t":"function let","q":"get: usesLet(3)","a":"ALLOW","r":"c","k":"verdict"},{"t":"resource update diff","q":"update: resource.data.name == 'before' && request.resource.data.name == 'after' && request.resource.data.diff(resource.data).affectedKeys()…","a":"ALLOW","r":"c","k":"verdict"},{"t":"query limit","q":"list: request.query.limit == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"nested match","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"recursive match","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"overlapping allow","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 15","q":"projects.test with the function-depth-15 source (643 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 16","q":"projects.test with the function-depth-16 source (678 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 17","q":"projects.test with the function-depth-17 source (713 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 18","q":"projects.test with the function-depth-18 source (748 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 19","q":"projects.test with the function-depth-19 source (783 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 20","q":"projects.test with the function-depth-20 source (818 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 21","q":"projects.test with the function-depth-21 source (853 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 22","q":"projects.test with the function-depth-22 source (888 bytes)","a":"compile ERROR: Maximum allowed call depth of 20 is reached for [f0->f1->f2->f3->f4->f5->f6->f7->f8->f9->f10->f11->f12->f13->f14->f15->f16->…","r":"c","k":"verdict"},{"t":"function depth 23","q":"projects.test with the function-depth-23 source (923 bytes)","a":"compile ERROR: Maximum allowed call depth of 20 is reached for [f0->f1->f2->f3->f4->f5->f6->f7->f8->f9->f10->f11->f12->f13->f14->f15->f16->…","r":"c","k":"error"},{"t":"linear expression terms 20","q":"projects.test with the linear-expression-terms-20 source (740 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"linear expression terms 30","q":"projects.test with the linear-expression-terms-30 source (1040 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"linear expression terms 40","q":"projects.test with the linear-expression-terms-40 source (1340 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"linear expression terms 50","q":"projects.test with the linear-expression-terms-50 source (1640 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"linear expression terms 100","q":"projects.test with the linear-expression-terms-100 source (3140 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"balanced expression terms 100","q":"projects.test with the balanced-expression-terms-100 source (3933 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"balanced expression terms 125","q":"projects.test with the balanced-expression-terms-125 source (4972 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"verdict"},{"t":"balanced expression terms 150","q":"projects.test with the balanced-expression-terms-150 source (5923 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced expression terms 175","q":"projects.test with the balanced-expression-terms-175 source (6962 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced expression terms 200","q":"projects.test with the balanced-expression-terms-200 source (7913 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced expression terms 225","q":"projects.test with the balanced-expression-terms-225 source (8954 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced expression terms 250","q":"projects.test with the balanced-expression-terms-250 source (9907 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced expression terms 300","q":"projects.test with the balanced-expression-terms-300 source (11903 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"linear expression terms 51","q":"projects.test with the linear-expression-terms-51 source (1670 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"linear expression terms 99","q":"projects.test with the linear-expression-terms-99 source (3110 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 50","q":"projects.test with the true-chain-terms-50 source (550 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"true chain terms 55","q":"projects.test with the true-chain-terms-55 source (590 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"true chain terms 60","q":"projects.test with the true-chain-terms-60 source (630 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"true chain terms 100","q":"projects.test with the true-chain-terms-100 source (950 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 101","q":"projects.test with the true-chain-terms-101 source (958 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 102","q":"projects.test with the true-chain-terms-102 source (966 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 103","q":"projects.test with the true-chain-terms-103 source (974 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 104","q":"projects.test with the true-chain-terms-104 source (982 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 105","q":"projects.test with the true-chain-terms-105 source (990 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 106","q":"projects.test with the true-chain-terms-106 source (998 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 107","q":"projects.test with the true-chain-terms-107 source (1006 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 108","q":"projects.test with the true-chain-terms-108 source (1014 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 109","q":"projects.test with the true-chain-terms-109 source (1022 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 110","q":"projects.test with the true-chain-terms-110 source (1030 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 120","q":"projects.test with the true-chain-terms-120 source (1110 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 150","q":"projects.test with the true-chain-terms-150 source (1350 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 200","q":"projects.test with the true-chain-terms-200 source (1750 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 50","q":"projects.test with the time-chain-terms-50 source (1350 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"time chain terms 99","q":"projects.test with the time-chain-terms-99 source (2526 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 100","q":"projects.test with the time-chain-terms-100 source (2550 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 101","q":"projects.test with the time-chain-terms-101 source (2574 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 102","q":"projects.test with the time-chain-terms-102 source (2598 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 103","q":"projects.test with the time-chain-terms-103 source (2622 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 104","q":"projects.test with the time-chain-terms-104 source (2646 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 105","q":"projects.test with the time-chain-terms-105 source (2670 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 120","q":"projects.test with the time-chain-terms-120 source (3030 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"literal left terms 50","q":"projects.test with the literal-left-terms-50 source (1640 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"literal left terms 99","q":"projects.test with the literal-left-terms-99 source (3110 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"literal left terms 100","q":"projects.test with the literal-left-terms-100 source (3140 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"right nested terms 20","q":"projects.test with the right-nested-terms-20 source (778 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"right nested terms 50","q":"projects.test with the right-nested-terms-50 source (1738 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"right nested terms 60","q":"projects.test with the right-nested-terms-60 source (2058 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"right nested terms 90","q":"projects.test with the right-nested-terms-90 source (3018 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"right nested terms 100","q":"projects.test with the right-nested-terms-100 source (3338 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"balanced parenthesised terms 60","q":"projects.test with the balanced-parenthesised-terms-60 source (2176 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"balanced parenthesised terms 100","q":"projects.test with the balanced-parenthesised-terms-100 source (3536 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"balanced parenthesised terms 200","q":"projects.test with the balanced-parenthesised-terms-200 source (7036 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced parenthesised terms 400","q":"projects.test with the balanced-parenthesised-terms-400 source (14036 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"unexpected token","q":"projects.test with the unexpected-token source (154 bytes)","a":"compile ERROR: Missing conditional expression after 'if'.","r":"c","k":"verdict"},{"t":"unclosed block","q":"projects.test with the unclosed-block source (89 bytes)","a":"compile ERROR: Missing 'match' keyword before path.","r":"c","k":"verdict"},{"t":"duplicate let","q":"projects.test with the duplicate-let source (245 bytes)","a":"compile ERROR: The identifier [value] is already bound in the current scope.","r":"c","k":"verdict"},{"t":"undefined name","q":"projects.test with the undefined-name source (170 bytes)","a":"compiled, WARNING: Invalid variable name: missingName.","r":"c","k":"verdict"},{"t":"invalid function arity","q":"projects.test with the invalid-function-arity source (169 bytes)","a":"compiled, WARNING: Incorrect number of arguments supplied to function: math.abs.","r":"c","k":"verdict"},{"t":"recursive function","q":"projects.test with the recursive-function source (210 bytes)","a":"compile ERROR: Recursive call is not allowed.","r":"c","k":"verdict"},{"t":"invalid recursive wildcard","q":"projects.test with the invalid-recursive-wildcard source (163 bytes)","a":"compile ERROR: Invalid glob match expression. Only one glob match is permitted in a match declaration path.","r":"c","k":"verdict"},{"t":"source bytes 255999","q":"projects.test with the source-bytes-255999 source (255999 bytes)","a":"compiled with no issues","r":"c","k":"verdict"},{"t":"source bytes 256000","q":"projects.test with the source-bytes-256000 source (256000 bytes)","a":"compiled with no issues","r":"c","k":"verdict"},{"t":"source bytes 256001","q":"projects.test with the source-bytes-256001 source (256001 bytes)","a":"compiled with no issues","r":"c","k":"verdict"},{"t":"source bytes 262145","q":"projects.test with the source-bytes-262145 source (262145 bytes)","a":"400 INVALID_ARGUMENT: Request contains an invalid argument.","r":"c","k":"verdict"},{"t":"production compile","q":"compile complex-firestore.rules (1193 non-blank lines)","a":"compiled with no issues","r":"c","k":"verdict"},{"t":"debug return","q":"get: debug(request.auth.uid) == 'phase3-user'","a":"DENY, error: Function not found error: Name: [debug].","r":"d","k":"verdict","w":"production's projects.test has no debug() (Function not found); Firenook evaluates debug() to its argument, as the emulator does"},{"t":"linear expression terms 60","q":"projects.test with the linear-expression-terms-60 source (1940 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 70","q":"projects.test with the linear-expression-terms-70 source (2240 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 80","q":"projects.test with the linear-expression-terms-80 source (2540 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 90","q":"projects.test with the linear-expression-terms-90 source (2840 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 52","q":"projects.test with the linear-expression-terms-52 source (1700 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 53","q":"projects.test with the linear-expression-terms-53 source (1730 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 54","q":"projects.test with the linear-expression-terms-54 source (1760 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 55","q":"projects.test with the linear-expression-terms-55 source (1790 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 56","q":"projects.test with the linear-expression-terms-56 source (1820 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 57","q":"projects.test with the linear-expression-terms-57 source (1850 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 58","q":"projects.test with the linear-expression-terms-58 source (1880 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 59","q":"projects.test with the linear-expression-terms-59 source (1910 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 91","q":"projects.test with the linear-expression-terms-91 source (2870 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 92","q":"projects.test with the linear-expression-terms-92 source (2900 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 93","q":"projects.test with the linear-expression-terms-93 source (2930 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 94","q":"projects.test with the linear-expression-terms-94 source (2960 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 95","q":"projects.test with the linear-expression-terms-95 source (2990 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 96","q":"projects.test with the linear-expression-terms-96 source (3020 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 97","q":"projects.test with the linear-expression-terms-97 source (3050 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 98","q":"projects.test with the linear-expression-terms-98 source (3080 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 70","q":"projects.test with the true-chain-terms-70 source (710 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 80","q":"projects.test with the true-chain-terms-80 source (790 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 90","q":"projects.test with the true-chain-terms-90 source (870 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 95","q":"projects.test with the true-chain-terms-95 source (910 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 96","q":"projects.test with the true-chain-terms-96 source (918 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 97","q":"projects.test with the true-chain-terms-97 source (926 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 98","q":"projects.test with the true-chain-terms-98 source (934 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 99","q":"projects.test with the true-chain-terms-99 source (942 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 55","q":"projects.test with the time-chain-terms-55 source (1470 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 60","q":"projects.test with the time-chain-terms-60 source (1590 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 70","q":"projects.test with the time-chain-terms-70 source (1830 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 80","q":"projects.test with the time-chain-terms-80 source (2070 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 90","q":"projects.test with the time-chain-terms-90 source (2310 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 95","q":"projects.test with the time-chain-terms-95 source (2430 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 96","q":"projects.test with the time-chain-terms-96 source (2454 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 97","q":"projects.test with the time-chain-terms-97 source (2478 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 98","q":"projects.test with the time-chain-terms-98 source (2502 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 60","q":"projects.test with the literal-left-terms-60 source (1940 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 90","q":"projects.test with the literal-left-terms-90 source (2840 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 95","q":"projects.test with the literal-left-terms-95 source (2990 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 96","q":"projects.test with the literal-left-terms-96 source (3020 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 97","q":"projects.test with the literal-left-terms-97 source (3050 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 98","q":"projects.test with the literal-left-terms-98 source (3080 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"source bytes 262143","q":"projects.test with the source-bytes-262143 source (262143 bytes)","a":"400 INVALID_ARGUMENT: Request contains an invalid argument.","r":"d","k":"verdict","w":"the Rules API's request envelope refuses this source below the documented 256 KiB deployed-rules maximum; Firenook accepts a source up to 262,144 bytes"},{"t":"source bytes 262144","q":"projects.test with the source-bytes-262144 source (262144 bytes)","a":"400 INVALID_ARGUMENT: Request contains an invalid argument.","r":"d","k":"verdict","w":"the Rules API's request envelope refuses this source below the documented 256 KiB deployed-rules maximum; Firenook accepts a source up to 262,144 bytes"},{"t":"the ruleset every other input changes, which compiles","q":"PUT :securityRules (the ruleset every other input changes, which compiles)","a":"200 compiled","r":"c","k":"answer"},{"t":"one word and nothing else (developer-tools-coverage-v1 invalid-reload)","q":"PUT :securityRules (one word and nothing else (developer-tools-coverage-v1 invalid-reload))","a":"400 L1:1 mismatched input 'broken' expecting {'function', 'import', 'service', 'rules_version'}","r":"c","k":"answer"},{"t":"an empty source","q":"PUT :securityRules (an empty source)","a":"400 L0:0 Rules content empty. Compilation aborted.","r":"c","k":"answer"},{"t":"only blank lines","q":"PUT :securityRules (only blank lines)","a":"400 L3:1 mismatched input '' expecting {'function', 'import', 'service', 'rules_version'}","r":"c","k":"answer"},{"t":"a comment and nothing else","q":"PUT :securityRules (a comment and nothing else)","a":"400 L2:1 mismatched input '' expecting {'function', 'import', 'service', 'rules_version'}","r":"c","k":"answer"},{"t":"a stray word before rules version","q":"PUT :securityRules (a stray word before rules_version)","a":"400 L1:1 Unexpected 'hello'.","r":"c","k":"answer"},{"t":"a stray word after the service block","q":"PUT :securityRules (a stray word after the service block)","a":"400 L13:1 Unexpected 'extra'.","r":"c","k":"answer"},{"t":"a stray word after a function before the service block","q":"PUT :securityRules (a stray word after a function before the service block)","a":"400 L3:1 Unexpected 'hello'.","r":"c","k":"answer"},{"t":"a match block before the service block","q":"PUT :securityRules (a match block before the service block)","a":"400 L2:1 mismatched input 'match' expecting {'function', 'import', 'service'}","r":"c","k":"answer"},{"t":"rules_version = 2","q":"PUT :securityRules (rules_version = 2)","a":"400 L1:17 mismatched input '2' expecting STRING","r":"c","k":"answer"},{"t":"rules_version '2'","q":"PUT :securityRules (rules_version '2')","a":"400 L1:15 missing '=' at ''2''","r":"c","k":"answer"},{"t":"rules_version: '2'","q":"PUT :securityRules (rules_version: '2')","a":"400 L1:14 mismatched input ':' expecting '='","r":"c","k":"answer"},{"t":"rules_version = ;","q":"PUT :securityRules (rules_version = ;)","a":"400 L1:17 missing STRING at ';'","r":"c","k":"answer"},{"t":"rules_version = '2; (an unterminated string)","q":"PUT :securityRules (rules_version = '2; (an unterminated string))","a":"400 L1:17 mismatched input ''2;' expecting STRING","r":"c","k":"answer"},{"t":"rules_version after the service block","q":"PUT :securityRules (rules_version after the service block)","a":"400 L12:1 Unexpected 'rules_version'.","r":"c","k":"answer"},{"t":"an allow in the service block after its match","q":"PUT :securityRules (an allow in the service block after its match)","a":"400 L12:3 Unexpected 'allow'.","r":"c","k":"answer"},{"t":"no } after a function body","q":"PUT :securityRules (no } after a function body)","a":"400 L6:5 missing '}' at 'match'","r":"c","k":"answer"},{"t":"no } closing the inner match","q":"PUT :securityRules (no } closing the inner match)","a":"400 L12:1 Unexpected ''. · L12:1 missing '}' at ''","r":"c","k":"answer"},{"t":"no } closing the service block","q":"PUT :securityRules (no } closing the service block)","a":"400 L12:1 Unexpected ''. · L12:1 missing '}' at ''","r":"c","k":"answer"},{"t":"no ; after an allow followed by another","q":"PUT :securityRules (no ; after an allow followed by another)","a":"200 compiled","r":"c","k":"answer"},{"t":"no ; after the last allow of a block","q":"PUT :securityRules (no ; after the last allow of a block)","a":"200 compiled","r":"c","k":"answer"},{"t":";; after an allow","q":"PUT :securityRules (;; after an allow)","a":"400 L8:33 Unexpected ';'.","r":"c","k":"answer"},{"t":"a ; after a match block","q":"PUT :securityRules (a ; after a match block)","a":"400 L10:6 Unexpected ';'.","r":"c","k":"answer"},{"t":"no ; after a let","q":"PUT :securityRules (no ; after a let)","a":"400 L6:7 missing ';' at 'return'","r":"c","k":"answer"},{"t":"if (signedIn();","q":"PUT :securityRules (if (signedIn();)","a":"400 L8:33 Unexpected ';'.","r":"c","k":"answer"},{"t":"if signedIn());","q":"PUT :securityRules (if signedIn());)","a":"400 L8:32 Unexpected ')'.","r":"c","k":"answer"},{"t":"if signedIn(;","q":"PUT :securityRules (if signedIn(;)","a":"400 L8:31 Unexpected ';'.","r":"c","k":"answer"},{"t":"function signedIn {","q":"PUT :securityRules (function signedIn {)","a":"400 L4:23 Missing 'function' signature","r":"c","k":"answer"},{"t":"== 'public; (single quote)","q":"PUT :securityRules (== 'public; (single quote))","a":"400 L9:7 Missing a closing '","r":"c","k":"answer"},{"t":"== \"public; (double quote)","q":"PUT :securityRules (== \"public; (double quote))","a":"400 L9:7 Missing a closing \"","r":"c","k":"answer"},{"t":"a line break inside a string","q":"PUT :securityRules (a line break inside a string)","a":"400 L9:1 Missing a closing ' · L9:1 Unexpected 'lic'.","r":"c","k":"answer"},{"t":"== 'public\\'; (the closing quote escaped)","q":"PUT :securityRules (== 'public\\'; (the closing quote escaped))","a":"400 L9:7 Missing a closing '","r":"c","k":"answer"},{"t":"match /items/{item=*}","q":"PUT :securityRules (match /items/{item=*})","a":"200 compiled","r":"c","k":"answer"},{"t":"match /items/{item}/","q":"PUT :securityRules (match /items/{item}/)","a":"400 L7:24 Forward slash '/' found where identifier or binding expected.","r":"c","k":"answer"},{"t":"allow read: if ;","q":"PUT :securityRules (allow read: if ;)","a":"400 L8:22 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"allow read: if, then the next allow","q":"PUT :securityRules (allow read: if, then the next allow)","a":"400 L9:7 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"if request.auth !=;","q":"PUT :securityRules (if request.auth !=;)","a":"400 L8:37 mismatched input ';' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_…","r":"c","k":"answer"},{"t":"if request.auth != then the closing }","q":"PUT :securityRules (if request.auth != then the closing })","a":"400 L10:5 mismatched input '}' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_…","r":"c","k":"answer"},{"t":"if !;","q":"PUT :securityRules (if !;)","a":"400 L8:23 mismatched input ';' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_…","r":"c","k":"answer"},{"t":"if (;","q":"PUT :securityRules (if (;)","a":"400 L8:23 Unexpected ';'.","r":"c","k":"answer"},{"t":"request.auth.uid = resource.data.owner","q":"PUT :securityRules (request.auth.uid = resource.data.owner)","a":"400 L9:40 Unexpected '='.","r":"c","k":"answer"},{"t":"request.auth.uid === resource.data.owner","q":"PUT :securityRules (request.auth.uid === resource.data.owner)","a":"400 L9:42 Unexpected '='.","r":"c","k":"answer"},{"t":"signedIn() & true","q":"PUT :securityRules (signedIn() & true)","a":"400 L8:35 Unexpected 'true'.","r":"c","k":"answer"},{"t":"a lone & before the ;","q":"PUT :securityRules (a lone & before the ;)","a":"400 L8:34 token recognition error at: '&;'","r":"c","k":"answer"},{"t":"signedIn() | true","q":"PUT :securityRules (signedIn() | true)","a":"400 L8:35 Unexpected 'true'.","r":"c","k":"answer"},{"t":"a ~ before the condition","q":"PUT :securityRules (a ~ before the condition)","a":"400 L8:22 token recognition error at: '~'","r":"c","k":"answer"},{"t":"allow read: signedIn();","q":"PUT :securityRules (allow read: signedIn();)","a":"400 L8:19 Missing 'if' before conditional expression.","r":"c","k":"answer"},{"t":"allow read: ;","q":"PUT :securityRules (allow read: ;)","a":"400 L8:19 Unexpected ';'.","r":"c","k":"answer"},{"t":"allow read if signedIn();","q":"PUT :securityRules (allow read if signedIn();)","a":"400 L8:18 Missing ':' before 'if' condition.","r":"c","k":"answer"},{"t":"allow get list:","q":"PUT :securityRules (allow get list:)","a":"400 L8:17 Unexpected 'list'.","r":"c","k":"answer"},{"t":"allow: if","q":"PUT :securityRules (allow: if)","a":"400 L8:12 Expected at least one 'operation' after 'allow'. · L8:12 Unexpected ':'.","r":"c","k":"answer"},{"t":"== resource.data.;","q":"PUT :securityRules (== resource.data.;)","a":"400 L9:57 Unexpected ';'.","r":"c","k":"answer"},{"t":"an @ in a condition","q":"PUT :securityRules (an @ in a condition)","a":"400 L8:22 Missing conditional expression after 'if'. · L8:22 Unexpected '@'.","r":"c","k":"answer"},{"t":"a # comment in a condition","q":"PUT :securityRules (a # comment in a condition)","a":"400 L8:36 Unexpected 'signed'.","r":"c","k":"answer"},{"t":"is text","q":"PUT :securityRules (is text)","a":"400 L8:48 An unsupported type identifier was used with the 'is' operator. Received text. Expected one of bool,bytes,constraint,duration,flo…","r":"c","k":"answer"},{"t":"function () {","q":"PUT :securityRules (function () {)","a":"400 L4:14 Missing 'function' id","r":"c","k":"answer"},{"t":"return;","q":"PUT :securityRules (return;)","a":"400 L5:13 mismatched input ';' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_…","r":"c","k":"answer"},{"t":"function signedIn() {}","q":"PUT :securityRules (function signedIn() {})","a":"400 L4:26 Missing 'function' body","r":"c","k":"answer"},{"t":"let = request.auth;","q":"PUT :securityRules (let = request.auth;)","a":"400 L5:11 Unexpected '='. · L5:20 mismatched input '.' expecting '='","r":"c","k":"answer"},{"t":"let auth request.auth;","q":"PUT :securityRules (let auth request.auth;)","a":"400 L5:16 missing '=' at 'request'","r":"c","k":"answer"},{"t":"a let and no return","q":"PUT :securityRules (a let and no return)","a":"400 L6:5 Unexpected '}'. · L6:5 mismatched input '}' expecting {'&&', '.', '==', '>', '>=', '[', '<', '<=', '-', '%', '!=', '||', '+', ';',…","r":"c","k":"answer"},{"t":"servce cloud.firestore","q":"PUT :securityRules (servce cloud.firestore)","a":"400 L2:1 mismatched input 'servce' expecting {'function', 'import', 'service'}","r":"c","k":"answer"},{"t":"rules verison","q":"PUT :securityRules (rules_verison)","a":"400 L1:1 mismatched input 'rules_verison' expecting {'function', 'import', 'service', 'rules_version'}","r":"c","k":"answer"},{"t":"the source ends after rules version","q":"PUT :securityRules (the source ends after rules_version)","a":"400 L1:21 mismatched input '' expecting {'function', 'import', 'service'}","r":"c","k":"answer"},{"t":"the source ends after service","q":"PUT :securityRules (the source ends after service)","a":"400 L2:8 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends after the service name","q":"PUT :securityRules (the source ends after the service name)","a":"400 L2:24 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends inside the service block","q":"PUT :securityRules (the source ends inside the service block)","a":"400 L2:26 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends after match","q":"PUT :securityRules (the source ends after match)","a":"400 L3:8 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends after a match path","q":"PUT :securityRules (the source ends after a match path)","a":"400 L3:9 Missing 'match' keyword before path. · L3:40 Unexpected ''. · L3:40 mismatched input '' expecting {'{', '/', PATH_SEGMEN…","r":"c","k":"answer"},{"t":"the source ends inside a match block","q":"PUT :securityRules (the source ends inside a match block)","a":"400 L7:11 Missing 'match' keyword before path. · L7:26 Unexpected ''. · L7:26 mismatched input '' expecting {'{', '/', PATH_SEGME…","r":"c","k":"answer"},{"t":"the source ends inside a parameter list","q":"PUT :securityRules (the source ends inside a parameter list)","a":"400 L4:23 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends inside a function body","q":"PUT :securityRules (the source ends inside a function body)","a":"400 L4:26 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends after return","q":"PUT :securityRules (the source ends after return)","a":"400 L5:13 mismatched input '' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER,…","r":"c","k":"answer"},{"t":"the source ends after allow","q":"PUT :securityRules (the source ends after allow)","a":"400 L9:12 Expected at least one 'operation' after 'allow'. · L9:12 Unexpected ''. · L9:12 mismatched input '' expecting '}'","r":"c","k":"answer"},{"t":"the source ends after an allow method","q":"PUT :securityRules (the source ends after an allow method)","a":"400 L8:17 Unexpected ''. · L8:17 mismatched input '' expecting {':', ',', '}', ';', '/', 'allow', 'function', 'if', 'match', PATH…","r":"c","k":"answer"},{"t":"the source ends after if","q":"PUT :securityRules (the source ends after if)","a":"400 L8:21 Missing conditional expression after 'if'. · L8:21 Unexpected ''. · L8:21 mismatched input '' expecting {'}', ';', '/',…","r":"c","k":"answer"},{"t":"the source ends inside a condition","q":"PUT :securityRules (the source ends inside a condition)","a":"400 L9:42 mismatched input '' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER,…","r":"c","k":"answer"},{"t":"the source ends after a condition","q":"PUT :securityRules (the source ends after a condition)","a":"400 L8:32 Unexpected ''. · L8:32 mismatched input '' expecting {'&&', '.', '==', '>', '>=', '[', '<', '<=', '-', '%', '!=', '||',…","r":"c","k":"answer"},{"t":"the source ends inside call arguments","q":"PUT :securityRules (the source ends inside call arguments)","a":"400 L8:31 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends after a complete allow","q":"PUT :securityRules (the source ends after a complete allow)","a":"400 L8:33 Unexpected ''. · L8:33 mismatched input '' expecting '}'","r":"c","k":"answer"},{"t":"the source ends after a nested match block","q":"PUT :securityRules (the source ends after a nested match block)","a":"400 L10:6 Unexpected ''. · L10:6 mismatched input '' expecting '}'","r":"c","k":"answer"},{"t":"the source ends inside a string","q":"PUT :securityRules (the source ends inside a string)","a":"400 L9:49 Missing a closing ' · L9:49 Unexpected ''. · L9:49 mismatched input '' expecting {'&&', '.', '==', '>', '>=', '[', '<',…","r":"c","k":"answer"},{"t":"the source ends inside a block comment","q":"PUT :securityRules (the source ends inside a block comment)","a":"400 L13:1 Unexpected '/*'.","r":"c","k":"answer"},{"t":"two allows with no condition","q":"PUT :securityRules (two allows with no condition)","a":"400 L8:22 Missing conditional expression after 'if'. · L9:23 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"a missing ; and a missing final }","q":"PUT :securityRules (a missing ; and a missing final })","a":"400 L12:1 Unexpected ''. · L12:1 missing '}' at ''","r":"c","k":"answer"},{"t":"allow reads and a missing if","q":"PUT :securityRules (allow reads and a missing if)","a":"400 L9:20 Missing 'if' before conditional expression.","r":"c","k":"answer"},{"t":"a package name as a parameter and a cut condition","q":"PUT :securityRules (a package name as a parameter and a cut condition)","a":"400 L9:42 mismatched input ';' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_…","r":"c","k":"answer"},{"t":"Windows line endings","q":"PUT :securityRules (Windows line endings)","a":"400 L8:22 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"non-ASCII text before the mistake on its line","q":"PUT :securityRules (non-ASCII text before the mistake on its line)","a":"400 L8:31 mismatched input ';' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_…","r":"c","k":"answer"},{"t":"a tab before the mistake","q":"PUT :securityRules (a tab before the mistake)","a":"400 L8:17 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"rules-v2 production-parse-errors unexpected-token, unchanged","q":"PUT :securityRules (rules-v2 production-parse-errors unexpected-token, unchanged)","a":"400 L5:21 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"rules-v2 production-parse-errors unclosed-block, unchanged","q":"PUT :securityRules (rules-v2 production-parse-errors unclosed-block, unchanged)","a":"400 L3:9 Missing 'match' keyword before path. · L4:1 Unexpected ''. · L4:1 mismatched input '' expecting {'{', '/', PATH_SEGMENT}","r":"c","k":"answer"},{"t":"rules-v2 production-parse-errors recursive-function, unchanged","q":"PUT :securityRules (rules-v2 production-parse-errors recursive-function, unchanged)","a":"400 L5:16 Recursive call is not allowed.","r":"c","k":"answer"},{"t":"rules-v2 production-parse-errors invalid-recursive-wildcard, unchanged","q":"PUT :securityRules (rules-v2 production-parse-errors invalid-recursive-wildcard, unchanged)","a":"400 L4:22 Invalid glob match expression. Only one glob match is permitted in a match declaration path.","r":"c","k":"answer"},{"t":"a second service block","q":"PUT :securityRules (a second service block)","a":"400 L15:3 The 'match' body must contain at least one declaration.","r":"u"},{"t":"service cloud.firestor","q":"PUT :securityRules (service cloud.firestor)","a":"200 compiled with 6 warnings","r":"u"},{"t":"service with no name","q":"PUT :securityRules (service with no name)","a":"400 L3:9 Unexpected '/databases'. · L7:5 Unexpected 'match'.","r":"u"},{"t":"rules_version = '1'","q":"PUT :securityRules (rules_version = '1')","a":"200 compiled with 1 warning","r":"u"},{"t":"no { after the service name","q":"PUT :securityRules (no { after the service name)","a":"400 L3:3 Unexpected 'match'. · L7:5 Unexpected 'match'.","r":"u"},{"t":"a stray word first in the service block","q":"PUT :securityRules (a stray word first in the service block)","a":"400 L3:3 Unexpected 'hello'. · L8:5 Unexpected 'match'.","r":"u"},{"t":"no { after a match path","q":"PUT :securityRules (no { after a match path)","a":"400 L7:11 Missing 'match' keyword before path. · L8:7 Unexpected 'allow'. · L8:7 mismatched input 'allow' expecting {'{', '/', PATH_SEGMENT…","r":"u"},{"t":"no { before a function body","q":"PUT :securityRules (no { before a function body)","a":"400 L5:7 Unexpected 'return'. · L12:1 Unexpected '}'.","r":"u"},{"t":"function signedIn( {","q":"PUT :securityRules (function signedIn( {)","a":"400 L4:24 Unexpected '{'. · L12:1 Unexpected '}'.","r":"u"},{"t":"match items/{item}","q":"PUT :securityRules (match items/{item})","a":"400 L7:11 Unexpected 'items'. · L7:16 Missing 'match' keyword before path. · L8:7 missing '}' at 'allow' · L12:1 Unexpected '}'.","r":"u"},{"t":"match /items/{}","q":"PUT :securityRules (match /items/{})","a":"400 L7:17 Forward slash '/' found where identifier or binding expected. · L7:19 The 'match' body must contain at least one declaration. · L…","r":"u"},{"t":"match /items//{item}","q":"PUT :securityRules (match /items//{item})","a":"400 L7:11 Missing 'match' keyword before path. · L8:7 Unexpected 'allow'. · L8:7 mismatched input 'allow' expecting {'{', '/', PATH_SEGMENT…","r":"u"},{"t":"match /items/$(item)","q":"PUT :securityRules (match /items/$(item))","a":"400 L7:11 Missing 'match' keyword before path. · L7:17 Forward slash '/' found where identifier or binding expected. · L7:18 Unexpected '$'…","r":"u"},{"t":"match with no path","q":"PUT :securityRules (match with no path)","a":"400 L7:11 Unexpected '{'. · L12:1 Unexpected '}'.","r":"u"},{"t":"allow reads:","q":"PUT :securityRules (allow reads:)","a":"200 compiled with 2 warnings","r":"u"},{"t":"function signedIn(a b)","q":"PUT :securityRules (function signedIn(a b))","a":"400 L4:25 Unexpected 'b'. · L12:1 Unexpected '}'.","r":"u"},{"t":"a body with no return","q":"PUT :securityRules (a body with no return)","a":"400 L5:7 Unexpected 'request'. · L12:1 Unexpected '}'.","r":"u"},{"t":"two returns","q":"PUT :securityRules (two returns)","a":"400 L6:7 mismatched input 'return' expecting '}' · L13:1 Unexpected '}'.","r":"u"},{"t":"an if statement in a body","q":"PUT :securityRules (an if statement in a body)","a":"400 L5:7 Unexpected 'if'. · L6:7 Unexpected 'return'. · L8:5 Unexpected 'match'.","r":"u"},{"t":"a word where return belongs after a let","q":"PUT :securityRules (a word where return belongs after a let)","a":"400 L6:7 Unexpected 'retrun'. · L7:5 mismatched input '}' expecting {'&&', '.', '==', '>', '>=', '[', '<', '<=', '-', '%', '!=', '||', '+',…","r":"u"},{"t":"a let in a match block","q":"PUT :securityRules (a let in a match block)","a":"400 L7:11 Missing 'match' keyword before path. · L8:7 Unexpected 'let'. · L8:7 mismatched input 'let' expecting {'{', '/', PATH_SEGMENT} ·…","r":"u"},{"t":"fucntion signedIn()","q":"PUT :securityRules (fucntion signedIn())","a":"400 L3:9 Missing 'match' keyword before path. · L4:5 Unexpected 'fucntion'. · L4:5 mismatched input 'fucntion' expecting {'{', '/', PATH_SE…","r":"u"},{"t":"retrun request.auth","q":"PUT :securityRules (retrun request.auth)","a":"400 L5:7 Unexpected 'retrun'. · L12:1 Unexpected '}'.","r":"u"},{"t":"alow read","q":"PUT :securityRules (alow read)","a":"400 L7:11 Missing 'match' keyword before path. · L8:7 Unexpected 'alow'. · L8:7 mismatched input 'alow' expecting {'{', '/', PATH_SEGMENT}…","r":"u"},{"t":"alow and an unterminated string","q":"PUT :securityRules (alow and an unterminated string)","a":"400 L7:11 Missing 'match' keyword before path. · L8:7 Unexpected 'alow'. · L8:7 mismatched input 'alow' expecting {'{', '/', PATH_SEGMENT}…","r":"u"},{"t":"rules-v2 production-parse-errors duplicate-let, unchanged","q":"PUT :securityRules (rules-v2 production-parse-errors duplicate-let, unchanged)","a":"400 L5:34 Unused variable: value. · L5:49 The identifier [value] is already bound in the current scope.","r":"u"},{"t":"owner seed","q":"PATCH /v1/projects/{project}/databases/(default)/documents/items/one (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"constant","q":"reload rules, read twice, GET :ruleCoverage: allow get: if true;","a":"read 200 · no report (constant rules)","r":"c","k":"answer"},{"t":"list and map","q":"reload rules, read twice, GET :ruleCoverage: allow get: if [1, 2].size() == 2 && {'ok': true}.ok;","a":"read 200 · coverage report with 6 expressions","r":"c","k":"answer"},{"t":"empty containers","q":"reload rules, read twice, GET :ruleCoverage: allow get: if [].size() == 0 && {}.size() == 0;","a":"read 200 · coverage report with 7 expressions","r":"c","k":"answer"},{"t":"slice","q":"reload rules, read twice, GET :ruleCoverage: allow get: if [1, 2, 3][1:2] == [2];","a":"read 200 · coverage report with 4 expressions","r":"c","k":"answer"},{"t":"method arguments","q":"reload rules, read twice, GET :ruleCoverage: allow get: if 'hello'.matches('h.*');","a":"read 200 · coverage report with 1 expression","r":"c","k":"answer"},{"t":"grouped literal","q":"reload rules, read twice, GET :ruleCoverage: allow get: if ('hello').size() == 5;","a":"read 200 · coverage report with 2 expressions","r":"c","k":"answer"},{"t":"constant function","q":"reload rules, read twice, GET :ruleCoverage: allow get: if accept();","a":"read 200 · coverage report with 1 expression","r":"c","k":"answer"},{"t":"duration","q":"reload rules, read twice, GET :ruleCoverage: allow get: if duration.value(1, 's') == duration.value(1000, 'ms');","a":"read 200 · coverage report with 3 expressions","r":"c","k":"answer"},{"t":"set","q":"reload rules, read twice, GET :ruleCoverage: allow get: if [1, 2].toSet().hasAll([1]);","a":"read 200 · coverage report with 4 expressions","r":"c","k":"answer"},{"t":"map diff","q":"reload rules, read twice, GET :ruleCoverage: allow get: if {'x': 1}.diff({'x': 2}).changedKeys().hasOnly(['x']);","a":"read 200 · coverage report with 6 expressions","r":"c","k":"answer"},{"t":"map diff statuses","q":"reload rules, read twice, GET :ruleCoverage: allow get: if {'same': 1, 'removed': 1, 'changed': 1}.diff({'same': 1, 'added': 1, 'changed':…","a":"read 200 · coverage report with 6 expressions","r":"c","k":"answer"},{"t":"map diff direction size","q":"reload rules, read twice, GET :ruleCoverage: allow get: if check();","a":"read 200 · coverage report with 19 expressions","r":"c","k":"answer"},{"t":"bytes","q":"reload rules, read twice, GET :ruleCoverage: allow get: if hashing.sha256('hello'.toUtf8()).size() == 32;","a":"read 200 · coverage report with 4 expressions","r":"c","k":"answer"},{"t":"timestamp","q":"reload rules, read twice, GET :ruleCoverage: allow get: if timestamp.date(2020, 1, 2).year() == 2020;","a":"read 200 · coverage report with 3 expressions","r":"c","k":"answer"},{"t":"request","q":"reload rules, read twice, GET :ruleCoverage: allow get: if request.auth == null && request.method == \"get\";","a":"read 200 · coverage report with 7 expressions","r":"c","k":"answer"},{"t":"invalid reload","q":"PUT /emulator/v1/projects/{project}:securityRules (source \"broken\")","a":"400 INVALID_ARGUMENT: Error compiling rules: L1:1 mismatched input 'broken' expecting {'function', 'import', 'service', 'rules_version'}","r":"c","k":"answer"},{"t":"coverage after the rejected reload","q":"GET :ruleCoverage after the rejected reload","a":"coverage of the last valid rules, 7 expressions","r":"c","k":"answer"},{"t":"namespace name as a function parameter","q":"PUT :securityRules with function accept(duration)","a":"400 INVALID_ARGUMENT: Error compiling rules: L4:19 duration is a package and cannot be used as variable name.","r":"c","k":"answer"},{"t":"short circuit","q":"reload rules, read twice, GET :ruleCoverage: allow get: if false && resource.data.missing;","a":"read 403 · coverage report with 4 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"field equality","q":"reload rules, read twice, GET :ruleCoverage: allow get: if resource.data.visible == true;","a":"read 200 · coverage report with 4 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"missing field","q":"reload rules, read twice, GET :ruleCoverage: allow get: if resource.data.missing == true;","a":"read 403 · coverage report with 4 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations); an error value's cause text is Firenook's own message (DESIGN.md, Live bounded coverage observations)"},{"t":"function","q":"reload rules, read twice, GET :ruleCoverage: allow get: if accept(resource.data.visible);","a":"read 200 · coverage report with 8 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"unicode crlf","q":"reload rules, read twice, GET :ruleCoverage: allow get: if '中文🚀' == '中文🚀' && resource.data.visible;","a":"read 200 · coverage report with 5 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"parentheses","q":"reload rules, read twice, GET :ruleCoverage: allow get: if (resource.data.visible == true) || false;","a":"read 200 · coverage report with 5 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"unary","q":"reload rules, read twice, GET :ruleCoverage: allow get: if !resource.data.visible;","a":"read 403 · coverage report with 4 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"index","q":"reload rules, read twice, GET :ruleCoverage: allow get: if resource.data['visible'];","a":"read 200 · coverage report with 3 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"simple function","q":"reload rules, read twice, GET :ruleCoverage: allow get: if accept(resource.data.visible);","a":"read 200 · coverage report with 5 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"path interpolation","q":"reload rules, read twice, GET :ruleCoverage: allow get: if exists(/databases/$(database)/documents/items/one);","a":"read 200 · coverage report with 3 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"type check","q":"reload rules, read twice, GET :ruleCoverage: allow get: if resource.data.visible is bool;","a":"read 200 · coverage report with 4 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"nested grouping","q":"reload rules, read twice, GET :ruleCoverage: allow get: if ((resource.data.visible));","a":"read 200 · coverage report with 3 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"get typed","q":"GET /values/typed","a":"200 {name, fields, createTime, updateTime} · 1 evaluation message","r":"c","k":"answer"},{"t":"get authenticated","q":"GET /values/typed (signed in)","a":"200 {name, fields, createTime, updateTime} · 1 evaluation message","r":"c","k":"answer"},{"t":"get mask","q":"GET /values/typed?mask.fieldPaths=yes&mask.fieldPaths=text","a":"200 {name, fields, createTime, updateTime} · 1 evaluation message","r":"c","k":"answer"},{"t":"batch get mask","q":"POST :batchGet","a":"200 [1 item] · 1 evaluation message","r":"c","k":"answer"},{"t":"begin read transaction","q":"POST :beginTransaction","a":"200 {transaction} · 0 evaluation messages","r":"c","k":"answer"},{"t":"transaction get","q":"POST :batchGet","a":"200 [1 item] · 1 evaluation message","r":"c","k":"answer"},{"t":"rollback","q":"POST :rollback","a":"200 {} · 0 evaluation messages","r":"c","k":"answer"},{"t":"begin write transaction","q":"POST :beginTransaction","a":"200 {transaction} · 0 evaluation messages","r":"c","k":"answer"},{"t":"write transaction get","q":"POST :batchGet","a":"200 [1 item] · 1 evaluation message","r":"c","k":"answer"},{"t":"write rollback","q":"POST :rollback","a":"200 {} · 0 evaluation messages","r":"c","k":"answer"},{"t":"delete","q":"DELETE /values/typed","a":"200 {} · 1 evaluation message","r":"c","k":"answer"},{"t":"initial history","q":"connect to the requests websocket","a":"empty history","r":"c","k":"answer"},{"t":"evaluation request 1","q":"rules evaluation event 1","a":"allow create /databases/(default)/documents/values/typed","r":"c","k":"answer"},{"t":"evaluation request 5","q":"rules evaluation event 5","a":"allow list /databases/(default)/documents/values/*","r":"c","k":"answer"},{"t":"evaluation request 6","q":"rules evaluation event 6","a":"allow list /databases/(default)/documents/values/*","r":"c","k":"answer"},{"t":"evaluation request 7","q":"rules evaluation event 7","a":"deny list /databases/(default)/documents/**/values/*","r":"c","k":"answer"},{"t":"evaluation request 8","q":"rules evaluation event 8","a":"deny list /databases/(default)/documents/parents/p/values/*","r":"c","k":"answer"},{"t":"evaluation request 9","q":"rules evaluation event 9","a":"deny list /databases/(default)/documents/parents/p/**/values/*","r":"c","k":"answer"},{"t":"evaluation request 25","q":"rules evaluation event 25","a":"allow get /databases/(default)/documents/values/missing","r":"c","k":"answer"},{"t":"create typed","q":"PATCH /values/typed","a":"200 {name, fields, createTime, updateTime} · 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"query","q":"POST :runQuery","a":"200 [1 item] · 1 evaluation message","r":"d","k":"answer","w":"a runQuery stream ends without \"done\": true, as production's does (COMPATIBILITY.md)"},{"t":"query unbounded","q":"POST :runQuery","a":"200 [1 item] · 1 evaluation message","r":"d","k":"answer","w":"a runQuery stream ends without \"done\": true, as production's does (COMPATIBILITY.md)"},{"t":"query group","q":"POST :runQuery","a":"403 PERMISSION_DENIED: No matching allow statements · 1 evaluation message","r":"d","k":"error","w":"a refusal's message is production's `Missing or insufficient permissions.` followed by the official emulator's text on the next line (COMPATIBILITY.md)"},{"t":"query nested","q":"POST /parents/p:runQuery","a":"403 PERMISSION_DENIED: No matching allow statements · 1 evaluation message","r":"d","k":"error","w":"a refusal's message is production's `Missing or insufficient permissions.` followed by the official emulator's text on the next line (COMPATIBILITY.md)"},{"t":"query nested group","q":"POST /parents/p:runQuery","a":"403 PERMISSION_DENIED: No matching allow statements · 1 evaluation message","r":"d","k":"error","w":"a refusal's message is production's `Missing or insufficient permissions.` followed by the official emulator's text on the next line (COMPATIBILITY.md)"},{"t":"patch mask","q":"PATCH /values/typed?updateMask.fieldPaths=text","a":"200 {name, fields, createTime, updateTime} · 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"patch quoted mask","q":"PATCH /values/typed?updateMask.fieldPaths=%60a.b%60&updateMask.fieldPaths=nested.active","a":"200 {name, fields, createTime, updateTime} · 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"commit transform","q":"POST :commit","a":"200 {writeResults, commitTime} · 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"commit replacement transform","q":"POST :commit","a":"200 {writeResults, commitTime} · 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"commit empty mask","q":"POST :commit","a":"200 {writeResults, commitTime} · 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"get missing","q":"GET /values/missing","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/values/missing) not found. · 1 evaluation message","r":"d","k":"error","w":"the REST error message is Firenook's own words for the same status and code (COMPATIBILITY.md: most error messages are Firenook's own words)"},{"t":"evaluation request 2","q":"rules evaluation event 2","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 3","q":"rules evaluation event 3","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 4","q":"rules evaluation event 4","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 10","q":"rules evaluation event 10","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 11","q":"rules evaluation event 11","a":"allow create /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 12","q":"rules evaluation event 12","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context); a write's granular outcomes are its own evaluation's; the official emulator's update event also carries its preliminary check's outcome (DESIGN.md, Allow-decision instrumentation: no duplicated entries imitating the jar's shared mutable history)"},{"t":"evaluation request 13","q":"rules evaluation event 13","a":"allow create /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 14","q":"rules evaluation event 14","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context); a write's granular outcomes are its own evaluation's; the official emulator's update event also carries its preliminary check's outcome (DESIGN.md, Allow-decision instrumentation: no duplicated entries imitating the jar's shared mutable history)"},{"t":"evaluation request 15","q":"rules evaluation event 15","a":"allow create /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 16","q":"rules evaluation event 16","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context); a write's granular outcomes are its own evaluation's; the official emulator's update event also carries its preliminary check's outcome (DESIGN.md, Allow-decision instrumentation: no duplicated entries imitating the jar's shared mutable history)"},{"t":"evaluation request 17","q":"rules evaluation event 17","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 18","q":"rules evaluation event 18","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 19","q":"rules evaluation event 19","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 20","q":"rules evaluation event 20","a":"allow create /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 21","q":"rules evaluation event 21","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context); a write's granular outcomes are its own evaluation's; the official emulator's update event also carries its preliminary check's outcome (DESIGN.md, Allow-decision instrumentation: no duplicated entries imitating the jar's shared mutable history)"},{"t":"evaluation request 22","q":"rules evaluation event 22","a":"allow create /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 23","q":"rules evaluation event 23","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context); a write's granular outcomes are its own evaluation's; the official emulator's update event also carries its preliminary check's outcome (DESIGN.md, Allow-decision instrumentation: no duplicated entries imitating the jar's shared mutable history)"},{"t":"evaluation request 24","q":"rules evaluation event 24","a":"allow delete /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"create typed","q":"PATCH /values/typed","a":"200 {name, fields, createTime, updateTime} · 2 evaluation messages","r":"c","k":"status"},{"t":"get typed","q":"GET /values/typed","a":"200 {name, fields, createTime, updateTime} · 1 evaluation message","r":"c","k":"answer"},{"t":"get authenticated","q":"GET /values/typed (signed in)","a":"200 {name, fields, createTime, updateTime} · 1 evaluation message","r":"c","k":"answer"},{"t":"delete","q":"DELETE /values/typed","a":"200 {} · 1 evaluation message","r":"c","k":"answer"},{"t":"initial history","q":"connect to the requests websocket","a":"empty history","r":"c","k":"answer"},{"t":"evaluation request 1","q":"rules evaluation event 1","a":"allow create /databases/(default)/documents/values/typed","r":"c","k":"answer"},{"t":"evaluation request 5","q":"rules evaluation event 5","a":"allow list /databases/(default)/documents/values/*","r":"c","k":"answer"},{"t":"evaluation request 7","q":"rules evaluation event 7","a":"allow get /databases/(default)/documents/values/missing","r":"c","k":"answer"},{"t":"query","q":"POST :runQuery","a":"200 [1 item] · 1 evaluation message","r":"d","k":"answer","w":"a runQuery stream ends without \"done\": true, as production's does (COMPATIBILITY.md)"},{"t":"get missing","q":"GET /values/missing","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/values/missing) not found. · 1 evaluation message","r":"d","k":"error","w":"the REST error message is Firenook's own words for the same status and code (COMPATIBILITY.md: most error messages are Firenook's own words)"},{"t":"evaluation request 2","q":"rules evaluation event 2","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 3","q":"rules evaluation event 3","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 4","q":"rules evaluation event 4","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 6","q":"rules evaluation event 6","a":"allow delete /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as absent","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as absent","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as owner","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as owner","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as owner","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as user","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as user","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as user-lowercase-scheme","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as user-lowercase-scheme","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as issued-at-zero","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as issued-at-zero","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as issued-tomorrow","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as issued-tomorrow","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as other-project","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as other-project","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as other-audience","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as other-audience","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as sub-only","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as sub-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as no-alg","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as no-alg","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as signed","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as signed","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as padded-base64","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as padded-base64","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as absent","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as absent","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as owner","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as owner","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as owner","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as user","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as user","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as user-lowercase-scheme","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as user-lowercase-scheme","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as issued-at-zero","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as issued-at-zero","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as issued-tomorrow","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as issued-tomorrow","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as other-project","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as other-project","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as other-audience","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as other-audience","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as sub-only","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as sub-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as no-alg","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as no-alg","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as signed","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as signed","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as padded-base64","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as padded-base64","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as absent","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as absent","a":"403 PERMISSION_DENIED: Null value error. for 'get' @ L8, Null value error. for 'get' @ L8","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as absent","a":"403 PERMISSION_DENIED: Null value error. for 'get' @ L9, Null value error. for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as user","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as user-lowercase-scheme","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as issued-at-zero","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as issued-tomorrow","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as other-project","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as other-audience","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as sub-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as sub-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as user-id-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as user-id-only","a":"403 PERMISSION_DENIED: Property sub is undefined on object. for 'get' @ L8, Property sub is undefined on object. for 'get' @ L8","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as empty-claims","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as empty-claims","a":"403 PERMISSION_DENIED: Property sub is undefined on object. for 'get' @ L8, Property sub is undefined on object. for 'get' @ L8","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as empty-claims","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as numeric-sub","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L8","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as numeric-sub","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as no-alg","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as no-alg","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as signed","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as padded-base64","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as padded-base64","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (rules, absent)","q":"ListCollectionIds as absent (with rules)","a":"PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"error"},{"t":"listCollectionIds over REST (rules, absent)","q":"POST :listCollectionIds as absent (with rules)","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (rules, user)","q":"ListCollectionIds as user (with rules)","a":"PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"error"},{"t":"listCollectionIds over REST (rules, user)","q":"POST :listCollectionIds as user (with rules)","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (rules, owner)","q":"ListCollectionIds as owner (with rules)","a":"OK","r":"c","k":"status"},{"t":"listCollectionIds over REST (rules, owner)","q":"POST :listCollectionIds as owner (with rules)","a":"200","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (open, absent)","q":"ListCollectionIds as absent (no rules)","a":"PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"error"},{"t":"listCollectionIds over REST (open, absent)","q":"POST :listCollectionIds as absent (no rules)","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (open, user)","q":"ListCollectionIds as user (no rules)","a":"PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"error"},{"t":"listCollectionIds over REST (open, user)","q":"POST :listCollectionIds as user (no rules)","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (open, owner)","q":"ListCollectionIds as owner (no rules)","a":"OK","r":"c","k":"status"},{"t":"listCollectionIds over REST (open, owner)","q":"POST :listCollectionIds as owner (no rules)","a":"200","r":"c","k":"status"},{"t":"pipeline as owner","q":"Enterprise ExecutePipeline as owner","a":"OK","r":"c","k":"status"},{"t":"query as owner","q":"Enterprise RunQuery as owner","a":"OK","r":"c","k":"status"},{"t":"json","q":"PUT /emulator/v1/projects/…:securityRules (json body)","a":"200 · the new rules then govern a read (403)","r":"c","k":"answer"},{"t":"text plain","q":"PUT /emulator/v1/projects/…:securityRules (text-plain body)","a":"200 · the new rules then govern a read (403)","r":"c","k":"answer"},{"t":"no content type","q":"PUT /emulator/v1/projects/…:securityRules (no-content-type body)","a":"200 · the new rules then govern a read (403)","r":"c","k":"answer"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as absent","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as absent","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as absent","a":"PERMISSION_DENIED: Null value error. for 'get' @ L6, Null value error. for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as absent","a":"403 PERMISSION_DENIED: Null value error. for 'get' @ L6, Null value error. for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as user","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as user","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as user-lowercase-scheme","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as user-lowercase-scheme","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as issued-at-zero","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as issued-at-zero","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as issued-tomorrow","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as issued-tomorrow","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as other-project","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as other-project","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as other-audience","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as other-audience","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as sub-only","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as sub-only","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as no-alg","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as no-alg","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as signed","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as signed","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as padded-base64","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as padded-base64","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as absent","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as absent","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as absent","a":"PERMISSION_DENIED: Null value error. for 'get' @ L6, Null value error. for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as absent","a":"403 PERMISSION_DENIED: Null value error. for 'get' @ L6, Null value error. for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as user","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as user","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as user-lowercase-scheme","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as user-lowercase-scheme","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as issued-at-zero","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as issued-at-zero","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as issued-tomorrow","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as issued-tomorrow","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as other-project","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as other-project","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as other-audience","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as other-audience","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as sub-only","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as sub-only","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as no-alg","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as no-alg","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as signed","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as signed","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as padded-base64","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as padded-base64","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"uid-null/x","q":"GET uid-null/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"token-sub/x","q":"GET token-sub/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"token-keys/x","q":"GET token-keys/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"uid-null/x","q":"GET uid-null/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"token-sub/x","q":"GET token-sub/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"token-keys/x","q":"GET token-keys/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"twoAllows over gRPC","q":"read refused by rules (twoAllows)","a":"PERMISSION_DENIED: false for 'get' @ L11, false for 'get' @ L12","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"twoAllows over REST","q":"read refused by rules (twoAllows)","a":"403 PERMISSION_DENIED: false for 'get' @ L11, false for 'get' @ L12","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"noMatchingAllow over gRPC","q":"read refused by rules (noMatchingAllow)","a":"PERMISSION_DENIED: No matching allow statements","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"noMatchingAllow over REST","q":"read refused by rules (noMatchingAllow)","a":"403 PERMISSION_DENIED: No matching allow statements","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"create over REST","q":"create refused by rules (create)","a":"403 PERMISSION_DENIED: false for 'create' @ L14","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"PartitionQuery over gRPC (rules, absent)","q":"PartitionQuery as absent (with rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (rules, user)","q":"PartitionQuery as user (with rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (rules, owner)","q":"PartitionQuery as owner (with rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (open, absent)","q":"PartitionQuery as absent (no rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (open, user)","q":"PartitionQuery as user (no rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (open, owner)","q":"PartitionQuery as owner (no rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"pipeline as user","q":"Enterprise ExecutePipeline as user","a":"PERMISSION_DENIED: false for 'list' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"query as user","q":"Enterprise RunQuery as user","a":"PERMISSION_DENIED: false for 'list' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"duration as a parameter","q":"install rules using \"duration\" as a parameter: function accept(duration) { return duration; }","a":"400 Error compiling rules: L4:18 duration is a package and cannot be used as variable name. L4:37 duration is a package and cannot be used…","r":"c","k":"verdict"},{"t":"duration as a binding","q":"install rules using \"duration\" as a binding: function accept() { let duration = true; return duration; }","a":"400 Error compiling rules: L4:26 duration is a package and cannot be used as variable name. L4:50 duration is a package and cannot be used…","r":"c","k":"verdict"},{"t":"duration as a function","q":"install rules using \"duration\" as a function: function duration() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"duration as a wildcard","q":"install rules using \"duration\" as a wildcard: allow get: if duration == 'one';","a":"400 Error compiling rules: L4:16 duration is a package and cannot be used as variable name. L4:42 duration is a package and cannot be used…","r":"c","k":"verdict"},{"t":"duration as a field","q":"install rules using \"duration\" as a field: allow get: if {'duration': true}.duration;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"hashing as a parameter","q":"install rules using \"hashing\" as a parameter: function accept(hashing) { return hashing; }","a":"400 Error compiling rules: L4:18 hashing is a package and cannot be used as variable name. L4:36 hashing is a package and cannot be used as…","r":"c","k":"verdict"},{"t":"hashing as a binding","q":"install rules using \"hashing\" as a binding: function accept() { let hashing = true; return hashing; }","a":"400 Error compiling rules: L4:26 hashing is a package and cannot be used as variable name. L4:49 hashing is a package and cannot be used as…","r":"c","k":"verdict"},{"t":"hashing as a function","q":"install rules using \"hashing\" as a function: function hashing() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"hashing as a wildcard","q":"install rules using \"hashing\" as a wildcard: allow get: if hashing == 'one';","a":"400 Error compiling rules: L4:16 hashing is a package and cannot be used as variable name. L4:41 hashing is a package and cannot be used as…","r":"c","k":"verdict"},{"t":"hashing as a field","q":"install rules using \"hashing\" as a field: allow get: if {'hashing': true}.hashing;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"latlng as a parameter","q":"install rules using \"latlng\" as a parameter: function accept(latlng) { return latlng; }","a":"400 Error compiling rules: L4:18 latlng is a package and cannot be used as variable name. L4:35 latlng is a package and cannot be used as v…","r":"c","k":"verdict"},{"t":"latlng as a binding","q":"install rules using \"latlng\" as a binding: function accept() { let latlng = true; return latlng; }","a":"400 Error compiling rules: L4:26 latlng is a package and cannot be used as variable name. L4:48 latlng is a package and cannot be used as v…","r":"c","k":"verdict"},{"t":"latlng as a function","q":"install rules using \"latlng\" as a function: function latlng() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"latlng as a wildcard","q":"install rules using \"latlng\" as a wildcard: allow get: if latlng == 'one';","a":"400 Error compiling rules: L4:16 latlng is a package and cannot be used as variable name. L4:40 latlng is a package and cannot be used as v…","r":"c","k":"verdict"},{"t":"latlng as a field","q":"install rules using \"latlng\" as a field: allow get: if {'latlng': true}.latlng;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"math as a parameter","q":"install rules using \"math\" as a parameter: function accept(math) { return math; }","a":"400 Error compiling rules: L4:18 math is a package and cannot be used as variable name. L4:33 math is a package and cannot be used as varia…","r":"c","k":"verdict"},{"t":"math as a binding","q":"install rules using \"math\" as a binding: function accept() { let math = true; return math; }","a":"400 Error compiling rules: L4:26 math is a package and cannot be used as variable name. L4:46 math is a package and cannot be used as varia…","r":"c","k":"verdict"},{"t":"math as a function","q":"install rules using \"math\" as a function: function math() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"math as a wildcard","q":"install rules using \"math\" as a wildcard: allow get: if math == 'one';","a":"400 Error compiling rules: L4:16 math is a package and cannot be used as variable name. L4:38 math is a package and cannot be used as varia…","r":"c","k":"verdict"},{"t":"math as a field","q":"install rules using \"math\" as a field: allow get: if {'math': true}.math;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"timestamp as a parameter","q":"install rules using \"timestamp\" as a parameter: function accept(timestamp) { return timestamp; }","a":"400 Error compiling rules: L4:18 timestamp is a package and cannot be used as variable name. L4:38 timestamp is a package and cannot be use…","r":"c","k":"verdict"},{"t":"timestamp as a binding","q":"install rules using \"timestamp\" as a binding: function accept() { let timestamp = true; return timestamp; }","a":"400 Error compiling rules: L4:26 timestamp is a package and cannot be used as variable name. L4:51 timestamp is a package and cannot be use…","r":"c","k":"verdict"},{"t":"timestamp as a function","q":"install rules using \"timestamp\" as a function: function timestamp() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"timestamp as a wildcard","q":"install rules using \"timestamp\" as a wildcard: allow get: if timestamp == 'one';","a":"400 Error compiling rules: L4:16 timestamp is a package and cannot be used as variable name. L4:43 timestamp is a package and cannot be use…","r":"c","k":"verdict"},{"t":"timestamp as a field","q":"install rules using \"timestamp\" as a field: allow get: if {'timestamp': true}.timestamp;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a parameter","q":"install rules using \"request\" as a parameter: function accept(request) { return request; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a binding","q":"install rules using \"request\" as a binding: function accept() { let request = true; return request; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a function","q":"install rules using \"request\" as a function: function request() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a wildcard","q":"install rules using \"request\" as a wildcard: allow get: if request == 'one';","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a field","q":"install rules using \"request\" as a field: allow get: if {'request': true}.request;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a parameter","q":"install rules using \"resource\" as a parameter: function accept(resource) { return resource; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a binding","q":"install rules using \"resource\" as a binding: function accept() { let resource = true; return resource; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a function","q":"install rules using \"resource\" as a function: function resource() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a wildcard","q":"install rules using \"resource\" as a wildcard: allow get: if resource == 'one';","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a field","q":"install rules using \"resource\" as a field: allow get: if {'resource': true}.resource;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a parameter","q":"install rules using \"value\" as a parameter: function accept(value) { return value; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a binding","q":"install rules using \"value\" as a binding: function accept() { let value = true; return value; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a function","q":"install rules using \"value\" as a function: function value() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a wildcard","q":"install rules using \"value\" as a wildcard: allow get: if value == 'one';","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a field","q":"install rules using \"value\" as a field: allow get: if {'value': true}.value;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"is a path","q":"get c/x: path('a/b') is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"is not a string","q":"get c/x: path('a/b') is string","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"equals the same path","q":"get c/x: path('a/b') == path('a/b')","a":"200 (expression held)","r":"c","k":"status"},{"t":"differs from another path","q":"get c/x: path('a/b') != path('a/c')","a":"200 (expression held)","r":"c","k":"status"},{"t":"equals a literal with its slash","q":"get c/x: path('/a/b') == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"equals a literal without its slash","q":"get c/x: path('a/b') == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"not equal to a string","q":"get c/x: path('a/b') == 'a/b'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"string of it keeps the text","q":"get c/x: string(path('a/b')) == 'a/b'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"string of it keeps the slash","q":"get c/x: string(path('/a/b')) == '/a/b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"first segment without a slash","q":"get c/x: path('a/b')[0] == 'a'","a":"200 (expression held)","r":"c","k":"status"},{"t":"first segment with a slash","q":"get c/x: path('/a/b')[0] == 'a'","a":"200 (expression held)","r":"c","k":"status"},{"t":"last segment","q":"get c/x: path('/a/b')[1] == 'b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"exists with it","q":"get c/x: exists(path('/databases/' + database + '/documents/c/x'))","a":"200 (expression held)","r":"c","k":"status"},{"t":"get with it","q":"get c/x: get(path('/databases/' + database + '/documents/c/x')).data.v == 1","a":"200 (expression held)","r":"c","k":"status"},{"t":"exists with a string is an error","q":"get c/x: exists('/databases/' + database + '/documents/c/x')","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"exists for a missing document","q":"get c/x: exists(path('/databases/' + database + '/documents/c/missing'))","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"equals the document name","q":"get c/x: resource.__name__ == path('/databases/' + database + '/documents/c/x')","a":"200 (expression held)","r":"c","k":"status"},{"t":"an integer is an error","q":"get c/x: path(1) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a null is an error","q":"get c/x: path(null) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"no argument is an error","q":"get c/x: path() is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"two arguments is an error","q":"get c/x: path('a', 'b') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"empty text","q":"get c/x: path('') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a doubled slash","q":"get c/x: path('a//b') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a trailing slash","q":"get c/x: path('a/b/') == path('a/b')","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a trailing slash alone","q":"get c/x: path('a/b/') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"the root alone","q":"get c/x: path('/') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"two leading slashes","q":"get c/x: path('//a') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a space in a segment","q":"get c/x: path('a b/c') == /a%20b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"a space is kept","q":"get c/x: path('a b/c')[0] == 'a b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a single segment","q":"get c/x: path('a') == /a","a":"200 (expression held)","r":"c","k":"status"},{"t":"an odd number of segments reads too","q":"get c/x: path('/databases/' + database + '/documents/c')[4] == 'c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a leading slash is kept","q":"get c/x: path('/a/b') == path('a/b')","a":"200 (expression held)","r":"c","k":"status"},{"t":"an interpolated literal","q":"get c/x: /a/$('b') == path('/a/b')","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a string in a literal","q":"get c/x: /a/$('b') == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a string function","q":"get c/x: /a/$(string(1)) == /a/1","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating an index","q":"get c/x: /a/$(['b'][0]) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a map key","q":"get c/x: /a/$({'k': 'b'}['k']) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name against a literal","q":"get c/x: /databases/$(database)/documents/c/x == resource.__name__","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name against a literal reversed","q":"get c/x: resource.__name__ == /databases/$(database)/documents/c/x","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name against the request path","q":"get c/x: resource.__name__ == request.path","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name is a path","q":"get c/x: resource.__name__ is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name as a string","q":"get c/x: string(resource.__name__) == '/databases/' + database + '/documents/c/x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name with a project","q":"get c/x: string(resource.__name__) == '/projects/{project}/databases/' + database + '/documents/c/x'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"the name first segment databases","q":"get c/x: resource.__name__[0] == 'databases'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name first segment projects","q":"get c/x: resource.__name__[0] == 'projects'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"the name last segment","q":"get c/x: resource.__name__[4] == 'x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the request path as a string","q":"get c/x: string(request.path) == '/databases/' + database + '/documents/c/x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the request path with a project","q":"get c/x: string(request.path) == '/projects/{project}/databases/' + database + '/documents/c/x'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a percent escape is read in a literal","q":"get c/x: /a%20b/c[0] == 'a b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a percent escape is kept as text","q":"get c/x: /a%20b/c[0] == 'a%20b'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a percent escape in string of a literal","q":"get c/x: string(/a%20b/c) == '/a%20b/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a space in string of a literal","q":"get c/x: string(/a%20b/c) == '/a b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a percent escape through path","q":"get c/x: path('a%20b/c')[0] == 'a%20b'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a percent escape through path is read","q":"get c/x: path('a%20b/c')[0] == 'a b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"string of a spaced path","q":"get c/x: string(path('a b/c')) == '/a b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"string of a spaced path encoded","q":"get c/x: string(path('a b/c')) == '/a%20b/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a slash escape in a literal","q":"get c/x: /a%2Fb/c[0] == 'a/b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name by index","q":"get c/x: resource['__name__'] == /databases/$(database)/documents/c/x","a":"200 (expression held)","r":"c","k":"status"},{"t":"string of a slash escape read","q":"get c/x: string(/a%2Fb/c) == '/a/b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"string of a slash escape kept","q":"get c/x: string(/a%2Fb/c) == '/a%2Fb/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a slash escape equals two segments","q":"get c/x: /a%2Fb/c == /a/b/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a slash escape through path","q":"get c/x: path('a%2Fb/c')[0] == 'a/b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolated slash one segment","q":"get c/x: /a/$('b/c')[1] == 'b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolated slash two segments","q":"get c/x: /a/$('b/c')[2] == 'c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"interpolated slash equals","q":"get c/x: /a/$('b/c') == /a/b/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"interpolated escape kept","q":"get c/x: /a/$('b%20c')[1] == 'b%20c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolated escape read","q":"get c/x: /a/$('b%20c')[1] == 'b c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a bad escape through path","q":"get c/x: path('a%zz') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a bad escape kept through path","q":"get c/x: path('a%zz')[0] == 'a%zz'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a bad escape in a literal","q":"get c/x: /a%zz/c is path","a":"rules refused (400)","r":"c","k":"verdict"},{"t":"a literal right after if","q":"get c/x: /a/b is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"a dot in a literal","q":"get c/x: /a/b.c[1] == 'b.c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"an interpolation then index","q":"get c/x: /a/$('b')[1] == 'b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal indexed","q":"get c/x: /a/b[1] == 'b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal range","q":"get c/x: /a/b/c[1:3] == /b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"a path range","q":"get c/x: path('/a/b/c')[1:3] == /b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind through path","q":"get c/x: path('/a/{x}/c').bind({'x': 'b'}) == /a/b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind on a literal","q":"get c/x: /a/{x}/c.bind({'x': 'b'}) == /a/b/c","a":"rules refused (400)","r":"c","k":"verdict"},{"t":"bind an integer","q":"get c/x: path('/a/{x}/c').bind({'x': 1}) == /a/1/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a missing key","q":"get c/x: path('/a/{x}/c').bind({'y': 'b'}) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind a missing key keeps it","q":"get c/x: string(path('/a/{x}/c').bind({'y': 'b'})) == '/a/{x}/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind an extra key","q":"get c/x: path('/a/{x}/c').bind({'x': 'b', 'y': 'd'}) == /a/b/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind part of a segment","q":"get c/x: path('/a/p{x}q/c').bind({'x': 'b'}) == /a/pbq/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind part of a segment kept","q":"get c/x: string(path('/a/p{x}q/c').bind({'x': 'b'})) == '/a/p{x}q/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind two keys","q":"get c/x: path('/{x}/{y}').bind({'x': 'a', 'y': 'b'}) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a slash value","q":"get c/x: path('/a/{x}').bind({'x': 'b/c'})[1] == 'b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a path value","q":"get c/x: path('/a/{x}').bind({'x': path('b/c')}) == /a/b/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind nothing","q":"get c/x: path('/a/b').bind({}) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a non map","q":"get c/x: path('/a/{x}').bind('b') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind on the request path","q":"get c/x: request.path.bind({}) == request.path","a":"200 (expression held)","r":"c","k":"status"},{"t":"a size of a path","q":"get c/x: path('/a/b').size() == 2","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"interpolating a path","q":"get c/x: /a/$(path('b/c')) == /a/b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a path segment","q":"get c/x: /a/$(path('b/c'))[2] == 'c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a literal","q":"get c/x: /a/$(/b/c) == /a/b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating an integer","q":"get c/x: /a/$(1) == /a/1","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a bool is an error","q":"get c/x: /a/$(true) is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating the request path","q":"get c/x: /a/$(request.path)[1] == request.path[0]","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating inside a segment","q":"get c/x: /a/p$('b')q == /a/pbq","a":"rules refused (400)","r":"c","k":"verdict"},{"t":"interpolating an empty string","q":"get c/x: /a/$('')/c is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a bool reads as text","q":"get c/x: /a/$(true)[1] == 'true'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a float","q":"get c/x: /a/$(1.5) is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a float reads as text","q":"get c/x: /a/$(1.5)[1] == '1.5'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a null","q":"get c/x: /a/$(null) is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a list","q":"get c/x: /a/$([1]) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"interpolating a map","q":"get c/x: /a/$({'k': 1}) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind a bool","q":"get c/x: path('/a/{x}').bind({'x': true})[1] == 'true'","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a float","q":"get c/x: path('/a/{x}').bind({'x': 1.5})[1] == '1.5'","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a null","q":"get c/x: path('/a/{x}').bind({'x': null}) is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a list","q":"get c/x: path('/a/{x}').bind({'x': [1]}) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind a recursive template","q":"get c/x: path('/a/{x=**}').bind({'x': 'b'}) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind keeps spaces","q":"get c/x: path('/a/{x}').bind({'x': 'b c'})[1] == 'b c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind does not read an escape","q":"get c/x: path('/a/{x}').bind({'x': 'b%20c'})[1] == 'b%20c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name by index is a path","q":"get c/x: resource['__name__'] is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id by index","q":"get c/x: resource['id'] == 'x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the data by index","q":"get c/x: resource['data'].v == 1","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id","q":"get c/x: resource.id == 'x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id is a string","q":"get c/x: resource.id is string","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id of a get","q":"get c/x: get(path('/databases/' + database + '/documents/c/x')).id == 'x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name of a get","q":"get c/x: get(path('/databases/' + database + '/documents/c/x')).__name__ == path('/databases/' + database + '/documents/c/x')","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id against a wildcard","q":"get c/x: resource.id == id","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal in parentheses","q":"get c/x: (/a/b) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal negated equal","q":"get c/x: /a/b != /a/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal in a list","q":"get c/x: /a/b in [/a/b]","a":"200 (expression held)","r":"c","k":"status"},{"t":"list the id","q":"list c: resource.id == 'x'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the id differs","q":"list c: resource.id != 'nope'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the id is a string","q":"list c: resource.id is string","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the name is a path","q":"list c: resource.__name__ is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the name equals","q":"list c: resource.__name__ == /databases/$(database)/documents/c/x","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the name by index","q":"list c: resource['__name__'] is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the id by index","q":"list c: resource['id'] is string","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"create the id","q":"create c/new: request.resource.id == 'new'","a":"200 (expression held)","r":"c","k":"status"},{"t":"create the id is a string","q":"create c/new: request.resource.id is string","a":"200 (expression held)","r":"c","k":"status"},{"t":"create the name","q":"create c/new: request.resource.__name__ == /databases/$(database)/documents/c/new","a":"200 (expression held)","r":"c","k":"status"},{"t":"create the name by index","q":"create c/new: request.resource['__name__'] == /databases/$(database)/documents/c/new","a":"200 (expression held)","r":"c","k":"status"},{"t":"create the name against the request path","q":"create c/new: request.resource.__name__ == request.path","a":"200 (expression held)","r":"c","k":"status"},{"t":"member get room","q":"GET documents/rooms/r1 as u-member","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"anonymous get room","q":"GET documents/rooms/r1 signed out","a":"403 PERMISSION_DENIED: false for 'get' @ L26","r":"c","k":"status"},{"t":"lead create room","q":"POST documents:commit as u-lead","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"member create room","q":"POST documents:commit as u-member","a":"403 PERMISSION_DENIED: false for 'create' @ L29, false for 'update' @ L39","r":"c","k":"status"},{"t":"anonymous create room","q":"POST documents:commit signed out","a":"403 PERMISSION_DENIED: false for 'create' @ L29, false for 'update' @ L39","r":"c","k":"status"},{"t":"create room unknown field","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L29:24 for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ L…","r":"c","k":"status"},{"t":"create room missing field","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: false for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ L29","r":"c","k":"status"},{"t":"create room title not string","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L29:24 for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ L…","r":"c","k":"status"},{"t":"create room title too long","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L29:24 for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ L…","r":"c","k":"status"},{"t":"create room visibility not listed","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L29:24 for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ L…","r":"c","k":"status"},{"t":"update room allowed field","q":"POST documents:commit as u-lead","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"update room locked field","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L39:24 for 'update' @ L39, false for 'update' @ L39","r":"c","k":"status"},{"t":"lead delete room","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: false for 'delete' @ L43","r":"c","k":"status"},{"t":"outsider get entry","q":"GET documents/rooms/r1/entries/e1 as u-outsider","a":"403 PERMISSION_DENIED: evaluation error at L52:23 for 'get' @ L52, false for 'get' @ L52","r":"c","k":"status"},{"t":"member get entry","q":"GET documents/rooms/r1/entries/e1 as u-member","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"member list foreign members","q":"POST documents/rooms/r2:runQuery as u-member","a":"403 PERMISSION_DENIED: evaluation error at L47:24 for 'list' @ L47, false for 'list' @ L47","r":"c","k":"status"},{"t":"outsider query entries with field","q":"POST documents/rooms/r1:runQuery as u-outsider","a":"403 PERMISSION_DENIED: evaluation error at L55:24 for 'list' @ L55, false for 'list' @ L55","r":"c","k":"status"},{"t":"create entry without optional field","q":"POST documents:commit as u-member","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"create entry over limit","q":"POST documents:commit as u-member","a":"403 PERMISSION_DENIED: false for 'create' @ L58, evaluation error at L63:26 for 'update' @ L63, false for 'create' @ L58","r":"c","k":"status"},{"t":"create entry not integer","q":"POST documents:commit as u-member","a":"403 PERMISSION_DENIED: false for 'create' @ L58, evaluation error at L63:26 for 'update' @ L63, false for 'create' @ L58","r":"c","k":"status"},{"t":"update entry in open room","q":"POST documents:commit as u-member","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"create room with null field","q":"POST documents:commit as u-lead","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"anonymous query missing document id","q":"POST documents:runQuery signed out","a":"403 PERMISSION_DENIED: false for 'list' @ L27","r":"c","k":"status"},{"t":"member query missing document id","q":"POST documents:runQuery as u-member","a":"403 PERMISSION_DENIED: evaluation error at L27:22 for 'list' @ L27","r":"c","k":"status"},{"t":"get matching document id","q":"GET documents/marks/yellow as u-member","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"get non matching document id","q":"GET documents/marks/YELLOW_1 as u-member","a":"403 PERMISSION_DENIED: false for 'get' @ L71","r":"c","k":"status"},{"t":"create mark both fields","q":"POST documents:commit as u-member","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"create mark wrong type","q":"POST documents:commit as u-member","a":"403 PERMISSION_DENIED: false for 'create' @ L73","r":"c","k":"status"},{"t":"member query entries with field","q":"POST documents/rooms/r1:runQuery as u-member","a":"200 [1 item]","r":"d","k":"answer","w":"Firenook ends a runQuery stream without \"done\": true, as production does"},{"t":"probe/access 10","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/access-10","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"probe/access 11","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/access-11","a":"403 PERMISSION_DENIED: evaluation error at L17:21 for 'get' @ L17, Service call error. Function: [get], Argument: [path_value { segments {…","r":"c","k":"verdict"},{"t":"probe/cached 11","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/cached-11","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"probe/exists 10","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/exists-10","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"probe/exists 11","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/exists-11","a":"403 PERMISSION_DENIED: evaluation error at L55:21 for 'get' @ L55, Service call error. Function: [exists], Argument: [path_value { segments…","r":"c","k":"verdict"},{"t":"batch 20 distinct access calls","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"verdict"},{"t":"batch 21 distinct access calls","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"403 PERMISSION_DENIED: evaluation error at L68:32 for 'create' @ L68, evaluation error at L68:32 for 'update' @ L68, evaluation error at L6…","r":"c","k":"verdict"},{"t":"get after sees pending write","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"verdict"},{"t":"get after denies stale invariant","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"403 PERMISSION_DENIED: evaluation error at L71:24 for 'update' @ L71, evaluation error at L74:24 for 'create' @ L74, false for 'update' @ L…","r":"c","k":"verdict"},{"t":"runtime/missing field","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/missing-field","a":"403 PERMISSION_DENIED: evaluation error at L77:21 for 'get' @ L77, Property missing is undefined on object. for 'get' @ L77","r":"c","k":"verdict"},{"t":"runtime/division zero","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/division-zero","a":"403 PERMISSION_DENIED: Divide by zero error. for 'get' @ L80, Divide by zero error. for 'get' @ L80","r":"c","k":"verdict"},{"t":"runtime/list out of bounds","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/list-out-of-bounds","a":"403 PERMISSION_DENIED: Index out of bound error. Index: [2] , size: [1]. for 'get' @ L83, Index out of bound error. Index: [2] , size: [1].…","r":"c","k":"verdict"},{"t":"runtime/wrong type method","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/wrong-type-method","a":"403 PERMISSION_DENIED: evaluation error at L86:21 for 'get' @ L86, Function not found error: Name: [size]. for 'get' @ L86","r":"c","k":"verdict"},{"t":"runtime/missing get resource","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/missing-get-resource","a":"403 PERMISSION_DENIED: evaluation error at L89:21 for 'get' @ L89, Null value error. for 'get' @ L89","r":"c","k":"verdict"},{"t":"public get","q":"GET /v1/projects/{project}/databases/(default)/documents/public/news","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"public list bounded","q":"POST /v1/projects/{project}/databases/(default)/documents:runQuery","a":"200 [1 item]","r":"c","k":"verdict"},{"t":"public list oversized","q":"POST /v1/projects/{project}/databases/(default)/documents:runQuery","a":"403 PERMISSION_DENIED: false for 'list' @ L67, false for 'list' @ L1190","r":"c","k":"verdict"},{"t":"tenant claim read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"tenant wrong claim","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a","a":"403 PERMISSION_DENIED: evaluation error at L71:21 for 'get' @ L71, false for 'get' @ L1190, false for 'get' @ L71, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"tenant admin update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"tenant editor update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a","a":"403 PERMISSION_DENIED: false for 'create' @ L1190, false for 'update' @ L74, false for 'update' @ L1190","r":"c","k":"verdict"},{"t":"member self read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/members/alice","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"member other read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/members/alice","a":"403 PERMISSION_DENIED: false for 'get' @ L78, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"project member read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"project nonmember read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"403 PERMISSION_DENIED: evaluation error at L89:23 for 'get' @ L89, false for 'get' @ L1190, false for 'get' @ L89, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"project owner update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"project owner forbidden change","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"403 PERMISSION_DENIED: false for 'create' @ L92, false for 'create' @ L1190, evaluation error at L96:26 for 'update' @ L96, false for 'upda…","r":"c","k":"verdict"},{"t":"project admin delete","q":"DELETE /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"200 {}","r":"c","k":"verdict"},{"t":"project member delete","q":"DELETE /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"403 PERMISSION_DENIED: false for 'delete' @ L102, false for 'delete' @ L1190","r":"c","k":"verdict"},{"t":"task member read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"task nonmember read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1","a":"403 PERMISSION_DENIED: evaluation error at L104:25 for 'get' @ L104, false for 'get' @ L1190, false for 'get' @ L104, false for 'get' @ L11…","r":"c","k":"verdict"},{"t":"task self create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-create-alice","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"task other create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-create-bob","a":"403 PERMISSION_DENIED: false for 'create' @ L107, false for 'create' @ L1190, evaluation error at L110:28 for 'update' @ L110, false for 'u…","r":"c","k":"verdict"},{"t":"task assignee update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-update-allow","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"task forbidden update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-update-deny","a":"403 PERMISSION_DENIED: evaluation error at L107:28 for 'create' @ L107, false for 'create' @ L1190, evaluation error at L110:28 for 'update…","r":"c","k":"verdict"},{"t":"comment member read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1/comments/comment-1","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"comment author create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1/comments/comment-new","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"comment impersonation","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1/comments/comment-bad","a":"403 PERMISSION_DENIED: false for 'create' @ L121, false for 'create' @ L1190, evaluation error at L125:38 for 'update' @ L125, false for 'u…","r":"c","k":"verdict"},{"t":"profile self read","q":"GET /v1/projects/{project}/databases/(default)/documents/profiles/alice","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"profile other read","q":"GET /v1/projects/{project}/databases/(default)/documents/profiles/alice","a":"403 PERMISSION_DENIED: false for 'get' @ L136, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"profile self update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/profiles/alice","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"profile role injection","q":"PATCH /v1/projects/{project}/databases/(default)/documents/profiles/alice","a":"403 PERMISSION_DENIED: false for 'create' @ L142, false for 'create' @ L1190, evaluation error at L138:24 for 'update' @ L138, false for 'u…","r":"c","k":"verdict"},{"t":"audit admin create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/audits/admin-event","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"audit editor create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/audits/editor-event","a":"403 PERMISSION_DENIED: false for 'create' @ L145, false for 'create' @ L1190, false for 'update' @ L150, false for 'update' @ L1190","r":"c","k":"verdict"},{"t":"recursive asset member","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/assets/folder/deep/file","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"recursive asset nonmember","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/assets/folder/deep/file","a":"403 PERMISSION_DENIED: evaluation error at L131:23 for 'get' @ L131, false for 'get' @ L1190, false for 'get' @ L131, false for 'get' @ L11…","r":"c","k":"verdict"},{"t":"stats admin read","q":"GET /v1/projects/{project}/databases/(default)/documents/stats/overview","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"stats editor read","q":"GET /v1/projects/{project}/databases/(default)/documents/stats/overview","a":"403 PERMISSION_DENIED: false for 'get' @ L153, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"generated entity 00","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-00/document-00","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 01","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-01/document-01","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 02","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-02/document-02","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 03","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-03/document-03","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 04","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-04/document-04","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 05","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-05/document-05","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 06","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-06/document-06","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 07","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-07/document-07","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity wrong tenant","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-00/document-00","a":"403 PERMISSION_DENIED: evaluation error at L166:21 for 'get' @ L166, false for 'get' @ L1190, false for 'get' @ L166, false for 'get' @ L11…","r":"c","k":"verdict"},{"t":"get after atomic allow","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"verdict"},{"t":"get after atomic deny","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"403 PERMISSION_DENIED: false for 'create' @ L1190, evaluation error at L157:24 for 'update' @ L157, false for 'update' @ L1190, evaluation…","r":"c","k":"verdict"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: false for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: false for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: false for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy in [\"query-owner\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy in [\"query-owner\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where createdBy in [\"query-owner\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy in [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy in [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy in [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy array-contains \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy array-contains \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy array-contains \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy >= \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy >= \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy >= \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where (createdBy == \"query-owner\" and published == false)","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and published == false)","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where (createdBy == \"query-owner\" and published == false)","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true))","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true…","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true))","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where (createdBy == \"query-owner\" or published == true)","a":"PERMISSION_DENIED: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where (createdBy == \"query-owner\" or published == true)","a":"PERMISSION_DENIED: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where (createdBy == \"query-owner\" or published == true)","a":"PERMISSION_DENIED: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery emptyRecords where createdBy == \"query-owner\"","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery emptyRecords where createdBy == \"query-owner\"","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen emptyRecords where createdBy == \"query-owner\"","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery emptyRecords where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery emptyRecords where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen emptyRecords where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId == \"granted\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId == \"granted\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where permissionId == \"granted\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId == \"denied\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId == \"denied\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where permissionId == \"denied\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId == \"missing\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId == \"missing\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where permissionId == \"missing\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId in [\"granted\",\"granted2\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId in [\"granted\",\"granted2\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where permissionId in [\"granted\",\"granted2\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId in [\"granted\",\"denied\"]","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,…","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId in [\"granted\",\"denied\"]","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,…","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where permissionId in [\"granted\",\"denied\"]","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,…","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery shortCircuit where createdBy == \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shortCircuit where createdBy == \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen shortCircuit where createdBy == \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery shared where members array-contains \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared where members array-contains \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen shared where members array-contains \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery shared where members array-contains \"other-owner\"","a":"PERMISSION_DENIED: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared where members array-contains \"other-owner\"","a":"PERMISSION_DENIED: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen shared where members array-contains \"other-owner\"","a":"PERMISSION_DENIED: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery shared where members array-contains-any [\"query-owner\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen shared where members array-contains-any [\"query-owner\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery shared","a":"PERMISSION_DENIED: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared","a":"PERMISSION_DENIED: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen shared","a":"PERMISSION_DENIED: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score == 5","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score == 5","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ratings where score == 5","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score > 5","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score > 5","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ratings where score > 5","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score >= 5","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score >= 5","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ratings where score >= 5","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score >= 4","a":"PERMISSION_DENIED: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score >= 4","a":"PERMISSION_DENIED: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ratings where score >= 4","a":"PERMISSION_DENIED: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score in [5,7]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score in [5,7]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ratings where score in [5,7]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score in [4,7]","a":"PERMISSION_DENIED: false for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score in [4,7]","a":"PERMISSION_DENIED: false for 'list' @ L12","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ratings where score in [4,7]","a":"PERMISSION_DENIED: false for 'list' @ L12","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery ratings","a":"PERMISSION_DENIED: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings","a":"PERMISSION_DENIED: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ratings","a":"PERMISSION_DENIED: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery nonnull where value != null","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery nonnull where value != null","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen nonnull where value != null","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery notblocked where value != \"blocked\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery notblocked where value != \"blocked\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen notblocked where value != \"blocked\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery limited limit 12","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery limited limit 13","a":"PERMISSION_DENIED: false for 'list' @ L15","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery limited limit 13","a":"PERMISSION_DENIED: false for 'list' @ L15","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen limited limit 13","a":"PERMISSION_DENIED: false for 'list' @ L15","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery limited","a":"PERMISSION_DENIED: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= flo…","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery limited","a":"PERMISSION_DENIED: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= flo…","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen limited","a":"PERMISSION_DENIED: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= flo…","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery offsets offset 2","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery offsets offset 2","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen offsets offset 2","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery offsets offset 3","a":"PERMISSION_DENIED: false for 'list' @ L16","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery offsets offset 3","a":"PERMISSION_DENIED: false for 'list' @ L16","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen offsets offset 3","a":"PERMISSION_DENIED: false for 'list' @ L16","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery offsets","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery offsets","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen offsets","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ordering order by updatedAt desc","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ordering order by updatedAt desc","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ordering order by updatedAt desc","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ordering order by updatedAt asc","a":"PERMISSION_DENIED: false for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ordering order by updatedAt asc","a":"PERMISSION_DENIED: false for 'list' @ L17","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ordering order by updatedAt asc","a":"PERMISSION_DENIED: false for 'list' @ L17","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery ordering","a":"PERMISSION_DENIED: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ordering","a":"PERMISSION_DENIED: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ordering","a":"PERMISSION_DENIED: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery fixedGet","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery fixedExists","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery fixedExists","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen fixedExists","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery dynamicExists where permissionId == \"granted\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery dynamicExists where permissionId == \"granted\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen dynamicExists where permissionId == \"granted\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery dynamicExists where permissionId == \"missing\"","a":"PERMISSION_DENIED: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery dynamicExists where permissionId == \"missing\"","a":"PERMISSION_DENIED: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen dynamicExists where permissionId == \"missing\"","a":"PERMISSION_DENIED: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery dynamicExists","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery dynamicExists","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen dynamicExists","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery group groupDocs where createdBy == \"query-owner\"","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery group groupDocs where createdBy == \"query-owner\"","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen group groupDocs where createdBy == \"query-owner\"","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery group groupDocs","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery group groupDocs","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen group groupDocs","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery group emptyGroup where createdBy == \"query-owner\"","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery group emptyGroup where createdBy == \"query-owner\"","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen group emptyGroup where createdBy == \"query-owner\"","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery group records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: No matching allow statements","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery group records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: No matching allow statements","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen group records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: No matching allow statements","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"ListenChanges over gRPC","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy == \"query-owner\"","a":"permission-denied: false for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\"","a":"permission-denied: false for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy in [\"query-owner\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy in [\"query-owner\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy in [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy in [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy array-contains \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy array-contains \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy >= \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy >= \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where (createdBy == \"query-owner\" and published == false)","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and published == false)","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true))","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true…","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where (createdBy == \"query-owner\" or published == true)","a":"permission-denied: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" or published == true)","a":"permission-denied: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen emptyRecords where createdBy == \"query-owner\"","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery emptyRecords where createdBy == \"query-owner\"","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen emptyRecords where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery emptyRecords where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId == \"granted\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId == \"granted\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId == \"denied\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId == \"denied\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId == \"missing\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId == \"missing\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId in [\"granted\",\"granted2\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId in [\"granted\",\"granted2\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId in [\"granted\",\"denied\"]","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,…","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId in [\"granted\",\"denied\"]","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,…","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shortCircuit where createdBy == \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shortCircuit where createdBy == \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared where members array-contains \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared where members array-contains \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared where members array-contains \"other-owner\"","a":"permission-denied: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared where members array-contains \"other-owner\"","a":"permission-denied: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared where members array-contains-any [\"query-owner\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared","a":"permission-denied: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared","a":"permission-denied: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score == 5","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score == 5","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score > 5","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score > 5","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score >= 5","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score >= 5","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score >= 4","a":"permission-denied: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score >= 4","a":"permission-denied: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score in [5,7]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score in [5,7]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score in [4,7]","a":"permission-denied: false for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score in [4,7]","a":"permission-denied: false for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings","a":"permission-denied: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings","a":"permission-denied: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen nonnull where value != null","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery nonnull where value != null","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen notblocked where value != \"blocked\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery notblocked where value != \"blocked\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery limited limit 12","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen limited limit 13","a":"permission-denied: false for 'list' @ L15","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery limited limit 13","a":"permission-denied: false for 'list' @ L15","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen limited","a":"permission-denied: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= flo…","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery limited","a":"permission-denied: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= flo…","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen offsets","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery offsets","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ordering order by updatedAt desc","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ordering order by updatedAt desc","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ordering order by updatedAt asc","a":"permission-denied: false for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ordering order by updatedAt asc","a":"permission-denied: false for 'list' @ L17","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ordering","a":"permission-denied: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ordering","a":"permission-denied: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery fixedGet","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen fixedExists","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery fixedExists","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen dynamicExists where permissionId == \"granted\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery dynamicExists where permissionId == \"granted\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen dynamicExists where permissionId == \"missing\"","a":"permission-denied: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery dynamicExists where permissionId == \"missing\"","a":"permission-denied: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen dynamicExists","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery dynamicExists","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen group groupDocs where createdBy == \"query-owner\"","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery group groupDocs where createdBy == \"query-owner\"","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen group groupDocs","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery group groupDocs","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen group emptyGroup where createdBy == \"query-owner\"","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery group emptyGroup where createdBy == \"query-owner\"","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen group records where createdBy == \"query-owner\"","a":"permission-denied: No matching allow statements","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery group records where createdBy == \"query-owner\"","a":"permission-denied: No matching allow statements","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"ListenChanges from the browser SDK (long-poll WebChannel)","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy == \"query-owner\"","a":"permission-denied: false for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\"","a":"permission-denied: false for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy in [\"query-owner\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy in [\"query-owner\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy in [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy in [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy array-contains \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy array-contains \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy >= \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy >= \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where (createdBy == \"query-owner\" and published == false)","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and published == false)","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true))","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true…","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where (createdBy == \"query-owner\" or published == true)","a":"permission-denied: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" or published == true)","a":"permission-denied: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen emptyRecords where createdBy == \"query-owner\"","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery emptyRecords where createdBy == \"query-owner\"","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen emptyRecords where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery emptyRecords where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId == \"granted\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId == \"granted\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId == \"denied\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId == \"denied\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId == \"missing\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId == \"missing\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId in [\"granted\",\"granted2\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId in [\"granted\",\"granted2\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId in [\"granted\",\"denied\"]","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,…","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId in [\"granted\",\"denied\"]","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,…","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shortCircuit where createdBy == \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shortCircuit where createdBy == \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared where members array-contains \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared where members array-contains \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared where members array-contains \"other-owner\"","a":"permission-denied: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared where members array-contains \"other-owner\"","a":"permission-denied: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared where members array-contains-any [\"query-owner\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared","a":"permission-denied: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared","a":"permission-denied: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score == 5","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score == 5","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score > 5","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score > 5","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score >= 5","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score >= 5","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score >= 4","a":"permission-denied: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score >= 4","a":"permission-denied: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score in [5,7]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score in [5,7]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score in [4,7]","a":"permission-denied: false for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score in [4,7]","a":"permission-denied: false for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings","a":"permission-denied: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings","a":"permission-denied: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen nonnull where value != null","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery nonnull where value != null","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen notblocked where value != \"blocked\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery notblocked where value != \"blocked\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery limited limit 12","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen limited limit 13","a":"permission-denied: false for 'list' @ L15","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery limited limit 13","a":"permission-denied: false for 'list' @ L15","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen limited","a":"permission-denied: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= flo…","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery limited","a":"permission-denied: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= flo…","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen offsets","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery offsets","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ordering order by updatedAt desc","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ordering order by updatedAt desc","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ordering order by updatedAt asc","a":"permission-denied: false for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ordering order by updatedAt asc","a":"permission-denied: false for 'list' @ L17","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ordering","a":"permission-denied: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ordering","a":"permission-denied: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery fixedGet","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen fixedExists","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery fixedExists","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen dynamicExists where permissionId == \"granted\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery dynamicExists where permissionId == \"granted\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen dynamicExists where permissionId == \"missing\"","a":"permission-denied: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery dynamicExists where permissionId == \"missing\"","a":"permission-denied: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen dynamicExists","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery dynamicExists","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen group groupDocs where createdBy == \"query-owner\"","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery group groupDocs where createdBy == \"query-owner\"","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen group groupDocs","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery group groupDocs","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen group emptyGroup where createdBy == \"query-owner\"","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery group emptyGroup where createdBy == \"query-owner\"","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen group records where createdBy == \"query-owner\"","a":"permission-denied: No matching allow statements","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery group records where createdBy == \"query-owner\"","a":"permission-denied: No matching allow statements","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"ListenChanges from the browser SDK (streaming WebChannel)","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery limited limit 12","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery fixedGet","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/members","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/members","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/members","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/getMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/getMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/getMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/functionMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/functionMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/functionMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/reversedMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/reversedMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/reversedMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/emptyGranted/members","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/emptyGranted/members","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/emptyGranted/members","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/members where uid == \"query-owner\"","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/members where uid == \"query-owner\"","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/members where uid == \"query-owner\"","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments queryParents/granted/members","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments queryParents/denied/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments queryParents/emptyGranted/members","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"ListenChanges over gRPC","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery limited limit 12","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery fixedGet","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/members","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/members","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/getMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/getMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/functionMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/functionMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/reversedMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/reversedMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/emptyGranted/members","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/emptyGranted/members","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/members where uid == \"query-owner\"","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/members where uid == \"query-owner\"","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"ListenChanges from the browser SDK (long-poll WebChannel)","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery limited limit 12","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery fixedGet","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/members","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/members","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/getMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/getMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/functionMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/functionMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/reversedMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/reversedMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/emptyGranted/members","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/emptyGranted/members","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/members where uid == \"query-owner\"","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/members where uid == \"query-owner\"","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"ListenChanges from the browser SDK (streaming WebChannel)","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 0 documents","r":"c","k":"answer"}]} \ No newline at end of file +{"runs":[[0,4,0,"Rules expressions: literals and coercion"],[4,7,0,"Rules expressions: numeric arithmetic and comparison"],[11,5,0,"Rules expressions: boolean short circuit and errors"],[16,12,0,"Rules expressions: string list map and map diff"],[28,4,0,"Rules expressions: request auth method time query resource and existing resource"],[32,4,0,"Rules expressions: literals and coercion"],[36,7,0,"Rules expressions: numeric arithmetic and comparison"],[43,5,0,"Rules expressions: boolean short circuit and errors"],[48,12,0,"Rules expressions: string list map and map diff"],[60,4,0,"Rules expressions: request auth method time query resource and existing resource"],[64,4,0,"Rules expressions: literals and coercion"],[68,7,0,"Rules expressions: numeric arithmetic and comparison"],[75,5,0,"Rules expressions: boolean short circuit and errors"],[80,12,0,"Rules expressions: string list map and map diff"],[92,4,0,"Rules expressions: request auth method time query resource and existing resource"],[96,4,0,"Rules expressions: literals and coercion"],[100,7,0,"Rules expressions: numeric arithmetic and comparison"],[107,5,0,"Rules expressions: boolean short circuit and errors"],[112,12,0,"Rules expressions: string list map and map diff"],[124,4,0,"Rules expressions: request auth method time query resource and existing resource"],[128,4,0,"Rules expressions: literals and coercion"],[132,7,0,"Rules expressions: numeric arithmetic and comparison"],[139,5,0,"Rules expressions: boolean short circuit and errors"],[144,12,0,"Rules expressions: string list map and map diff"],[156,4,0,"Rules expressions: request auth method time query resource and existing resource"],[160,4,0,"Rules expressions: literals and coercion"],[164,7,0,"Rules expressions: numeric arithmetic and comparison"],[171,5,0,"Rules expressions: boolean short circuit and errors"],[176,12,0,"Rules expressions: string list map and map diff"],[188,4,0,"Rules expressions: request auth method time query resource and existing resource"],[192,4,0,"Rules expressions: literals and coercion"],[196,7,0,"Rules expressions: numeric arithmetic and comparison"],[203,5,0,"Rules expressions: boolean short circuit and errors"],[208,12,0,"Rules expressions: string list map and map diff"],[220,4,0,"Rules expressions: request auth method time query resource and existing resource"],[224,4,0,"Rules expressions: literals and coercion"],[228,7,0,"Rules expressions: numeric arithmetic and comparison"],[235,5,0,"Rules expressions: boolean short circuit and errors"],[240,12,0,"Rules expressions: string list map and map diff"],[252,4,0,"Rules expressions: request auth method time query resource and existing resource"],[256,4,0,"Rules expressions: literals and coercion"],[260,7,0,"Rules expressions: numeric arithmetic and comparison"],[267,5,0,"Rules expressions: boolean short circuit and errors"],[272,12,0,"Rules expressions: string list map and map diff"],[284,4,0,"Rules expressions: request auth method time query resource and existing resource"],[288,4,0,"Rules expressions: literals and coercion"],[292,7,0,"Rules expressions: numeric arithmetic and comparison"],[299,5,0,"Rules expressions: boolean short circuit and errors"],[304,12,0,"Rules expressions: string list map and map diff"],[316,4,0,"Rules expressions: request auth method time query resource and existing resource"],[320,4,0,"Rules expressions: literals and coercion"],[324,7,0,"Rules expressions: numeric arithmetic and comparison"],[331,5,0,"Rules expressions: boolean short circuit and errors"],[336,12,0,"Rules expressions: string list map and map diff"],[348,4,0,"Rules expressions: request auth method time query resource and existing resource"],[352,4,0,"Rules expressions: literals and coercion"],[356,7,0,"Rules expressions: numeric arithmetic and comparison"],[363,5,0,"Rules expressions: boolean short circuit and errors"],[368,12,0,"Rules expressions: string list map and map diff"],[380,4,0,"Rules expressions: request auth method time query resource and existing resource"],[384,4,0,"Rules expressions: literals and coercion"],[388,7,0,"Rules expressions: numeric arithmetic and comparison"],[395,5,0,"Rules expressions: boolean short circuit and errors"],[400,12,0,"Rules expressions: string list map and map diff"],[412,4,0,"Rules expressions: request auth method time query resource and existing resource"],[416,4,0,"Rules expressions: literals and coercion"],[420,7,0,"Rules expressions: numeric arithmetic and comparison"],[427,5,0,"Rules expressions: boolean short circuit and errors"],[432,12,0,"Rules expressions: string list map and map diff"],[444,4,0,"Rules expressions: request auth method time query resource and existing resource"],[448,4,0,"Rules expressions: literals and coercion"],[452,7,0,"Rules expressions: numeric arithmetic and comparison"],[459,5,0,"Rules expressions: boolean short circuit and errors"],[464,12,0,"Rules expressions: string list map and map diff"],[476,4,0,"Rules expressions: request auth method time query resource and existing resource"],[480,4,0,"Rules expressions: literals and coercion"],[484,7,0,"Rules expressions: numeric arithmetic and comparison"],[491,5,0,"Rules expressions: boolean short circuit and errors"],[496,12,0,"Rules expressions: string list map and map diff"],[508,4,0,"Rules expressions: request auth method time query resource and existing resource"],[512,4,0,"Rules expressions: literals and coercion"],[516,7,0,"Rules expressions: numeric arithmetic and comparison"],[523,5,0,"Rules expressions: boolean short circuit and errors"],[528,12,0,"Rules expressions: string list map and map diff"],[540,4,0,"Rules expressions: request auth method time query resource and existing resource"],[544,4,0,"Rules expressions: literals and coercion"],[548,7,0,"Rules expressions: numeric arithmetic and comparison"],[555,5,0,"Rules expressions: boolean short circuit and errors"],[560,12,0,"Rules expressions: string list map and map diff"],[572,4,0,"Rules expressions: request auth method time query resource and existing resource"],[576,4,0,"Rules expressions: literals and coercion"],[580,7,0,"Rules expressions: numeric arithmetic and comparison"],[587,5,0,"Rules expressions: boolean short circuit and errors"],[592,12,0,"Rules expressions: string list map and map diff"],[604,4,0,"Rules expressions: request auth method time query resource and existing resource"],[608,4,0,"Rules expressions: literals and coercion"],[612,7,0,"Rules expressions: numeric arithmetic and comparison"],[619,5,0,"Rules expressions: boolean short circuit and errors"],[624,12,0,"Rules expressions: string list map and map diff"],[636,4,0,"Rules expressions: request auth method time query resource and existing resource"],[640,4,0,"Rules expressions: literals and coercion"],[644,7,0,"Rules expressions: numeric arithmetic and comparison"],[651,5,0,"Rules expressions: boolean short circuit and errors"],[656,12,0,"Rules expressions: string list map and map diff"],[668,4,0,"Rules expressions: request auth method time query resource and existing resource"],[672,4,0,"Rules expressions: literals and coercion"],[676,7,0,"Rules expressions: numeric arithmetic and comparison"],[683,5,0,"Rules expressions: boolean short circuit and errors"],[688,12,0,"Rules expressions: string list map and map diff"],[700,4,0,"Rules expressions: request auth method time query resource and existing resource"],[704,4,0,"Rules expressions: literals and coercion"],[708,7,0,"Rules expressions: numeric arithmetic and comparison"],[715,5,0,"Rules expressions: boolean short circuit and errors"],[720,12,0,"Rules expressions: string list map and map diff"],[732,4,0,"Rules expressions: request auth method time query resource and existing resource"],[736,4,0,"Rules expressions: literals and coercion"],[740,7,0,"Rules expressions: numeric arithmetic and comparison"],[747,5,0,"Rules expressions: boolean short circuit and errors"],[752,12,0,"Rules expressions: string list map and map diff"],[764,4,0,"Rules expressions: request auth method time query resource and existing resource"],[768,4,0,"Rules expressions: literals and coercion"],[772,7,0,"Rules expressions: numeric arithmetic and comparison"],[779,5,0,"Rules expressions: boolean short circuit and errors"],[784,12,0,"Rules expressions: string list map and map diff"],[796,4,0,"Rules expressions: request auth method time query resource and existing resource"],[800,4,0,"Rules expressions: literals and coercion"],[804,7,0,"Rules expressions: numeric arithmetic and comparison"],[811,5,0,"Rules expressions: boolean short circuit and errors"],[816,12,0,"Rules expressions: string list map and map diff"],[828,4,0,"Rules expressions: request auth method time query resource and existing resource"],[832,4,0,"Rules expressions: literals and coercion"],[836,7,0,"Rules expressions: numeric arithmetic and comparison"],[843,5,0,"Rules expressions: boolean short circuit and errors"],[848,12,0,"Rules expressions: string list map and map diff"],[860,4,0,"Rules expressions: request auth method time query resource and existing resource"],[864,4,0,"Rules expressions: literals and coercion"],[868,7,0,"Rules expressions: numeric arithmetic and comparison"],[875,5,0,"Rules expressions: boolean short circuit and errors"],[880,12,0,"Rules expressions: string list map and map diff"],[892,4,0,"Rules expressions: request auth method time query resource and existing resource"],[896,4,0,"Rules expressions: literals and coercion"],[900,7,0,"Rules expressions: numeric arithmetic and comparison"],[907,5,0,"Rules expressions: boolean short circuit and errors"],[912,12,0,"Rules expressions: string list map and map diff"],[924,4,0,"Rules expressions: request auth method time query resource and existing resource"],[928,4,0,"Rules expressions: literals and coercion"],[932,7,0,"Rules expressions: numeric arithmetic and comparison"],[939,5,0,"Rules expressions: boolean short circuit and errors"],[944,12,0,"Rules expressions: string list map and map diff"],[956,4,0,"Rules expressions: request auth method time query resource and existing resource"],[960,4,0,"Rules expressions: literals and coercion"],[964,7,0,"Rules expressions: numeric arithmetic and comparison"],[971,5,0,"Rules expressions: boolean short circuit and errors"],[976,12,0,"Rules expressions: string list map and map diff"],[988,4,0,"Rules expressions: request auth method time query resource and existing resource"],[992,4,0,"Rules expressions: literals and coercion"],[996,7,0,"Rules expressions: numeric arithmetic and comparison"],[1003,5,0,"Rules expressions: boolean short circuit and errors"],[1008,12,0,"Rules expressions: string list map and map diff"],[1020,4,0,"Rules expressions: request auth method time query resource and existing resource"],[1024,6,0,"Language contract: string"],[1030,6,0,"Language contract: list"],[1036,3,0,"Language contract: map"],[1039,2,0,"Language contract: map diff"],[1041,3,0,"Language contract: set"],[1044,2,0,"Language contract: bytes"],[1046,2,0,"Language contract: duration"],[1048,3,0,"Language contract: timestamp"],[1051,2,0,"Language contract: latlng"],[1053,3,0,"Language contract: math"],[1056,2,0,"Language contract: hashing"],[1058,2,0,"Language contract: request"],[1060,1,0,"Language contract: path"],[1061,1,0,"Language contract: function"],[1062,1,0,"Language contract: resource"],[1063,1,0,"Language contract: query"],[1064,3,0,"Language contract: match"],[1067,9,0,"Limits: function depth"],[1076,5,0,"Limits: linear expression terms"],[1081,8,0,"Limits: balanced expression terms"],[1089,2,0,"Limits: linear expression terms"],[1091,17,0,"Limits: true chain terms"],[1108,9,0,"Limits: time chain terms"],[1117,3,0,"Limits: literal left terms"],[1120,5,0,"Limits: right nested terms"],[1125,4,0,"Limits: balanced parenthesised terms"],[1129,1,0,"Compiler and source size: unexpected token"],[1130,1,0,"Compiler and source size: unclosed block"],[1131,1,0,"Compiler and source size: duplicate let"],[1132,1,0,"Compiler and source size: undefined name"],[1133,1,0,"Compiler and source size: invalid function arity"],[1134,1,0,"Compiler and source size: recursive function"],[1135,1,0,"Compiler and source size: invalid recursive wildcard"],[1136,4,0,"Compiler and source size: source bytes"],[1140,1,0,"complex-firestore.rules: production compile"],[1141,1,0,"Language contract: debug"],[1142,20,0,"Limits: linear expression terms"],[1162,8,0,"Limits: true chain terms"],[1170,9,0,"Limits: time chain terms"],[1179,6,0,"Limits: literal left terms"],[1185,2,0,"Compiler and source size: source bytes"],[1187,1,1,"The ruleset the other inputs change"],[1188,11,1,"A stray or wrong word at the top level"],[1199,6,1,"rules_version gone wrong"],[1205,8,1,"A missing or extra brace"],[1213,5,1,"A missing or extra semicolon"],[1218,5,1,"A missing or extra parenthesis"],[1223,4,1,"A string left open"],[1227,7,1,"A bad match path"],[1234,22,1,"A condition cut short or mistyped"],[1256,7,1,"A bad function header or body"],[1263,5,1,"let misused"],[1268,5,1,"A misspelled keyword"],[1273,20,1,"The source ends inside a block"],[1293,5,1,"Two mistakes in one source"],[1298,3,1,"Where a position is counted from"],[1301,5,1,"The production Rules API's refusals, sent unchanged"],[1306,1,1,"rules_version gone wrong"],[1307,1,2,"Setup"],[1308,15,2,"Coverage after a rules reload and two reads"],[1323,3,2,"A rejected reload keeps the last valid rules"],[1326,12,2,"Coverage after a rules reload and two reads"],[1338,11,3,"Firestore requests with live rules evaluations"],[1349,8,3,"Requests websocket messages"],[1357,12,3,"Firestore requests with live rules evaluations"],[1369,18,3,"Requests websocket messages"],[1387,4,4,"Firestore requests with live rules evaluations"],[1391,4,4,"Requests websocket messages"],[1395,2,4,"Firestore requests with live rules evaluations"],[1397,4,4,"Requests websocket messages"],[1401,2,5,"Reads as: no Authorization header (a signed-out client SDK)"],[1403,6,5,"Reads as: the owner credential (the Admin SDKs' emulator credential)"],[1409,6,5,"Reads as: the owner credential, lowercase scheme"],[1415,6,5,"Reads as: the owner credential, all uppercase"],[1421,2,5,"Reads as: a current unsigned token for alice"],[1423,2,5,"Reads as: current unsigned token for alice, lowercase scheme"],[1425,2,5,"Reads as: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1427,2,5,"Reads as: a token issued a day from now"],[1429,2,5,"Reads as: a token whose aud and iss name another project"],[1431,2,5,"Reads as: a token whose aud alone names another project"],[1433,2,5,"Reads as: an unsigned token with only sub: alice"],[1435,2,5,"Reads as: a token whose header has no alg"],[1437,2,5,"Reads as: an RS256 header and a signature nobody checks"],[1439,2,5,"Reads as: standard padded base64 segments"],[1441,6,5,"Reads as: a token of two segments"],[1447,6,5,"Reads as: a token whose payload is an array"],[1453,6,5,"Reads as: a credential that is not a JWT"],[1459,2,5,"Reads as: no Authorization header (a signed-out client SDK)"],[1461,6,5,"Reads as: the owner credential (the Admin SDKs' emulator credential)"],[1467,6,5,"Reads as: the owner credential, lowercase scheme"],[1473,6,5,"Reads as: the owner credential, all uppercase"],[1479,2,5,"Reads as: a current unsigned token for alice"],[1481,2,5,"Reads as: current unsigned token for alice, lowercase scheme"],[1483,2,5,"Reads as: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1485,2,5,"Reads as: a token issued a day from now"],[1487,2,5,"Reads as: a token whose aud and iss name another project"],[1489,2,5,"Reads as: a token whose aud alone names another project"],[1491,2,5,"Reads as: an unsigned token with only sub: alice"],[1493,2,5,"Reads as: a token whose header has no alg"],[1495,2,5,"Reads as: an RS256 header and a signature nobody checks"],[1497,2,5,"Reads as: standard padded base64 segments"],[1499,6,5,"Reads as: a token of two segments"],[1505,6,5,"Reads as: a token whose payload is an array"],[1511,6,5,"Reads as: a credential that is not a JWT"],[1517,3,5,"What request.auth holds for: no Authorization header (a signed-out client SDK)"],[1520,3,5,"What request.auth holds for: the owner credential (the Admin SDKs' emulator credential)"],[1523,3,5,"What request.auth holds for: the owner credential, lowercase scheme"],[1526,3,5,"What request.auth holds for: the owner credential, all uppercase"],[1529,3,5,"What request.auth holds for: a current unsigned token for alice"],[1532,3,5,"What request.auth holds for: current unsigned token for alice, lowercase scheme"],[1535,3,5,"What request.auth holds for: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1538,3,5,"What request.auth holds for: a token issued a day from now"],[1541,3,5,"What request.auth holds for: a token whose aud and iss name another project"],[1544,3,5,"What request.auth holds for: a token whose aud alone names another project"],[1547,3,5,"What request.auth holds for: an unsigned token with only sub: alice"],[1550,3,5,"What request.auth holds for: an unsigned token with only user_id: alice"],[1553,3,5,"What request.auth holds for: an unsigned token with no claims"],[1556,3,5,"What request.auth holds for: an unsigned token with sub: 7"],[1559,3,5,"What request.auth holds for: a token whose header has no alg"],[1562,3,5,"What request.auth holds for: an RS256 header and a signature nobody checks"],[1565,3,5,"What request.auth holds for: standard padded base64 segments"],[1568,3,5,"What request.auth holds for: a token of two segments"],[1571,3,5,"What request.auth holds for: a token whose payload is an array"],[1574,3,5,"What request.auth holds for: a credential that is not a JWT"],[1577,12,5,"Metadata operations need the owner"],[1589,2,5,"Enterprise pipelines are evaluated as a list"],[1591,3,5,"The rules reload route reads the body as JSON"],[1594,4,5,"Reads as: no Authorization header (a signed-out client SDK)"],[1598,4,5,"Reads as: a current unsigned token for alice"],[1602,4,5,"Reads as: current unsigned token for alice, lowercase scheme"],[1606,4,5,"Reads as: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1610,4,5,"Reads as: a token issued a day from now"],[1614,4,5,"Reads as: a token whose aud and iss name another project"],[1618,4,5,"Reads as: a token whose aud alone names another project"],[1622,4,5,"Reads as: an unsigned token with only sub: alice"],[1626,6,5,"Reads as: an unsigned token with only user_id: alice"],[1632,6,5,"Reads as: an unsigned token with no claims"],[1638,6,5,"Reads as: an unsigned token with sub: 7"],[1644,4,5,"Reads as: a token whose header has no alg"],[1648,4,5,"Reads as: an RS256 header and a signature nobody checks"],[1652,4,5,"Reads as: standard padded base64 segments"],[1656,6,5,"Reads as: a Basic credential"],[1662,6,5,"Reads as: the owner credential (Storage's admin credential), Firebase scheme"],[1668,4,5,"Reads as: no Authorization header (a signed-out client SDK)"],[1672,4,5,"Reads as: a current unsigned token for alice"],[1676,4,5,"Reads as: current unsigned token for alice, lowercase scheme"],[1680,4,5,"Reads as: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1684,4,5,"Reads as: a token issued a day from now"],[1688,4,5,"Reads as: a token whose aud and iss name another project"],[1692,4,5,"Reads as: a token whose aud alone names another project"],[1696,4,5,"Reads as: an unsigned token with only sub: alice"],[1700,6,5,"Reads as: an unsigned token with only user_id: alice"],[1706,6,5,"Reads as: an unsigned token with no claims"],[1712,6,5,"Reads as: an unsigned token with sub: 7"],[1718,4,5,"Reads as: a token whose header has no alg"],[1722,4,5,"Reads as: an RS256 header and a signature nobody checks"],[1726,4,5,"Reads as: standard padded base64 segments"],[1730,6,5,"Reads as: a Basic credential"],[1736,6,5,"Reads as: the owner credential (Storage's admin credential), Firebase scheme"],[1742,3,5,"What request.auth holds for: a Basic credential"],[1745,3,5,"What request.auth holds for: the owner credential (Storage's admin credential), Firebase scheme"],[1748,5,5,"The message of a refused request"],[1753,6,5,"Metadata operations need the owner"],[1759,2,5,"Enterprise pipelines are evaluated as a list"],[1761,5,6,"The identifier \"duration\" in each position"],[1766,5,6,"The identifier \"hashing\" in each position"],[1771,5,6,"The identifier \"latlng\" in each position"],[1776,5,6,"The identifier \"math\" in each position"],[1781,5,6,"The identifier \"timestamp\" in each position"],[1786,5,6,"The identifier \"request\" in each position"],[1791,5,6,"The identifier \"resource\" in each position"],[1796,5,6,"The identifier \"value\" in each position"],[1801,123,7,"Paths and document names under allow get"],[1924,7,7,"Document names under allow list"],[1931,5,7,"Document names under allow create"],[1936,2,9,"Contributed rooms ruleset: a function outside the service block"],[1938,3,9,"Contributed rooms ruleset: the conditional operator inside a function"],[1941,2,9,"Contributed rooms ruleset: keys().hasOnly() and hasAll()"],[1943,3,9,"Contributed rooms ruleset: type, length and list-membership checks"],[1946,3,9,"Contributed rooms ruleset: diff().affectedKeys() on update, and a delete never allowed"],[1949,3,9,"Contributed rooms ruleset: exists() on another document"],[1952,1,9,"Contributed rooms ruleset: a field check in the proof of a list query"],[1953,3,9,"Contributed rooms ruleset: get() with a default on the payload, and is int"],[1956,1,9,"Contributed rooms ruleset: get() on the parent document"],[1957,1,9,"Contributed rooms ruleset: a null value on write"],[1958,2,9,"Contributed rooms ruleset: a query pinned to a missing document id"],[1960,2,9,"Contributed rooms ruleset: matches() on the document id"],[1962,2,9,"Contributed rooms ruleset: keys().hasAny()"],[1964,1,9,"Contributed rooms ruleset: a field check in the proof of a list query"],[1965,7,10,"Document access limits (10 and 20) and cached repeated access"],[1972,2,10,"getAfter sees the pending write of a commit"],[1974,5,10,"Runtime errors deny: missing fields, division by zero, list bounds, wrong types"],[1979,1,10,"complex-firestore.rules: public read"],[1980,2,10,"complex-firestore.rules: query limit validation"],[1982,2,10,"complex-firestore.rules: auth and custom claims"],[1984,2,10,"complex-firestore.rules: field change validation"],[1986,2,10,"complex-firestore.rules: nested and recursive matches"],[1988,2,10,"complex-firestore.rules: cross document access"],[1990,1,10,"complex-firestore.rules: create update delete resource differences"],[1991,1,10,"complex-firestore.rules: field change validation"],[1992,2,10,"complex-firestore.rules: create update delete resource differences"],[1994,2,10,"complex-firestore.rules: nested and recursive matches"],[1996,2,10,"complex-firestore.rules: create update delete resource differences"],[1998,2,10,"complex-firestore.rules: field change validation"],[2000,1,10,"complex-firestore.rules: nested and recursive matches"],[2001,4,10,"complex-firestore.rules: auth and custom claims"],[2005,2,10,"complex-firestore.rules: field change validation"],[2007,2,10,"complex-firestore.rules: timestamps durations and helper functions"],[2009,2,10,"complex-firestore.rules: nested and recursive matches"],[2011,2,10,"complex-firestore.rules: auth and custom claims"],[2013,9,10,"complex-firestore.rules: complex generated policy"],[2022,2,10,"complex-firestore.rules: getAfter batch invariant"],[2024,3,10,"query-authorization: owner equality"],[2027,3,10,"query-authorization: owner absent"],[2030,3,10,"query-authorization: owner wrong uid"],[2033,3,10,"query-authorization: owner unverified"],[2036,3,10,"query-authorization: owner in single"],[2039,3,10,"query-authorization: owner in mixed"],[2042,3,10,"query-authorization: owner array is not equality"],[2045,3,10,"query-authorization: owner inequality"],[2048,3,10,"query-authorization: owner bounded equality"],[2051,3,10,"query-authorization: owner compound and"],[2054,3,10,"query-authorization: owner compound or safe"],[2057,3,10,"query-authorization: owner compound or unsafe"],[2060,3,10,"query-authorization: owner empty"],[2063,3,10,"query-authorization: owner empty unconstrained"],[2066,3,10,"query-authorization: owner empty wrong uid"],[2069,3,10,"query-authorization: owner nonmatching extra filter"],[2072,3,10,"query-authorization: permission get allowed"],[2075,3,10,"query-authorization: permission get denied"],[2078,3,10,"query-authorization: permission get missing"],[2081,3,10,"query-authorization: permission in all granted"],[2084,3,10,"query-authorization: permission in mixed"],[2087,3,10,"query-authorization: short circuit missing get"],[2090,3,10,"query-authorization: array contains owner"],[2093,3,10,"query-authorization: array contains other"],[2096,3,10,"query-authorization: array any owner"],[2099,3,10,"query-authorization: array any mixed"],[2102,3,10,"query-authorization: array absent"],[2105,3,10,"query-authorization: range equality inside"],[2108,3,10,"query-authorization: range strict bound"],[2111,3,10,"query-authorization: range inclusive bound"],[2114,3,10,"query-authorization: range unsafe inclusive"],[2117,3,10,"query-authorization: range safe in"],[2120,3,10,"query-authorization: range unsafe in"],[2123,3,10,"query-authorization: range absent"],[2126,3,10,"query-authorization: not equal null"],[2129,3,10,"query-authorization: not equal string"],[2132,3,10,"query-authorization: not in blocked"],[2135,3,10,"query-authorization: limit allowed"],[2138,3,10,"query-authorization: limit denied"],[2141,3,10,"query-authorization: limit absent"],[2144,3,10,"query-authorization: offset allowed"],[2147,3,10,"query-authorization: offset denied"],[2150,3,10,"query-authorization: offset default"],[2153,3,10,"query-authorization: order desc"],[2156,3,10,"query-authorization: order asc"],[2159,3,10,"query-authorization: order absent"],[2162,3,10,"query-authorization: get fixed path"],[2165,3,10,"query-authorization: exists fixed path"],[2168,3,10,"query-authorization: exists constrained path"],[2171,3,10,"query-authorization: exists missing path"],[2174,3,10,"query-authorization: exists unconstrained path"],[2177,3,10,"query-authorization: group recursive owner"],[2180,3,10,"query-authorization: group recursive unconstrained"],[2183,3,10,"query-authorization: group recursive empty owner"],[2186,3,10,"query-authorization: group root only rule"],[2189,3,10,"query-authorization: nested collection owner"],[2192,1,10,"query-authorization: owner absent"],[2193,1,10,"query-authorization: owner empty unconstrained"],[2194,1,10,"query-authorization: get fixed path"],[2195,1,10,"query-authorization: limit allowed"],[2196,3,10,"query-authorization: owner equality"],[2199,2,10,"query-authorization: owner absent"],[2201,2,10,"query-authorization: owner wrong uid"],[2203,2,10,"query-authorization: owner unverified"],[2205,2,10,"query-authorization: owner in single"],[2207,2,10,"query-authorization: owner in mixed"],[2209,2,10,"query-authorization: owner array is not equality"],[2211,2,10,"query-authorization: owner inequality"],[2213,2,10,"query-authorization: owner bounded equality"],[2215,2,10,"query-authorization: owner compound and"],[2217,2,10,"query-authorization: owner compound or safe"],[2219,2,10,"query-authorization: owner compound or unsafe"],[2221,2,10,"query-authorization: owner empty"],[2223,2,10,"query-authorization: owner empty unconstrained"],[2225,2,10,"query-authorization: owner empty wrong uid"],[2227,2,10,"query-authorization: owner nonmatching extra filter"],[2229,2,10,"query-authorization: permission get allowed"],[2231,2,10,"query-authorization: permission get denied"],[2233,2,10,"query-authorization: permission get missing"],[2235,2,10,"query-authorization: permission in all granted"],[2237,2,10,"query-authorization: permission in mixed"],[2239,2,10,"query-authorization: short circuit missing get"],[2241,2,10,"query-authorization: array contains owner"],[2243,2,10,"query-authorization: array contains other"],[2245,2,10,"query-authorization: array any owner"],[2247,2,10,"query-authorization: array any mixed"],[2249,2,10,"query-authorization: array absent"],[2251,2,10,"query-authorization: range equality inside"],[2253,2,10,"query-authorization: range strict bound"],[2255,2,10,"query-authorization: range inclusive bound"],[2257,2,10,"query-authorization: range unsafe inclusive"],[2259,2,10,"query-authorization: range safe in"],[2261,2,10,"query-authorization: range unsafe in"],[2263,2,10,"query-authorization: range absent"],[2265,2,10,"query-authorization: not equal null"],[2267,2,10,"query-authorization: not equal string"],[2269,2,10,"query-authorization: not in blocked"],[2271,2,10,"query-authorization: limit allowed"],[2273,2,10,"query-authorization: limit denied"],[2275,2,10,"query-authorization: limit absent"],[2277,2,10,"query-authorization: offset default"],[2279,2,10,"query-authorization: order desc"],[2281,2,10,"query-authorization: order asc"],[2283,2,10,"query-authorization: order absent"],[2285,2,10,"query-authorization: get fixed path"],[2287,2,10,"query-authorization: exists fixed path"],[2289,2,10,"query-authorization: exists constrained path"],[2291,2,10,"query-authorization: exists missing path"],[2293,2,10,"query-authorization: exists unconstrained path"],[2295,2,10,"query-authorization: group recursive owner"],[2297,2,10,"query-authorization: group recursive unconstrained"],[2299,2,10,"query-authorization: group recursive empty owner"],[2301,2,10,"query-authorization: group root only rule"],[2303,2,10,"query-authorization: nested collection owner"],[2305,3,10,"query-authorization: owner equality"],[2308,2,10,"query-authorization: owner absent"],[2310,2,10,"query-authorization: owner wrong uid"],[2312,2,10,"query-authorization: owner unverified"],[2314,2,10,"query-authorization: owner in single"],[2316,2,10,"query-authorization: owner in mixed"],[2318,2,10,"query-authorization: owner array is not equality"],[2320,2,10,"query-authorization: owner inequality"],[2322,2,10,"query-authorization: owner bounded equality"],[2324,2,10,"query-authorization: owner compound and"],[2326,2,10,"query-authorization: owner compound or safe"],[2328,2,10,"query-authorization: owner compound or unsafe"],[2330,2,10,"query-authorization: owner empty"],[2332,2,10,"query-authorization: owner empty unconstrained"],[2334,2,10,"query-authorization: owner empty wrong uid"],[2336,2,10,"query-authorization: owner nonmatching extra filter"],[2338,2,10,"query-authorization: permission get allowed"],[2340,2,10,"query-authorization: permission get denied"],[2342,2,10,"query-authorization: permission get missing"],[2344,2,10,"query-authorization: permission in all granted"],[2346,2,10,"query-authorization: permission in mixed"],[2348,2,10,"query-authorization: short circuit missing get"],[2350,2,10,"query-authorization: array contains owner"],[2352,2,10,"query-authorization: array contains other"],[2354,2,10,"query-authorization: array any owner"],[2356,2,10,"query-authorization: array any mixed"],[2358,2,10,"query-authorization: array absent"],[2360,2,10,"query-authorization: range equality inside"],[2362,2,10,"query-authorization: range strict bound"],[2364,2,10,"query-authorization: range inclusive bound"],[2366,2,10,"query-authorization: range unsafe inclusive"],[2368,2,10,"query-authorization: range safe in"],[2370,2,10,"query-authorization: range unsafe in"],[2372,2,10,"query-authorization: range absent"],[2374,2,10,"query-authorization: not equal null"],[2376,2,10,"query-authorization: not equal string"],[2378,2,10,"query-authorization: not in blocked"],[2380,2,10,"query-authorization: limit allowed"],[2382,2,10,"query-authorization: limit denied"],[2384,2,10,"query-authorization: limit absent"],[2386,2,10,"query-authorization: offset default"],[2388,2,10,"query-authorization: order desc"],[2390,2,10,"query-authorization: order asc"],[2392,2,10,"query-authorization: order absent"],[2394,2,10,"query-authorization: get fixed path"],[2396,2,10,"query-authorization: exists fixed path"],[2398,2,10,"query-authorization: exists constrained path"],[2400,2,10,"query-authorization: exists missing path"],[2402,2,10,"query-authorization: exists unconstrained path"],[2404,2,10,"query-authorization: group recursive owner"],[2406,2,10,"query-authorization: group recursive unconstrained"],[2408,2,10,"query-authorization: group recursive empty owner"],[2410,2,10,"query-authorization: group root only rule"],[2412,2,10,"query-authorization: nested collection owner"],[2414,1,10,"query-authorization: owner equality"],[2415,3,10,"query-paths: owner equality"],[2418,3,10,"query-paths: owner absent"],[2421,3,10,"query-paths: owner empty unconstrained"],[2424,3,10,"query-paths: limit allowed"],[2427,3,10,"query-paths: get fixed path"],[2430,3,10,"query-paths: path members granted"],[2433,3,10,"query-paths: path members denied"],[2436,3,10,"query-paths: path members missing"],[2439,3,10,"query-paths: path-getMembers granted"],[2442,3,10,"query-paths: path-getMembers denied"],[2445,3,10,"query-paths: path-getMembers missing"],[2448,3,10,"query-paths: path-functionMembers granted"],[2451,3,10,"query-paths: path-functionMembers denied"],[2454,3,10,"query-paths: path-functionMembers missing"],[2457,3,10,"query-paths: path-reversedMembers granted"],[2460,3,10,"query-paths: path-reversedMembers denied"],[2463,3,10,"query-paths: path-reversedMembers missing"],[2466,3,10,"query-paths: path-unknownOnly granted"],[2469,3,10,"query-paths: path-unknownOnly denied"],[2472,3,10,"query-paths: path-unknownOnly missing"],[2475,3,10,"query-paths: path-negatedAnd granted"],[2478,3,10,"query-paths: path-negatedAnd denied"],[2481,3,10,"query-paths: path-negatedAnd missing"],[2484,3,10,"query-paths: path-literalOr granted"],[2487,3,10,"query-paths: path-literalOr denied"],[2490,3,10,"query-paths: path-literalOr missing"],[2493,3,10,"query-paths: path-concreteErrorOr granted"],[2496,3,10,"query-paths: path-concreteErrorOr denied"],[2499,3,10,"query-paths: path-concreteErrorOr missing"],[2502,3,10,"query-paths: path-concreteErrorAnd granted"],[2505,3,10,"query-paths: path-concreteErrorAnd denied"],[2508,3,10,"query-paths: path-concreteErrorAnd missing"],[2511,3,10,"query-paths: path-budgetErrorOr granted"],[2514,3,10,"query-paths: path-budgetErrorOr denied"],[2517,3,10,"query-paths: path-budgetErrorOr missing"],[2520,3,10,"query-paths: path members empty granted"],[2523,3,10,"query-paths: path members filtered denied"],[2526,1,10,"query-paths: owner absent"],[2527,1,10,"query-paths: owner empty unconstrained"],[2528,1,10,"query-paths: get fixed path"],[2529,1,10,"query-paths: limit allowed"],[2530,1,10,"query-paths: path members granted"],[2531,1,10,"query-paths: path members denied"],[2532,1,10,"query-paths: path members empty granted"],[2533,3,10,"query-paths: owner equality"],[2536,2,10,"query-paths: owner absent"],[2538,2,10,"query-paths: owner empty unconstrained"],[2540,2,10,"query-paths: limit allowed"],[2542,2,10,"query-paths: get fixed path"],[2544,2,10,"query-paths: path members granted"],[2546,2,10,"query-paths: path members denied"],[2548,2,10,"query-paths: path members missing"],[2550,2,10,"query-paths: path-getMembers granted"],[2552,2,10,"query-paths: path-getMembers denied"],[2554,2,10,"query-paths: path-getMembers missing"],[2556,2,10,"query-paths: path-functionMembers granted"],[2558,2,10,"query-paths: path-functionMembers denied"],[2560,2,10,"query-paths: path-functionMembers missing"],[2562,2,10,"query-paths: path-reversedMembers granted"],[2564,2,10,"query-paths: path-reversedMembers denied"],[2566,2,10,"query-paths: path-reversedMembers missing"],[2568,2,10,"query-paths: path-unknownOnly granted"],[2570,2,10,"query-paths: path-unknownOnly denied"],[2572,2,10,"query-paths: path-unknownOnly missing"],[2574,2,10,"query-paths: path-negatedAnd granted"],[2576,2,10,"query-paths: path-negatedAnd denied"],[2578,2,10,"query-paths: path-negatedAnd missing"],[2580,2,10,"query-paths: path-literalOr granted"],[2582,2,10,"query-paths: path-literalOr denied"],[2584,2,10,"query-paths: path-literalOr missing"],[2586,2,10,"query-paths: path-concreteErrorOr granted"],[2588,2,10,"query-paths: path-concreteErrorOr denied"],[2590,2,10,"query-paths: path-concreteErrorOr missing"],[2592,2,10,"query-paths: path-concreteErrorAnd granted"],[2594,2,10,"query-paths: path-concreteErrorAnd denied"],[2596,2,10,"query-paths: path-concreteErrorAnd missing"],[2598,2,10,"query-paths: path-budgetErrorOr granted"],[2600,2,10,"query-paths: path-budgetErrorOr denied"],[2602,2,10,"query-paths: path-budgetErrorOr missing"],[2604,2,10,"query-paths: path members empty granted"],[2606,2,10,"query-paths: path members filtered denied"],[2608,3,10,"query-paths: owner equality"],[2611,2,10,"query-paths: owner absent"],[2613,2,10,"query-paths: owner empty unconstrained"],[2615,2,10,"query-paths: limit allowed"],[2617,2,10,"query-paths: get fixed path"],[2619,2,10,"query-paths: path members granted"],[2621,2,10,"query-paths: path members denied"],[2623,2,10,"query-paths: path members missing"],[2625,2,10,"query-paths: path-getMembers granted"],[2627,2,10,"query-paths: path-getMembers denied"],[2629,2,10,"query-paths: path-getMembers missing"],[2631,2,10,"query-paths: path-functionMembers granted"],[2633,2,10,"query-paths: path-functionMembers denied"],[2635,2,10,"query-paths: path-functionMembers missing"],[2637,2,10,"query-paths: path-reversedMembers granted"],[2639,2,10,"query-paths: path-reversedMembers denied"],[2641,2,10,"query-paths: path-reversedMembers missing"],[2643,2,10,"query-paths: path-unknownOnly granted"],[2645,2,10,"query-paths: path-unknownOnly denied"],[2647,2,10,"query-paths: path-unknownOnly missing"],[2649,2,10,"query-paths: path-negatedAnd granted"],[2651,2,10,"query-paths: path-negatedAnd denied"],[2653,2,10,"query-paths: path-negatedAnd missing"],[2655,2,10,"query-paths: path-literalOr granted"],[2657,2,10,"query-paths: path-literalOr denied"],[2659,2,10,"query-paths: path-literalOr missing"],[2661,2,10,"query-paths: path-concreteErrorOr granted"],[2663,2,10,"query-paths: path-concreteErrorOr denied"],[2665,2,10,"query-paths: path-concreteErrorOr missing"],[2667,2,10,"query-paths: path-concreteErrorAnd granted"],[2669,2,10,"query-paths: path-concreteErrorAnd denied"],[2671,2,10,"query-paths: path-concreteErrorAnd missing"],[2673,2,10,"query-paths: path-budgetErrorOr granted"],[2675,2,10,"query-paths: path-budgetErrorOr denied"],[2677,2,10,"query-paths: path-budgetErrorOr missing"],[2679,2,10,"query-paths: path members empty granted"],[2681,2,10,"query-paths: path members filtered denied"],[2683,1,10,"query-paths: owner equality"]],"cases":[{"t":"case 0000","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0001","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0002","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0003","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0004","q":"get: 2 + 3 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0005","q":"get: 11 - 4 == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0006","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0007","q":"get: 9 / 3 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0008","q":"get: 10 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0009","q":"get: 0 < 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0010","q":"get: -1 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0011","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0012","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0013","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0014","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0015","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0016","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0017","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0018","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0019","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0020","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0021","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0022","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0023","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0024","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0025","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0026","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0027","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0028","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0029","q":"get: request.auth.uid == 'user-0'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0030","q":"get: request.auth.token.score == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0031","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0032","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0033","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0034","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0035","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0036","q":"get: 3 + 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0037","q":"get: 12 - 4 == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0038","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0039","q":"get: 10 / 3 == 3.3333333333333335","a":"DENY","r":"c","k":"verdict"},{"t":"case 0040","q":"get: 11 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0041","q":"get: 1 < 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0042","q":"get: -2 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0043","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0044","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0045","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0046","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0047","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0048","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0049","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0050","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0051","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0052","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0053","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0054","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0055","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0056","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0057","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0058","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0059","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0060","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0061","q":"get: request.auth.uid == 'user-1'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0062","q":"get: request.auth.token.score == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0063","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0064","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0065","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0066","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0067","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0068","q":"get: 4 + 3 == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0069","q":"get: 13 - 4 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0070","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0071","q":"get: 11 / 3 == 3.6666666666666665","a":"DENY","r":"c","k":"verdict"},{"t":"case 0072","q":"get: 12 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0073","q":"get: 2 < 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0074","q":"get: -3 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0075","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0076","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0077","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0078","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0079","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0080","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0081","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0082","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0083","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0084","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0085","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0086","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0087","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0088","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0089","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0090","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0091","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0092","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0093","q":"get: request.auth.uid == 'user-2'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0094","q":"get: request.auth.token.score == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0095","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0096","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0097","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0098","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0099","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0100","q":"get: 5 + 3 == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0101","q":"get: 14 - 4 == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0102","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0103","q":"get: 12 / 3 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0104","q":"get: 13 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0105","q":"get: 3 < 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0106","q":"get: -4 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0107","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0108","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0109","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0110","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0111","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0112","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0113","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0114","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0115","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0116","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0117","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0118","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0119","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0120","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0121","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0122","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0123","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0124","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0125","q":"get: request.auth.uid == 'user-3'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0126","q":"get: request.auth.token.score == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0127","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0128","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0129","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0130","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0131","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0132","q":"get: 6 + 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0133","q":"get: 15 - 4 == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0134","q":"get: 6 * 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0135","q":"get: 13 / 3 == 4.333333333333333","a":"DENY","r":"c","k":"verdict"},{"t":"case 0136","q":"get: 14 % 7 == 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0137","q":"get: 4 < 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0138","q":"get: -5 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0139","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0140","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0141","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0142","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0143","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0144","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0145","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0146","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0147","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0148","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0149","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0150","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0151","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0152","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0153","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0154","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0155","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0156","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0157","q":"get: request.auth.uid == 'user-4'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0158","q":"get: request.auth.token.score == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0159","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0160","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0161","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0162","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0163","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0164","q":"get: 7 + 3 == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0165","q":"get: 16 - 4 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0166","q":"get: 7 * 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0167","q":"get: 14 / 3 == 4.666666666666667","a":"DENY","r":"c","k":"verdict"},{"t":"case 0168","q":"get: 15 % 7 == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0169","q":"get: 5 < 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0170","q":"get: -6 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0171","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0172","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0173","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0174","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0175","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0176","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0177","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0178","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0179","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0180","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0181","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0182","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0183","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0184","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0185","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0186","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0187","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0188","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0189","q":"get: request.auth.uid == 'user-5'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0190","q":"get: request.auth.token.score == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0191","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0192","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0193","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0194","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0195","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0196","q":"get: 8 + 3 == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0197","q":"get: 17 - 4 == 13","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0198","q":"get: 8 * 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0199","q":"get: 15 / 3 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0200","q":"get: 16 % 7 == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0201","q":"get: 6 < 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0202","q":"get: -7 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0203","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0204","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0205","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0206","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0207","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0208","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0209","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0210","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0211","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0212","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0213","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0214","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0215","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0216","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0217","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0218","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0219","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0220","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0221","q":"get: request.auth.uid == 'user-6'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0222","q":"get: request.auth.token.score == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0223","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0224","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0225","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0226","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0227","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0228","q":"get: 9 + 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0229","q":"get: 18 - 4 == 14","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0230","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0231","q":"get: 16 / 3 == 5.333333333333333","a":"DENY","r":"c","k":"verdict"},{"t":"case 0232","q":"get: 17 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0233","q":"get: 7 < 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0234","q":"get: -8 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0235","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0236","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0237","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0238","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0239","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0240","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0241","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0242","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0243","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0244","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0245","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0246","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0247","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0248","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0249","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0250","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0251","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0252","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0253","q":"get: request.auth.uid == 'user-7'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0254","q":"get: request.auth.token.score == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0255","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0256","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0257","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0258","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0259","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0260","q":"get: 10 + 3 == 13","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0261","q":"get: 19 - 4 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0262","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0263","q":"get: 17 / 3 == 5.666666666666667","a":"DENY","r":"c","k":"verdict"},{"t":"case 0264","q":"get: 18 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0265","q":"get: 8 < 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0266","q":"get: -9 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0267","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0268","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0269","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0270","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0271","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0272","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0273","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0274","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0275","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0276","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0277","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0278","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0279","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0280","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0281","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0282","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0283","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0284","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0285","q":"get: request.auth.uid == 'user-0'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0286","q":"get: request.auth.token.score == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0287","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0288","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0289","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0290","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0291","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0292","q":"get: 11 + 3 == 14","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0293","q":"get: 20 - 4 == 16","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0294","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0295","q":"get: 18 / 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0296","q":"get: 19 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0297","q":"get: 9 < 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0298","q":"get: -10 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0299","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0300","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0301","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0302","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0303","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0304","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0305","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0306","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0307","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0308","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0309","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0310","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0311","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0312","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0313","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0314","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0315","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0316","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0317","q":"get: request.auth.uid == 'user-1'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0318","q":"get: request.auth.token.score == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0319","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0320","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0321","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0322","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0323","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0324","q":"get: 12 + 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0325","q":"get: 21 - 4 == 17","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0326","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0327","q":"get: 19 / 3 == 6.333333333333333","a":"DENY","r":"c","k":"verdict"},{"t":"case 0328","q":"get: 20 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0329","q":"get: 10 < 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0330","q":"get: -11 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0331","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0332","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0333","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0334","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0335","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0336","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0337","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0338","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0339","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0340","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0341","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0342","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0343","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0344","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0345","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0346","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0347","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0348","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0349","q":"get: request.auth.uid == 'user-2'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0350","q":"get: request.auth.token.score == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0351","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0352","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0353","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0354","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0355","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0356","q":"get: 13 + 3 == 16","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0357","q":"get: 22 - 4 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0358","q":"get: 6 * 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0359","q":"get: 20 / 3 == 6.666666666666667","a":"DENY","r":"c","k":"verdict"},{"t":"case 0360","q":"get: 21 % 7 == 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0361","q":"get: 11 < 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0362","q":"get: -12 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0363","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0364","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0365","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0366","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0367","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0368","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0369","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0370","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0371","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0372","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0373","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0374","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0375","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0376","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0377","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0378","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0379","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0380","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0381","q":"get: request.auth.uid == 'user-3'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0382","q":"get: request.auth.token.score == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0383","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0384","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0385","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0386","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0387","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0388","q":"get: 14 + 3 == 17","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0389","q":"get: 23 - 4 == 19","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0390","q":"get: 7 * 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0391","q":"get: 21 / 3 == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0392","q":"get: 22 % 7 == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0393","q":"get: 12 < 13","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0394","q":"get: -13 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0395","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0396","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0397","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0398","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0399","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0400","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0401","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0402","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0403","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0404","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0405","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0406","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0407","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0408","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0409","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0410","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0411","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0412","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0413","q":"get: request.auth.uid == 'user-4'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0414","q":"get: request.auth.token.score == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0415","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0416","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0417","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0418","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0419","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0420","q":"get: 15 + 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0421","q":"get: 24 - 4 == 20","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0422","q":"get: 8 * 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0423","q":"get: 22 / 3 == 7.333333333333333","a":"DENY","r":"c","k":"verdict"},{"t":"case 0424","q":"get: 23 % 7 == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0425","q":"get: 13 < 14","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0426","q":"get: -14 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0427","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0428","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0429","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0430","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0431","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0432","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0433","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0434","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0435","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0436","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0437","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0438","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0439","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0440","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0441","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0442","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0443","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0444","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0445","q":"get: request.auth.uid == 'user-5'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0446","q":"get: request.auth.token.score == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0447","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0448","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0449","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0450","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0451","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0452","q":"get: 16 + 3 == 19","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0453","q":"get: 25 - 4 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0454","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0455","q":"get: 23 / 3 == 7.666666666666667","a":"DENY","r":"c","k":"verdict"},{"t":"case 0456","q":"get: 24 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0457","q":"get: 14 < 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0458","q":"get: -15 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0459","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0460","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0461","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0462","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0463","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0464","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0465","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0466","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0467","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0468","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0469","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0470","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0471","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0472","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0473","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0474","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0475","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0476","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0477","q":"get: request.auth.uid == 'user-6'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0478","q":"get: request.auth.token.score == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0479","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0480","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0481","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0482","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0483","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0484","q":"get: 17 + 3 == 20","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0485","q":"get: 26 - 4 == 22","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0486","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0487","q":"get: 24 / 3 == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0488","q":"get: 25 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0489","q":"get: 15 < 16","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0490","q":"get: -16 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0491","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0492","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0493","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0494","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0495","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0496","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0497","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0498","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0499","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0500","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0501","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0502","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0503","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0504","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0505","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0506","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0507","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0508","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0509","q":"get: request.auth.uid == 'user-7'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0510","q":"get: request.auth.token.score == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0511","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0512","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0513","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0514","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0515","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0516","q":"get: 18 + 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0517","q":"get: 27 - 4 == 23","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0518","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0519","q":"get: 25 / 3 == 8.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0520","q":"get: 26 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0521","q":"get: 16 < 17","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0522","q":"get: -17 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0523","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0524","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0525","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0526","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0527","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0528","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0529","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0530","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0531","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0532","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0533","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0534","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0535","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0536","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0537","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0538","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0539","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0540","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0541","q":"get: request.auth.uid == 'user-0'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0542","q":"get: request.auth.token.score == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0543","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0544","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0545","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0546","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0547","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0548","q":"get: 19 + 3 == 22","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0549","q":"get: 28 - 4 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0550","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0551","q":"get: 26 / 3 == 8.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0552","q":"get: 27 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0553","q":"get: 17 < 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0554","q":"get: -18 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0555","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0556","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0557","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0558","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0559","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0560","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0561","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0562","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0563","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0564","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0565","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0566","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0567","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0568","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0569","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0570","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0571","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0572","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0573","q":"get: request.auth.uid == 'user-1'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0574","q":"get: request.auth.token.score == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0575","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0576","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0577","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0578","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0579","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0580","q":"get: 20 + 3 == 23","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0581","q":"get: 29 - 4 == 25","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0582","q":"get: 6 * 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0583","q":"get: 27 / 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0584","q":"get: 28 % 7 == 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0585","q":"get: 18 < 19","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0586","q":"get: -19 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0587","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0588","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0589","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0590","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0591","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0592","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0593","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0594","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0595","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0596","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0597","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0598","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0599","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0600","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0601","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0602","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0603","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0604","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0605","q":"get: request.auth.uid == 'user-2'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0606","q":"get: request.auth.token.score == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0607","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0608","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0609","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0610","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0611","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0612","q":"get: 21 + 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0613","q":"get: 30 - 4 == 26","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0614","q":"get: 7 * 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0615","q":"get: 28 / 3 == 9.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0616","q":"get: 29 % 7 == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0617","q":"get: 19 < 20","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0618","q":"get: -20 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0619","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0620","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0621","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0622","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0623","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0624","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0625","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0626","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0627","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0628","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0629","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0630","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0631","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0632","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0633","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0634","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0635","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0636","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0637","q":"get: request.auth.uid == 'user-3'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0638","q":"get: request.auth.token.score == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0639","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0640","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0641","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0642","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0643","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0644","q":"get: 22 + 3 == 25","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0645","q":"get: 31 - 4 == 27","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0646","q":"get: 8 * 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0647","q":"get: 29 / 3 == 9.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0648","q":"get: 30 % 7 == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0649","q":"get: 20 < 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0650","q":"get: -21 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0651","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0652","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0653","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0654","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0655","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0656","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0657","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0658","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0659","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0660","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0661","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0662","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0663","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0664","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0665","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0666","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0667","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0668","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0669","q":"get: request.auth.uid == 'user-4'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0670","q":"get: request.auth.token.score == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0671","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0672","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0673","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0674","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0675","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0676","q":"get: 23 + 3 == 26","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0677","q":"get: 32 - 4 == 28","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0678","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0679","q":"get: 30 / 3 == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0680","q":"get: 31 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0681","q":"get: 21 < 22","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0682","q":"get: -22 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0683","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0684","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0685","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0686","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0687","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0688","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0689","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0690","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0691","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0692","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0693","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0694","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0695","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0696","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0697","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0698","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0699","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0700","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0701","q":"get: request.auth.uid == 'user-5'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0702","q":"get: request.auth.token.score == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0703","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0704","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0705","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0706","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0707","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0708","q":"get: 24 + 3 == 27","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0709","q":"get: 33 - 4 == 29","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0710","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0711","q":"get: 31 / 3 == 10.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0712","q":"get: 32 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0713","q":"get: 22 < 23","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0714","q":"get: -23 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0715","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0716","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0717","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0718","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0719","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0720","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0721","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0722","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0723","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0724","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0725","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0726","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0727","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0728","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0729","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0730","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0731","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0732","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0733","q":"get: request.auth.uid == 'user-6'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0734","q":"get: request.auth.token.score == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0735","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0736","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0737","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0738","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0739","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0740","q":"get: 25 + 3 == 28","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0741","q":"get: 34 - 4 == 30","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0742","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0743","q":"get: 32 / 3 == 10.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0744","q":"get: 33 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0745","q":"get: 23 < 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0746","q":"get: -24 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0747","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0748","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0749","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0750","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0751","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0752","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0753","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0754","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0755","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0756","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0757","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0758","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0759","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0760","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0761","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0762","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0763","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0764","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0765","q":"get: request.auth.uid == 'user-7'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0766","q":"get: request.auth.token.score == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0767","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0768","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0769","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0770","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0771","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0772","q":"get: 26 + 3 == 29","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0773","q":"get: 35 - 4 == 31","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0774","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0775","q":"get: 33 / 3 == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0776","q":"get: 34 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0777","q":"get: 24 < 25","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0778","q":"get: -25 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0779","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0780","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0781","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0782","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0783","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0784","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0785","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0786","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0787","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0788","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0789","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0790","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0791","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0792","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0793","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0794","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0795","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0796","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0797","q":"get: request.auth.uid == 'user-0'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0798","q":"get: request.auth.token.score == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0799","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0800","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0801","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0802","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0803","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0804","q":"get: 27 + 3 == 30","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0805","q":"get: 36 - 4 == 32","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0806","q":"get: 6 * 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0807","q":"get: 34 / 3 == 11.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0808","q":"get: 35 % 7 == 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0809","q":"get: 25 < 26","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0810","q":"get: -26 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0811","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0812","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0813","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0814","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0815","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0816","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0817","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0818","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0819","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0820","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0821","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0822","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0823","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0824","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0825","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0826","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0827","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0828","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0829","q":"get: request.auth.uid == 'user-1'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0830","q":"get: request.auth.token.score == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0831","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0832","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0833","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0834","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0835","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0836","q":"get: 28 + 3 == 31","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0837","q":"get: 37 - 4 == 33","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0838","q":"get: 7 * 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0839","q":"get: 35 / 3 == 11.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0840","q":"get: 36 % 7 == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0841","q":"get: 26 < 27","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0842","q":"get: -27 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0843","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0844","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0845","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0846","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0847","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0848","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0849","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0850","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0851","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0852","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0853","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0854","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0855","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0856","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0857","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0858","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0859","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0860","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0861","q":"get: request.auth.uid == 'user-2'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0862","q":"get: request.auth.token.score == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0863","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0864","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0865","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0866","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0867","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0868","q":"get: 29 + 3 == 32","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0869","q":"get: 38 - 4 == 34","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0870","q":"get: 8 * 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0871","q":"get: 36 / 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0872","q":"get: 37 % 7 == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0873","q":"get: 27 < 28","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0874","q":"get: -28 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0875","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0876","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0877","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0878","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0879","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0880","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0881","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0882","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0883","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0884","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0885","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0886","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0887","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0888","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0889","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0890","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0891","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0892","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0893","q":"get: request.auth.uid == 'user-3'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0894","q":"get: request.auth.token.score == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0895","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0896","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0897","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0898","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0899","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0900","q":"get: 30 + 3 == 33","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0901","q":"get: 39 - 4 == 35","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0902","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0903","q":"get: 37 / 3 == 12.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0904","q":"get: 38 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0905","q":"get: 28 < 29","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0906","q":"get: -29 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0907","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0908","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0909","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0910","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0911","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0912","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0913","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0914","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0915","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0916","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0917","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0918","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0919","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0920","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0921","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0922","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0923","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0924","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0925","q":"get: request.auth.uid == 'user-4'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0926","q":"get: request.auth.token.score == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0927","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0928","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0929","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0930","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0931","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0932","q":"get: 31 + 3 == 34","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0933","q":"get: 40 - 4 == 36","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0934","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0935","q":"get: 38 / 3 == 12.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0936","q":"get: 39 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0937","q":"get: 29 < 30","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0938","q":"get: -30 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0939","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0940","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0941","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0942","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0943","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0944","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0945","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0946","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0947","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0948","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0949","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0950","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0951","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0952","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0953","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0954","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0955","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0956","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0957","q":"get: request.auth.uid == 'user-5'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0958","q":"get: request.auth.token.score == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0959","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0960","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0961","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0962","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0963","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0964","q":"get: 32 + 3 == 35","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0965","q":"get: 41 - 4 == 37","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0966","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0967","q":"get: 39 / 3 == 13","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0968","q":"get: 40 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0969","q":"get: 30 < 31","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0970","q":"get: -31 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0971","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0972","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0973","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0974","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0975","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0976","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0977","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0978","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0979","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0980","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0981","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0982","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0983","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0984","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0985","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0986","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0987","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0988","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0989","q":"get: request.auth.uid == 'user-6'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0990","q":"get: request.auth.token.score == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0991","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0992","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0993","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0994","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0995","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0996","q":"get: 33 + 3 == 36","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0997","q":"get: 42 - 4 == 38","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0998","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0999","q":"get: 40 / 3 == 13.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 1000","q":"get: 41 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1001","q":"get: 31 < 32","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1002","q":"get: -32 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1003","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1004","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1005","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1006","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 1007","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1008","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1009","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1010","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1011","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1012","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1013","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1014","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1015","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1016","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1017","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1018","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1019","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1020","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1021","q":"get: request.auth.uid == 'user-7'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1022","q":"get: request.auth.token.score == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1023","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"string trim","q":"get: ' {name} '.trim() == '{name}'","a":"ALLOW","r":"c","k":"verdict"},{"t":"string case","q":"get: 'FiRe'.lower() == 'fire' && 'FiRe'.upper() == 'FIRE'","a":"ALLOW","r":"c","k":"verdict"},{"t":"string replace","q":"get: 'abcabc'.replace('a', 'x') == 'xbcxbc'","a":"ALLOW","r":"c","k":"verdict"},{"t":"string split","q":"get: 'a,b,c'.split(',') == ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"string match","q":"get: 'phase3'.matches('^phase[0-9]$')","a":"ALLOW","r":"c","k":"verdict"},{"t":"string coercion","q":"get: string(123) == '123' && string(true) == 'true'","a":"ALLOW","r":"c","k":"verdict"},{"t":"list concat","q":"get: [1, 2].concat([3]) == [1, 2, 3]","a":"ALLOW","r":"c","k":"verdict"},{"t":"list membership","q":"get: [1, 2, 3].hasAll([1, 3]) && [1, 2, 3].hasAny([9, 2])","a":"ALLOW","r":"c","k":"verdict"},{"t":"list has only","q":"get: [1, 2, 2].hasOnly([2, 1])","a":"ALLOW","r":"c","k":"verdict"},{"t":"list join","q":"get: ['a', 'b', 'c'].join('-') == 'a-b-c'","a":"ALLOW","r":"c","k":"verdict"},{"t":"list remove all","q":"get: [1, 2, 3, 2].removeAll([2]) == [1, 3]","a":"ALLOW","r":"c","k":"verdict"},{"t":"list index range","q":"get: [10, 20, 30][1] == 20 && [10, 20, 30][0:2] == [10, 20]","a":"ALLOW","r":"c","k":"verdict"},{"t":"map get","q":"get: {'a': 1}.get('missing', 7) == 7 && {'a': 1}.get('a', 7) == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"map keys values","q":"get: {'a': 1, 'b': 2}.keys().hasOnly(['a', 'b']) && {'a': 1, 'b': 2}.values().hasAll([1, 2])","a":"ALLOW","r":"c","k":"verdict"},{"t":"map size membership","q":"get: {'a': 1, 'b': 2}.size() == 2 && 'a' in {'a': 1}","a":"ALLOW","r":"c","k":"verdict"},{"t":"map diff","q":"get: {'a': 1, 'b': 2}.diff({'a': 1, 'b': 3, 'c': 4}).affectedKeys().hasOnly(['b', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"map diff sets","q":"get: {'a': 1, 'b': 2}.diff({'a': 1, 'b': 3, 'c': 4}).changedKeys().hasOnly(['b']) && {'a': 1, 'b': 2}.diff({'a': 1, 'b': 3, 'c': 4}).addedK…","a":"ALLOW","r":"c","k":"verdict"},{"t":"set union","q":"get: ['a', 'b'].toSet().union(['b', 'c'].toSet()).hasOnly(['a', 'b', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"set intersection","q":"get: ['a', 'b'].toSet().intersection(['b', 'c'].toSet()).hasOnly(['b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"set difference","q":"get: ['a', 'b'].toSet().difference(['b'].toSet()).hasOnly(['a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"bytes size hex","q":"get: 'abc'.toUtf8().size() == 3 && 'abc'.toUtf8().toHexString() == '616263'","a":"ALLOW","r":"c","k":"verdict"},{"t":"bytes base64 unicode","q":"get: 'é'.toUtf8().size() == 2 && 'abc'.toUtf8().toBase64() == 'YWJj'","a":"ALLOW","r":"c","k":"verdict"},{"t":"duration seconds","q":"get: duration.value(90, 's').seconds() == 90","a":"ALLOW","r":"c","k":"verdict"},{"t":"duration nanos","q":"get: duration.value(123, 'ns').nanos() == 123","a":"ALLOW","r":"c","k":"verdict"},{"t":"timestamp date","q":"get: timestamp.date(2024, 2, 29).year() == 2024 && timestamp.date(2024, 2, 29).month() == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"timestamp components","q":"get: timestamp.date(2024, 2, 29).day() == 29 && timestamp.date(2024, 2, 29).dayOfWeek() == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"timestamp arithmetic","q":"get: timestamp.date(2024, 2, 29) + duration.value(1, 'd') == timestamp.date(2024, 3, 1)","a":"ALLOW","r":"c","k":"verdict"},{"t":"latlng components","q":"get: latlng.value(1.25, 2.5).latitude() == 1.25 && latlng.value(1.25, 2.5).longitude() == 2.5","a":"ALLOW","r":"c","k":"verdict"},{"t":"latlng distance","q":"get: latlng.value(1, 2).distance(latlng.value(1, 2)) == 0.0","a":"ALLOW","r":"c","k":"verdict"},{"t":"math basic","q":"get: math.abs(-2) == 2 && math.ceil(1.2) == 2 && math.floor(1.8) == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"math round sqrt","q":"get: math.round(1.6) == 2 && math.sqrt(81) == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"math pow","q":"get: math.pow(2, 3) == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"hashing md5","q":"get: hashing.md5('abc'.toUtf8()).toHexString() == '900150983CD24FB0D6963F7D28E17F72'","a":"ALLOW","r":"c","k":"verdict"},{"t":"hashing sha256","q":"get: hashing.sha256('abc'.toUtf8()).toHexString() == 'BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD'","a":"ALLOW","r":"c","k":"verdict"},{"t":"request auth","q":"get: request.auth.uid == 'phase3-user' && request.auth.token.role == 'editor'","a":"ALLOW","r":"c","k":"verdict"},{"t":"request method time","q":"get: request.method == 'get' && request.time.year() == 2026","a":"ALLOW","r":"c","k":"verdict"},{"t":"path value","q":"get: resource.__name__ == /databases/$(database)/documents/phase3-language/path-value","a":"ALLOW","r":"c","k":"verdict"},{"t":"function let","q":"get: usesLet(3)","a":"ALLOW","r":"c","k":"verdict"},{"t":"resource update diff","q":"update: resource.data.name == 'before' && request.resource.data.name == 'after' && request.resource.data.diff(resource.data).affectedKeys()…","a":"ALLOW","r":"c","k":"verdict"},{"t":"query limit","q":"list: request.query.limit == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"nested match","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"recursive match","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"overlapping allow","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 15","q":"projects.test with the function-depth-15 source (643 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 16","q":"projects.test with the function-depth-16 source (678 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 17","q":"projects.test with the function-depth-17 source (713 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 18","q":"projects.test with the function-depth-18 source (748 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 19","q":"projects.test with the function-depth-19 source (783 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 20","q":"projects.test with the function-depth-20 source (818 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 21","q":"projects.test with the function-depth-21 source (853 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 22","q":"projects.test with the function-depth-22 source (888 bytes)","a":"compile ERROR: Maximum allowed call depth of 20 is reached for [f0->f1->f2->f3->f4->f5->f6->f7->f8->f9->f10->f11->f12->f13->f14->f15->f16->…","r":"c","k":"verdict"},{"t":"function depth 23","q":"projects.test with the function-depth-23 source (923 bytes)","a":"compile ERROR: Maximum allowed call depth of 20 is reached for [f0->f1->f2->f3->f4->f5->f6->f7->f8->f9->f10->f11->f12->f13->f14->f15->f16->…","r":"c","k":"error"},{"t":"linear expression terms 20","q":"projects.test with the linear-expression-terms-20 source (740 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"linear expression terms 30","q":"projects.test with the linear-expression-terms-30 source (1040 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"linear expression terms 40","q":"projects.test with the linear-expression-terms-40 source (1340 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"linear expression terms 50","q":"projects.test with the linear-expression-terms-50 source (1640 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"linear expression terms 100","q":"projects.test with the linear-expression-terms-100 source (3140 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"balanced expression terms 100","q":"projects.test with the balanced-expression-terms-100 source (3933 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"balanced expression terms 125","q":"projects.test with the balanced-expression-terms-125 source (4972 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"verdict"},{"t":"balanced expression terms 150","q":"projects.test with the balanced-expression-terms-150 source (5923 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced expression terms 175","q":"projects.test with the balanced-expression-terms-175 source (6962 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced expression terms 200","q":"projects.test with the balanced-expression-terms-200 source (7913 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced expression terms 225","q":"projects.test with the balanced-expression-terms-225 source (8954 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced expression terms 250","q":"projects.test with the balanced-expression-terms-250 source (9907 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced expression terms 300","q":"projects.test with the balanced-expression-terms-300 source (11903 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"linear expression terms 51","q":"projects.test with the linear-expression-terms-51 source (1670 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"linear expression terms 99","q":"projects.test with the linear-expression-terms-99 source (3110 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 50","q":"projects.test with the true-chain-terms-50 source (550 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"true chain terms 55","q":"projects.test with the true-chain-terms-55 source (590 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"true chain terms 60","q":"projects.test with the true-chain-terms-60 source (630 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"true chain terms 100","q":"projects.test with the true-chain-terms-100 source (950 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 101","q":"projects.test with the true-chain-terms-101 source (958 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 102","q":"projects.test with the true-chain-terms-102 source (966 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 103","q":"projects.test with the true-chain-terms-103 source (974 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 104","q":"projects.test with the true-chain-terms-104 source (982 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 105","q":"projects.test with the true-chain-terms-105 source (990 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 106","q":"projects.test with the true-chain-terms-106 source (998 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 107","q":"projects.test with the true-chain-terms-107 source (1006 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 108","q":"projects.test with the true-chain-terms-108 source (1014 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 109","q":"projects.test with the true-chain-terms-109 source (1022 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 110","q":"projects.test with the true-chain-terms-110 source (1030 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 120","q":"projects.test with the true-chain-terms-120 source (1110 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 150","q":"projects.test with the true-chain-terms-150 source (1350 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 200","q":"projects.test with the true-chain-terms-200 source (1750 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 50","q":"projects.test with the time-chain-terms-50 source (1350 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"time chain terms 99","q":"projects.test with the time-chain-terms-99 source (2526 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 100","q":"projects.test with the time-chain-terms-100 source (2550 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 101","q":"projects.test with the time-chain-terms-101 source (2574 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 102","q":"projects.test with the time-chain-terms-102 source (2598 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 103","q":"projects.test with the time-chain-terms-103 source (2622 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 104","q":"projects.test with the time-chain-terms-104 source (2646 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 105","q":"projects.test with the time-chain-terms-105 source (2670 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 120","q":"projects.test with the time-chain-terms-120 source (3030 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"literal left terms 50","q":"projects.test with the literal-left-terms-50 source (1640 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"literal left terms 99","q":"projects.test with the literal-left-terms-99 source (3110 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"literal left terms 100","q":"projects.test with the literal-left-terms-100 source (3140 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"right nested terms 20","q":"projects.test with the right-nested-terms-20 source (778 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"right nested terms 50","q":"projects.test with the right-nested-terms-50 source (1738 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"right nested terms 60","q":"projects.test with the right-nested-terms-60 source (2058 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"right nested terms 90","q":"projects.test with the right-nested-terms-90 source (3018 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"right nested terms 100","q":"projects.test with the right-nested-terms-100 source (3338 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"balanced parenthesised terms 60","q":"projects.test with the balanced-parenthesised-terms-60 source (2176 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"balanced parenthesised terms 100","q":"projects.test with the balanced-parenthesised-terms-100 source (3536 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"balanced parenthesised terms 200","q":"projects.test with the balanced-parenthesised-terms-200 source (7036 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced parenthesised terms 400","q":"projects.test with the balanced-parenthesised-terms-400 source (14036 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"unexpected token","q":"projects.test with the unexpected-token source (154 bytes)","a":"compile ERROR: Missing conditional expression after 'if'.","r":"c","k":"verdict"},{"t":"unclosed block","q":"projects.test with the unclosed-block source (89 bytes)","a":"compile ERROR: Missing 'match' keyword before path.","r":"c","k":"verdict"},{"t":"duplicate let","q":"projects.test with the duplicate-let source (245 bytes)","a":"compile ERROR: The identifier [value] is already bound in the current scope.","r":"c","k":"verdict"},{"t":"undefined name","q":"projects.test with the undefined-name source (170 bytes)","a":"compiled, WARNING: Invalid variable name: missingName.","r":"c","k":"verdict"},{"t":"invalid function arity","q":"projects.test with the invalid-function-arity source (169 bytes)","a":"compiled, WARNING: Incorrect number of arguments supplied to function: math.abs.","r":"c","k":"verdict"},{"t":"recursive function","q":"projects.test with the recursive-function source (210 bytes)","a":"compile ERROR: Recursive call is not allowed.","r":"c","k":"verdict"},{"t":"invalid recursive wildcard","q":"projects.test with the invalid-recursive-wildcard source (163 bytes)","a":"compile ERROR: Invalid glob match expression. Only one glob match is permitted in a match declaration path.","r":"c","k":"verdict"},{"t":"source bytes 255999","q":"projects.test with the source-bytes-255999 source (255999 bytes)","a":"compiled with no issues","r":"c","k":"verdict"},{"t":"source bytes 256000","q":"projects.test with the source-bytes-256000 source (256000 bytes)","a":"compiled with no issues","r":"c","k":"verdict"},{"t":"source bytes 256001","q":"projects.test with the source-bytes-256001 source (256001 bytes)","a":"compiled with no issues","r":"c","k":"verdict"},{"t":"source bytes 262145","q":"projects.test with the source-bytes-262145 source (262145 bytes)","a":"400 INVALID_ARGUMENT: Request contains an invalid argument.","r":"c","k":"verdict"},{"t":"production compile","q":"compile complex-firestore.rules (1193 non-blank lines)","a":"compiled with no issues","r":"c","k":"verdict"},{"t":"debug return","q":"get: debug(request.auth.uid) == 'phase3-user'","a":"DENY, error: Function not found error: Name: [debug].","r":"d","k":"verdict","w":"production's projects.test has no debug() (Function not found); Firenook evaluates debug() to its argument, as the emulator does"},{"t":"linear expression terms 60","q":"projects.test with the linear-expression-terms-60 source (1940 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 70","q":"projects.test with the linear-expression-terms-70 source (2240 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 80","q":"projects.test with the linear-expression-terms-80 source (2540 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 90","q":"projects.test with the linear-expression-terms-90 source (2840 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 52","q":"projects.test with the linear-expression-terms-52 source (1700 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 53","q":"projects.test with the linear-expression-terms-53 source (1730 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 54","q":"projects.test with the linear-expression-terms-54 source (1760 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 55","q":"projects.test with the linear-expression-terms-55 source (1790 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 56","q":"projects.test with the linear-expression-terms-56 source (1820 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 57","q":"projects.test with the linear-expression-terms-57 source (1850 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 58","q":"projects.test with the linear-expression-terms-58 source (1880 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 59","q":"projects.test with the linear-expression-terms-59 source (1910 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 91","q":"projects.test with the linear-expression-terms-91 source (2870 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 92","q":"projects.test with the linear-expression-terms-92 source (2900 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 93","q":"projects.test with the linear-expression-terms-93 source (2930 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 94","q":"projects.test with the linear-expression-terms-94 source (2960 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 95","q":"projects.test with the linear-expression-terms-95 source (2990 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 96","q":"projects.test with the linear-expression-terms-96 source (3020 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 97","q":"projects.test with the linear-expression-terms-97 source (3050 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 98","q":"projects.test with the linear-expression-terms-98 source (3080 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 70","q":"projects.test with the true-chain-terms-70 source (710 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 80","q":"projects.test with the true-chain-terms-80 source (790 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 90","q":"projects.test with the true-chain-terms-90 source (870 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 95","q":"projects.test with the true-chain-terms-95 source (910 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 96","q":"projects.test with the true-chain-terms-96 source (918 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 97","q":"projects.test with the true-chain-terms-97 source (926 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 98","q":"projects.test with the true-chain-terms-98 source (934 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 99","q":"projects.test with the true-chain-terms-99 source (942 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 55","q":"projects.test with the time-chain-terms-55 source (1470 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 60","q":"projects.test with the time-chain-terms-60 source (1590 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 70","q":"projects.test with the time-chain-terms-70 source (1830 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 80","q":"projects.test with the time-chain-terms-80 source (2070 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 90","q":"projects.test with the time-chain-terms-90 source (2310 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 95","q":"projects.test with the time-chain-terms-95 source (2430 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 96","q":"projects.test with the time-chain-terms-96 source (2454 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 97","q":"projects.test with the time-chain-terms-97 source (2478 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 98","q":"projects.test with the time-chain-terms-98 source (2502 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 60","q":"projects.test with the literal-left-terms-60 source (1940 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 90","q":"projects.test with the literal-left-terms-90 source (2840 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 95","q":"projects.test with the literal-left-terms-95 source (2990 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 96","q":"projects.test with the literal-left-terms-96 source (3020 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 97","q":"projects.test with the literal-left-terms-97 source (3050 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 98","q":"projects.test with the literal-left-terms-98 source (3080 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"source bytes 262143","q":"projects.test with the source-bytes-262143 source (262143 bytes)","a":"400 INVALID_ARGUMENT: Request contains an invalid argument.","r":"d","k":"verdict","w":"the Rules API's request envelope refuses this source below the documented 256 KiB deployed-rules maximum; Firenook accepts a source up to 262,144 bytes"},{"t":"source bytes 262144","q":"projects.test with the source-bytes-262144 source (262144 bytes)","a":"400 INVALID_ARGUMENT: Request contains an invalid argument.","r":"d","k":"verdict","w":"the Rules API's request envelope refuses this source below the documented 256 KiB deployed-rules maximum; Firenook accepts a source up to 262,144 bytes"},{"t":"the ruleset every other input changes, which compiles","q":"PUT :securityRules (the ruleset every other input changes, which compiles)","a":"200 compiled","r":"c","k":"answer"},{"t":"one word and nothing else (developer-tools-coverage-v1 invalid-reload)","q":"PUT :securityRules (one word and nothing else (developer-tools-coverage-v1 invalid-reload))","a":"400 L1:1 mismatched input 'broken' expecting {'function', 'import', 'service', 'rules_version'}","r":"c","k":"answer"},{"t":"an empty source","q":"PUT :securityRules (an empty source)","a":"400 L0:0 Rules content empty. Compilation aborted.","r":"c","k":"answer"},{"t":"only blank lines","q":"PUT :securityRules (only blank lines)","a":"400 L3:1 mismatched input '' expecting {'function', 'import', 'service', 'rules_version'}","r":"c","k":"answer"},{"t":"a comment and nothing else","q":"PUT :securityRules (a comment and nothing else)","a":"400 L2:1 mismatched input '' expecting {'function', 'import', 'service', 'rules_version'}","r":"c","k":"answer"},{"t":"a stray word before rules version","q":"PUT :securityRules (a stray word before rules_version)","a":"400 L1:1 Unexpected 'hello'.","r":"c","k":"answer"},{"t":"a stray word after the service block","q":"PUT :securityRules (a stray word after the service block)","a":"400 L13:1 Unexpected 'extra'.","r":"c","k":"answer"},{"t":"a stray word after a function before the service block","q":"PUT :securityRules (a stray word after a function before the service block)","a":"400 L3:1 Unexpected 'hello'.","r":"c","k":"answer"},{"t":"a second service block","q":"PUT :securityRules (a second service block)","a":"400 L15:3 The 'match' body must contain at least one declaration.","r":"c","k":"answer"},{"t":"service cloud.firestor","q":"PUT :securityRules (service cloud.firestor)","a":"200 compiled with 6 warnings","r":"c","k":"answer"},{"t":"service with no name","q":"PUT :securityRules (service with no name)","a":"400 L3:9 Unexpected '/databases'. · L7:5 Unexpected 'match'.","r":"c","k":"answer"},{"t":"a match block before the service block","q":"PUT :securityRules (a match block before the service block)","a":"400 L2:1 mismatched input 'match' expecting {'function', 'import', 'service'}","r":"c","k":"answer"},{"t":"rules_version = 2","q":"PUT :securityRules (rules_version = 2)","a":"400 L1:17 mismatched input '2' expecting STRING","r":"c","k":"answer"},{"t":"rules_version '2'","q":"PUT :securityRules (rules_version '2')","a":"400 L1:15 missing '=' at ''2''","r":"c","k":"answer"},{"t":"rules_version: '2'","q":"PUT :securityRules (rules_version: '2')","a":"400 L1:14 mismatched input ':' expecting '='","r":"c","k":"answer"},{"t":"rules_version = ;","q":"PUT :securityRules (rules_version = ;)","a":"400 L1:17 missing STRING at ';'","r":"c","k":"answer"},{"t":"rules_version = '2; (an unterminated string)","q":"PUT :securityRules (rules_version = '2; (an unterminated string))","a":"400 L1:17 mismatched input ''2;' expecting STRING","r":"c","k":"answer"},{"t":"rules_version after the service block","q":"PUT :securityRules (rules_version after the service block)","a":"400 L12:1 Unexpected 'rules_version'.","r":"c","k":"answer"},{"t":"no { after the service name","q":"PUT :securityRules (no { after the service name)","a":"400 L3:3 Unexpected 'match'. · L7:5 Unexpected 'match'.","r":"c","k":"answer"},{"t":"a stray word first in the service block","q":"PUT :securityRules (a stray word first in the service block)","a":"400 L3:3 Unexpected 'hello'. · L8:5 Unexpected 'match'.","r":"c","k":"answer"},{"t":"an allow in the service block after its match","q":"PUT :securityRules (an allow in the service block after its match)","a":"400 L12:3 Unexpected 'allow'.","r":"c","k":"answer"},{"t":"no { after a match path","q":"PUT :securityRules (no { after a match path)","a":"400 L7:11 Missing 'match' keyword before path. · L8:7 Unexpected 'allow'. · L8:7 mismatched input 'allow' expecting {'{', '/', PATH_SEGMENT…","r":"c","k":"answer"},{"t":"no { before a function body","q":"PUT :securityRules (no { before a function body)","a":"400 L5:7 Unexpected 'return'. · L12:1 Unexpected '}'.","r":"c","k":"answer"},{"t":"no } after a function body","q":"PUT :securityRules (no } after a function body)","a":"400 L6:5 missing '}' at 'match'","r":"c","k":"answer"},{"t":"no } closing the inner match","q":"PUT :securityRules (no } closing the inner match)","a":"400 L12:1 Unexpected ''. · L12:1 missing '}' at ''","r":"c","k":"answer"},{"t":"no } closing the service block","q":"PUT :securityRules (no } closing the service block)","a":"400 L12:1 Unexpected ''. · L12:1 missing '}' at ''","r":"c","k":"answer"},{"t":"no ; after an allow followed by another","q":"PUT :securityRules (no ; after an allow followed by another)","a":"200 compiled","r":"c","k":"answer"},{"t":"no ; after the last allow of a block","q":"PUT :securityRules (no ; after the last allow of a block)","a":"200 compiled","r":"c","k":"answer"},{"t":";; after an allow","q":"PUT :securityRules (;; after an allow)","a":"400 L8:33 Unexpected ';'.","r":"c","k":"answer"},{"t":"a ; after a match block","q":"PUT :securityRules (a ; after a match block)","a":"400 L10:6 Unexpected ';'.","r":"c","k":"answer"},{"t":"no ; after a let","q":"PUT :securityRules (no ; after a let)","a":"400 L6:7 missing ';' at 'return'","r":"c","k":"answer"},{"t":"if (signedIn();","q":"PUT :securityRules (if (signedIn();)","a":"400 L8:33 Unexpected ';'.","r":"c","k":"answer"},{"t":"if signedIn());","q":"PUT :securityRules (if signedIn());)","a":"400 L8:32 Unexpected ')'.","r":"c","k":"answer"},{"t":"if signedIn(;","q":"PUT :securityRules (if signedIn(;)","a":"400 L8:31 Unexpected ';'.","r":"c","k":"answer"},{"t":"function signedIn( {","q":"PUT :securityRules (function signedIn( {)","a":"400 L4:24 Unexpected '{'. · L12:1 Unexpected '}'.","r":"c","k":"answer"},{"t":"function signedIn {","q":"PUT :securityRules (function signedIn {)","a":"400 L4:23 Missing 'function' signature","r":"c","k":"answer"},{"t":"== 'public; (single quote)","q":"PUT :securityRules (== 'public; (single quote))","a":"400 L9:7 Missing a closing '","r":"c","k":"answer"},{"t":"== \"public; (double quote)","q":"PUT :securityRules (== \"public; (double quote))","a":"400 L9:7 Missing a closing \"","r":"c","k":"answer"},{"t":"a line break inside a string","q":"PUT :securityRules (a line break inside a string)","a":"400 L9:1 Missing a closing ' · L9:1 Unexpected 'lic'.","r":"c","k":"answer"},{"t":"== 'public\\'; (the closing quote escaped)","q":"PUT :securityRules (== 'public\\'; (the closing quote escaped))","a":"400 L9:7 Missing a closing '","r":"c","k":"answer"},{"t":"match items/{item}","q":"PUT :securityRules (match items/{item})","a":"400 L7:11 Unexpected 'items'. · L7:16 Missing 'match' keyword before path. · L8:7 missing '}' at 'allow' · L12:1 Unexpected '}'.","r":"c","k":"answer"},{"t":"match /items/{item=*}","q":"PUT :securityRules (match /items/{item=*})","a":"200 compiled","r":"c","k":"answer"},{"t":"match /items/{}","q":"PUT :securityRules (match /items/{})","a":"400 L7:17 Forward slash '/' found where identifier or binding expected. · L7:19 The 'match' body must contain at least one declaration. · L…","r":"c","k":"answer"},{"t":"match /items//{item}","q":"PUT :securityRules (match /items//{item})","a":"400 L7:11 Missing 'match' keyword before path. · L8:7 Unexpected 'allow'. · L8:7 mismatched input 'allow' expecting {'{', '/', PATH_SEGMENT…","r":"c","k":"answer"},{"t":"match /items/{item}/","q":"PUT :securityRules (match /items/{item}/)","a":"400 L7:24 Forward slash '/' found where identifier or binding expected.","r":"c","k":"answer"},{"t":"match /items/$(item)","q":"PUT :securityRules (match /items/$(item))","a":"400 L7:11 Missing 'match' keyword before path. · L7:17 Forward slash '/' found where identifier or binding expected. · L7:18 Unexpected '$'…","r":"c","k":"answer"},{"t":"match with no path","q":"PUT :securityRules (match with no path)","a":"400 L7:11 Unexpected '{'. · L12:1 Unexpected '}'.","r":"c","k":"answer"},{"t":"allow read: if ;","q":"PUT :securityRules (allow read: if ;)","a":"400 L8:22 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"allow read: if, then the next allow","q":"PUT :securityRules (allow read: if, then the next allow)","a":"400 L9:7 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"if request.auth !=;","q":"PUT :securityRules (if request.auth !=;)","a":"400 L8:37 mismatched input ';' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_…","r":"c","k":"answer"},{"t":"if request.auth != then the closing }","q":"PUT :securityRules (if request.auth != then the closing })","a":"400 L10:5 mismatched input '}' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_…","r":"c","k":"answer"},{"t":"if !;","q":"PUT :securityRules (if !;)","a":"400 L8:23 mismatched input ';' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_…","r":"c","k":"answer"},{"t":"if (;","q":"PUT :securityRules (if (;)","a":"400 L8:23 Unexpected ';'.","r":"c","k":"answer"},{"t":"request.auth.uid = resource.data.owner","q":"PUT :securityRules (request.auth.uid = resource.data.owner)","a":"400 L9:40 Unexpected '='.","r":"c","k":"answer"},{"t":"request.auth.uid === resource.data.owner","q":"PUT :securityRules (request.auth.uid === resource.data.owner)","a":"400 L9:42 Unexpected '='.","r":"c","k":"answer"},{"t":"signedIn() & true","q":"PUT :securityRules (signedIn() & true)","a":"400 L8:35 Unexpected 'true'.","r":"c","k":"answer"},{"t":"a lone & before the ;","q":"PUT :securityRules (a lone & before the ;)","a":"400 L8:34 token recognition error at: '&;'","r":"c","k":"answer"},{"t":"signedIn() | true","q":"PUT :securityRules (signedIn() | true)","a":"400 L8:35 Unexpected 'true'.","r":"c","k":"answer"},{"t":"a ~ before the condition","q":"PUT :securityRules (a ~ before the condition)","a":"400 L8:22 token recognition error at: '~'","r":"c","k":"answer"},{"t":"allow read: signedIn();","q":"PUT :securityRules (allow read: signedIn();)","a":"400 L8:19 Missing 'if' before conditional expression.","r":"c","k":"answer"},{"t":"allow read: ;","q":"PUT :securityRules (allow read: ;)","a":"400 L8:19 Unexpected ';'.","r":"c","k":"answer"},{"t":"allow read if signedIn();","q":"PUT :securityRules (allow read if signedIn();)","a":"400 L8:18 Missing ':' before 'if' condition.","r":"c","k":"answer"},{"t":"allow get list:","q":"PUT :securityRules (allow get list:)","a":"400 L8:17 Unexpected 'list'.","r":"c","k":"answer"},{"t":"allow reads:","q":"PUT :securityRules (allow reads:)","a":"200 compiled with 2 warnings","r":"c","k":"answer"},{"t":"allow: if","q":"PUT :securityRules (allow: if)","a":"400 L8:12 Expected at least one 'operation' after 'allow'. · L8:12 Unexpected ':'.","r":"c","k":"answer"},{"t":"== resource.data.;","q":"PUT :securityRules (== resource.data.;)","a":"400 L9:57 Unexpected ';'.","r":"c","k":"answer"},{"t":"an @ in a condition","q":"PUT :securityRules (an @ in a condition)","a":"400 L8:22 Missing conditional expression after 'if'. · L8:22 Unexpected '@'.","r":"c","k":"answer"},{"t":"a # comment in a condition","q":"PUT :securityRules (a # comment in a condition)","a":"400 L8:36 Unexpected 'signed'.","r":"c","k":"answer"},{"t":"is text","q":"PUT :securityRules (is text)","a":"400 L8:48 An unsupported type identifier was used with the 'is' operator. Received text. Expected one of bool,bytes,constraint,duration,flo…","r":"c","k":"answer"},{"t":"function () {","q":"PUT :securityRules (function () {)","a":"400 L4:14 Missing 'function' id","r":"c","k":"answer"},{"t":"function signedIn(a b)","q":"PUT :securityRules (function signedIn(a b))","a":"400 L4:25 Unexpected 'b'. · L12:1 Unexpected '}'.","r":"c","k":"answer"},{"t":"a body with no return","q":"PUT :securityRules (a body with no return)","a":"400 L5:7 Unexpected 'request'. · L12:1 Unexpected '}'.","r":"c","k":"answer"},{"t":"return;","q":"PUT :securityRules (return;)","a":"400 L5:13 mismatched input ';' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_…","r":"c","k":"answer"},{"t":"two returns","q":"PUT :securityRules (two returns)","a":"400 L6:7 mismatched input 'return' expecting '}' · L13:1 Unexpected '}'.","r":"c","k":"answer"},{"t":"function signedIn() {}","q":"PUT :securityRules (function signedIn() {})","a":"400 L4:26 Missing 'function' body","r":"c","k":"answer"},{"t":"an if statement in a body","q":"PUT :securityRules (an if statement in a body)","a":"400 L5:7 Unexpected 'if'. · L6:7 Unexpected 'return'. · L8:5 Unexpected 'match'.","r":"c","k":"answer"},{"t":"let = request.auth;","q":"PUT :securityRules (let = request.auth;)","a":"400 L5:11 Unexpected '='. · L5:20 mismatched input '.' expecting '='","r":"c","k":"answer"},{"t":"let auth request.auth;","q":"PUT :securityRules (let auth request.auth;)","a":"400 L5:16 missing '=' at 'request'","r":"c","k":"answer"},{"t":"a let and no return","q":"PUT :securityRules (a let and no return)","a":"400 L6:5 Unexpected '}'. · L6:5 mismatched input '}' expecting {'&&', '.', '==', '>', '>=', '[', '<', '<=', '-', '%', '!=', '||', '+', ';',…","r":"c","k":"answer"},{"t":"a word where return belongs after a let","q":"PUT :securityRules (a word where return belongs after a let)","a":"400 L6:7 Unexpected 'retrun'. · L7:5 mismatched input '}' expecting {'&&', '.', '==', '>', '>=', '[', '<', '<=', '-', '%', '!=', '||', '+',…","r":"c","k":"answer"},{"t":"a let in a match block","q":"PUT :securityRules (a let in a match block)","a":"400 L7:11 Missing 'match' keyword before path. · L8:7 Unexpected 'let'. · L8:7 mismatched input 'let' expecting {'{', '/', PATH_SEGMENT} ·…","r":"c","k":"answer"},{"t":"servce cloud.firestore","q":"PUT :securityRules (servce cloud.firestore)","a":"400 L2:1 mismatched input 'servce' expecting {'function', 'import', 'service'}","r":"c","k":"answer"},{"t":"rules verison","q":"PUT :securityRules (rules_verison)","a":"400 L1:1 mismatched input 'rules_verison' expecting {'function', 'import', 'service', 'rules_version'}","r":"c","k":"answer"},{"t":"fucntion signedIn()","q":"PUT :securityRules (fucntion signedIn())","a":"400 L3:9 Missing 'match' keyword before path. · L4:5 Unexpected 'fucntion'. · L4:5 mismatched input 'fucntion' expecting {'{', '/', PATH_SE…","r":"c","k":"answer"},{"t":"retrun request.auth","q":"PUT :securityRules (retrun request.auth)","a":"400 L5:7 Unexpected 'retrun'. · L12:1 Unexpected '}'.","r":"c","k":"answer"},{"t":"alow read","q":"PUT :securityRules (alow read)","a":"400 L7:11 Missing 'match' keyword before path. · L8:7 Unexpected 'alow'. · L8:7 mismatched input 'alow' expecting {'{', '/', PATH_SEGMENT}…","r":"c","k":"answer"},{"t":"the source ends after rules version","q":"PUT :securityRules (the source ends after rules_version)","a":"400 L1:21 mismatched input '' expecting {'function', 'import', 'service'}","r":"c","k":"answer"},{"t":"the source ends after service","q":"PUT :securityRules (the source ends after service)","a":"400 L2:8 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends after the service name","q":"PUT :securityRules (the source ends after the service name)","a":"400 L2:24 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends inside the service block","q":"PUT :securityRules (the source ends inside the service block)","a":"400 L2:26 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends after match","q":"PUT :securityRules (the source ends after match)","a":"400 L3:8 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends after a match path","q":"PUT :securityRules (the source ends after a match path)","a":"400 L3:9 Missing 'match' keyword before path. · L3:40 Unexpected ''. · L3:40 mismatched input '' expecting {'{', '/', PATH_SEGMEN…","r":"c","k":"answer"},{"t":"the source ends inside a match block","q":"PUT :securityRules (the source ends inside a match block)","a":"400 L7:11 Missing 'match' keyword before path. · L7:26 Unexpected ''. · L7:26 mismatched input '' expecting {'{', '/', PATH_SEGME…","r":"c","k":"answer"},{"t":"the source ends inside a parameter list","q":"PUT :securityRules (the source ends inside a parameter list)","a":"400 L4:23 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends inside a function body","q":"PUT :securityRules (the source ends inside a function body)","a":"400 L4:26 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends after return","q":"PUT :securityRules (the source ends after return)","a":"400 L5:13 mismatched input '' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER,…","r":"c","k":"answer"},{"t":"the source ends after allow","q":"PUT :securityRules (the source ends after allow)","a":"400 L9:12 Expected at least one 'operation' after 'allow'. · L9:12 Unexpected ''. · L9:12 mismatched input '' expecting '}'","r":"c","k":"answer"},{"t":"the source ends after an allow method","q":"PUT :securityRules (the source ends after an allow method)","a":"400 L8:17 Unexpected ''. · L8:17 mismatched input '' expecting {':', ',', '}', ';', '/', 'allow', 'function', 'if', 'match', PATH…","r":"c","k":"answer"},{"t":"the source ends after if","q":"PUT :securityRules (the source ends after if)","a":"400 L8:21 Missing conditional expression after 'if'. · L8:21 Unexpected ''. · L8:21 mismatched input '' expecting {'}', ';', '/',…","r":"c","k":"answer"},{"t":"the source ends inside a condition","q":"PUT :securityRules (the source ends inside a condition)","a":"400 L9:42 mismatched input '' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER,…","r":"c","k":"answer"},{"t":"the source ends after a condition","q":"PUT :securityRules (the source ends after a condition)","a":"400 L8:32 Unexpected ''. · L8:32 mismatched input '' expecting {'&&', '.', '==', '>', '>=', '[', '<', '<=', '-', '%', '!=', '||',…","r":"c","k":"answer"},{"t":"the source ends inside call arguments","q":"PUT :securityRules (the source ends inside call arguments)","a":"400 L8:31 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends after a complete allow","q":"PUT :securityRules (the source ends after a complete allow)","a":"400 L8:33 Unexpected ''. · L8:33 mismatched input '' expecting '}'","r":"c","k":"answer"},{"t":"the source ends after a nested match block","q":"PUT :securityRules (the source ends after a nested match block)","a":"400 L10:6 Unexpected ''. · L10:6 mismatched input '' expecting '}'","r":"c","k":"answer"},{"t":"the source ends inside a string","q":"PUT :securityRules (the source ends inside a string)","a":"400 L9:49 Missing a closing ' · L9:49 Unexpected ''. · L9:49 mismatched input '' expecting {'&&', '.', '==', '>', '>=', '[', '<',…","r":"c","k":"answer"},{"t":"the source ends inside a block comment","q":"PUT :securityRules (the source ends inside a block comment)","a":"400 L13:1 Unexpected '/*'.","r":"c","k":"answer"},{"t":"two allows with no condition","q":"PUT :securityRules (two allows with no condition)","a":"400 L8:22 Missing conditional expression after 'if'. · L9:23 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"a missing ; and a missing final }","q":"PUT :securityRules (a missing ; and a missing final })","a":"400 L12:1 Unexpected ''. · L12:1 missing '}' at ''","r":"c","k":"answer"},{"t":"alow and an unterminated string","q":"PUT :securityRules (alow and an unterminated string)","a":"400 L7:11 Missing 'match' keyword before path. · L8:7 Unexpected 'alow'. · L8:7 mismatched input 'alow' expecting {'{', '/', PATH_SEGMENT}…","r":"c","k":"answer"},{"t":"allow reads and a missing if","q":"PUT :securityRules (allow reads and a missing if)","a":"400 L9:20 Missing 'if' before conditional expression.","r":"c","k":"answer"},{"t":"a package name as a parameter and a cut condition","q":"PUT :securityRules (a package name as a parameter and a cut condition)","a":"400 L9:42 mismatched input ';' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_…","r":"c","k":"answer"},{"t":"Windows line endings","q":"PUT :securityRules (Windows line endings)","a":"400 L8:22 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"non-ASCII text before the mistake on its line","q":"PUT :securityRules (non-ASCII text before the mistake on its line)","a":"400 L8:31 mismatched input ';' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_…","r":"c","k":"answer"},{"t":"a tab before the mistake","q":"PUT :securityRules (a tab before the mistake)","a":"400 L8:17 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"rules-v2 production-parse-errors unexpected-token, unchanged","q":"PUT :securityRules (rules-v2 production-parse-errors unexpected-token, unchanged)","a":"400 L5:21 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"rules-v2 production-parse-errors unclosed-block, unchanged","q":"PUT :securityRules (rules-v2 production-parse-errors unclosed-block, unchanged)","a":"400 L3:9 Missing 'match' keyword before path. · L4:1 Unexpected ''. · L4:1 mismatched input '' expecting {'{', '/', PATH_SEGMENT}","r":"c","k":"answer"},{"t":"rules-v2 production-parse-errors duplicate-let, unchanged","q":"PUT :securityRules (rules-v2 production-parse-errors duplicate-let, unchanged)","a":"400 L5:34 Unused variable: value. · L5:49 The identifier [value] is already bound in the current scope.","r":"c","k":"answer"},{"t":"rules-v2 production-parse-errors recursive-function, unchanged","q":"PUT :securityRules (rules-v2 production-parse-errors recursive-function, unchanged)","a":"400 L5:16 Recursive call is not allowed.","r":"c","k":"answer"},{"t":"rules-v2 production-parse-errors invalid-recursive-wildcard, unchanged","q":"PUT :securityRules (rules-v2 production-parse-errors invalid-recursive-wildcard, unchanged)","a":"400 L4:22 Invalid glob match expression. Only one glob match is permitted in a match declaration path.","r":"c","k":"answer"},{"t":"rules_version = '1'","q":"PUT :securityRules (rules_version = '1')","a":"200 compiled with 1 warning","r":"u"},{"t":"owner seed","q":"PATCH /v1/projects/{project}/databases/(default)/documents/items/one (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"constant","q":"reload rules, read twice, GET :ruleCoverage: allow get: if true;","a":"read 200 · no report (constant rules)","r":"c","k":"answer"},{"t":"list and map","q":"reload rules, read twice, GET :ruleCoverage: allow get: if [1, 2].size() == 2 && {'ok': true}.ok;","a":"read 200 · coverage report with 6 expressions","r":"c","k":"answer"},{"t":"empty containers","q":"reload rules, read twice, GET :ruleCoverage: allow get: if [].size() == 0 && {}.size() == 0;","a":"read 200 · coverage report with 7 expressions","r":"c","k":"answer"},{"t":"slice","q":"reload rules, read twice, GET :ruleCoverage: allow get: if [1, 2, 3][1:2] == [2];","a":"read 200 · coverage report with 4 expressions","r":"c","k":"answer"},{"t":"method arguments","q":"reload rules, read twice, GET :ruleCoverage: allow get: if 'hello'.matches('h.*');","a":"read 200 · coverage report with 1 expression","r":"c","k":"answer"},{"t":"grouped literal","q":"reload rules, read twice, GET :ruleCoverage: allow get: if ('hello').size() == 5;","a":"read 200 · coverage report with 2 expressions","r":"c","k":"answer"},{"t":"constant function","q":"reload rules, read twice, GET :ruleCoverage: allow get: if accept();","a":"read 200 · coverage report with 1 expression","r":"c","k":"answer"},{"t":"duration","q":"reload rules, read twice, GET :ruleCoverage: allow get: if duration.value(1, 's') == duration.value(1000, 'ms');","a":"read 200 · coverage report with 3 expressions","r":"c","k":"answer"},{"t":"set","q":"reload rules, read twice, GET :ruleCoverage: allow get: if [1, 2].toSet().hasAll([1]);","a":"read 200 · coverage report with 4 expressions","r":"c","k":"answer"},{"t":"map diff","q":"reload rules, read twice, GET :ruleCoverage: allow get: if {'x': 1}.diff({'x': 2}).changedKeys().hasOnly(['x']);","a":"read 200 · coverage report with 6 expressions","r":"c","k":"answer"},{"t":"map diff statuses","q":"reload rules, read twice, GET :ruleCoverage: allow get: if {'same': 1, 'removed': 1, 'changed': 1}.diff({'same': 1, 'added': 1, 'changed':…","a":"read 200 · coverage report with 6 expressions","r":"c","k":"answer"},{"t":"map diff direction size","q":"reload rules, read twice, GET :ruleCoverage: allow get: if check();","a":"read 200 · coverage report with 19 expressions","r":"c","k":"answer"},{"t":"bytes","q":"reload rules, read twice, GET :ruleCoverage: allow get: if hashing.sha256('hello'.toUtf8()).size() == 32;","a":"read 200 · coverage report with 4 expressions","r":"c","k":"answer"},{"t":"timestamp","q":"reload rules, read twice, GET :ruleCoverage: allow get: if timestamp.date(2020, 1, 2).year() == 2020;","a":"read 200 · coverage report with 3 expressions","r":"c","k":"answer"},{"t":"request","q":"reload rules, read twice, GET :ruleCoverage: allow get: if request.auth == null && request.method == \"get\";","a":"read 200 · coverage report with 7 expressions","r":"c","k":"answer"},{"t":"invalid reload","q":"PUT /emulator/v1/projects/{project}:securityRules (source \"broken\")","a":"400 INVALID_ARGUMENT: Error compiling rules: L1:1 mismatched input 'broken' expecting {'function', 'import', 'service', 'rules_version'}","r":"c","k":"answer"},{"t":"coverage after the rejected reload","q":"GET :ruleCoverage after the rejected reload","a":"coverage of the last valid rules, 7 expressions","r":"c","k":"answer"},{"t":"namespace name as a function parameter","q":"PUT :securityRules with function accept(duration)","a":"400 INVALID_ARGUMENT: Error compiling rules: L4:19 duration is a package and cannot be used as variable name.","r":"c","k":"answer"},{"t":"short circuit","q":"reload rules, read twice, GET :ruleCoverage: allow get: if false && resource.data.missing;","a":"read 403 · coverage report with 4 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"field equality","q":"reload rules, read twice, GET :ruleCoverage: allow get: if resource.data.visible == true;","a":"read 200 · coverage report with 4 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"missing field","q":"reload rules, read twice, GET :ruleCoverage: allow get: if resource.data.missing == true;","a":"read 403 · coverage report with 4 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations); an error value's cause text is Firenook's own message (DESIGN.md, Live bounded coverage observations)"},{"t":"function","q":"reload rules, read twice, GET :ruleCoverage: allow get: if accept(resource.data.visible);","a":"read 200 · coverage report with 8 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"unicode crlf","q":"reload rules, read twice, GET :ruleCoverage: allow get: if '中文🚀' == '中文🚀' && resource.data.visible;","a":"read 200 · coverage report with 5 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"parentheses","q":"reload rules, read twice, GET :ruleCoverage: allow get: if (resource.data.visible == true) || false;","a":"read 200 · coverage report with 5 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"unary","q":"reload rules, read twice, GET :ruleCoverage: allow get: if !resource.data.visible;","a":"read 403 · coverage report with 4 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"index","q":"reload rules, read twice, GET :ruleCoverage: allow get: if resource.data['visible'];","a":"read 200 · coverage report with 3 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"simple function","q":"reload rules, read twice, GET :ruleCoverage: allow get: if accept(resource.data.visible);","a":"read 200 · coverage report with 5 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"path interpolation","q":"reload rules, read twice, GET :ruleCoverage: allow get: if exists(/databases/$(database)/documents/items/one);","a":"read 200 · coverage report with 3 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"type check","q":"reload rules, read twice, GET :ruleCoverage: allow get: if resource.data.visible is bool;","a":"read 200 · coverage report with 4 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"nested grouping","q":"reload rules, read twice, GET :ruleCoverage: allow get: if ((resource.data.visible));","a":"read 200 · coverage report with 3 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"get typed","q":"GET /values/typed","a":"200 {name, fields, createTime, updateTime} · 1 evaluation message","r":"c","k":"answer"},{"t":"get authenticated","q":"GET /values/typed (signed in)","a":"200 {name, fields, createTime, updateTime} · 1 evaluation message","r":"c","k":"answer"},{"t":"get mask","q":"GET /values/typed?mask.fieldPaths=yes&mask.fieldPaths=text","a":"200 {name, fields, createTime, updateTime} · 1 evaluation message","r":"c","k":"answer"},{"t":"batch get mask","q":"POST :batchGet","a":"200 [1 item] · 1 evaluation message","r":"c","k":"answer"},{"t":"begin read transaction","q":"POST :beginTransaction","a":"200 {transaction} · 0 evaluation messages","r":"c","k":"answer"},{"t":"transaction get","q":"POST :batchGet","a":"200 [1 item] · 1 evaluation message","r":"c","k":"answer"},{"t":"rollback","q":"POST :rollback","a":"200 {} · 0 evaluation messages","r":"c","k":"answer"},{"t":"begin write transaction","q":"POST :beginTransaction","a":"200 {transaction} · 0 evaluation messages","r":"c","k":"answer"},{"t":"write transaction get","q":"POST :batchGet","a":"200 [1 item] · 1 evaluation message","r":"c","k":"answer"},{"t":"write rollback","q":"POST :rollback","a":"200 {} · 0 evaluation messages","r":"c","k":"answer"},{"t":"delete","q":"DELETE /values/typed","a":"200 {} · 1 evaluation message","r":"c","k":"answer"},{"t":"initial history","q":"connect to the requests websocket","a":"empty history","r":"c","k":"answer"},{"t":"evaluation request 1","q":"rules evaluation event 1","a":"allow create /databases/(default)/documents/values/typed","r":"c","k":"answer"},{"t":"evaluation request 5","q":"rules evaluation event 5","a":"allow list /databases/(default)/documents/values/*","r":"c","k":"answer"},{"t":"evaluation request 6","q":"rules evaluation event 6","a":"allow list /databases/(default)/documents/values/*","r":"c","k":"answer"},{"t":"evaluation request 7","q":"rules evaluation event 7","a":"deny list /databases/(default)/documents/**/values/*","r":"c","k":"answer"},{"t":"evaluation request 8","q":"rules evaluation event 8","a":"deny list /databases/(default)/documents/parents/p/values/*","r":"c","k":"answer"},{"t":"evaluation request 9","q":"rules evaluation event 9","a":"deny list /databases/(default)/documents/parents/p/**/values/*","r":"c","k":"answer"},{"t":"evaluation request 25","q":"rules evaluation event 25","a":"allow get /databases/(default)/documents/values/missing","r":"c","k":"answer"},{"t":"create typed","q":"PATCH /values/typed","a":"200 {name, fields, createTime, updateTime} · 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"query","q":"POST :runQuery","a":"200 [1 item] · 1 evaluation message","r":"d","k":"answer","w":"a runQuery stream ends without \"done\": true, as production's does (COMPATIBILITY.md)"},{"t":"query unbounded","q":"POST :runQuery","a":"200 [1 item] · 1 evaluation message","r":"d","k":"answer","w":"a runQuery stream ends without \"done\": true, as production's does (COMPATIBILITY.md)"},{"t":"query group","q":"POST :runQuery","a":"403 PERMISSION_DENIED: No matching allow statements · 1 evaluation message","r":"d","k":"error","w":"a refusal's message is production's `Missing or insufficient permissions.` followed by the official emulator's text on the next line (COMPATIBILITY.md)"},{"t":"query nested","q":"POST /parents/p:runQuery","a":"403 PERMISSION_DENIED: No matching allow statements · 1 evaluation message","r":"d","k":"error","w":"a refusal's message is production's `Missing or insufficient permissions.` followed by the official emulator's text on the next line (COMPATIBILITY.md)"},{"t":"query nested group","q":"POST /parents/p:runQuery","a":"403 PERMISSION_DENIED: No matching allow statements · 1 evaluation message","r":"d","k":"error","w":"a refusal's message is production's `Missing or insufficient permissions.` followed by the official emulator's text on the next line (COMPATIBILITY.md)"},{"t":"patch mask","q":"PATCH /values/typed?updateMask.fieldPaths=text","a":"200 {name, fields, createTime, updateTime} · 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"patch quoted mask","q":"PATCH /values/typed?updateMask.fieldPaths=%60a.b%60&updateMask.fieldPaths=nested.active","a":"200 {name, fields, createTime, updateTime} · 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"commit transform","q":"POST :commit","a":"200 {writeResults, commitTime} · 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"commit replacement transform","q":"POST :commit","a":"200 {writeResults, commitTime} · 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"commit empty mask","q":"POST :commit","a":"200 {writeResults, commitTime} · 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"get missing","q":"GET /values/missing","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/values/missing) not found. · 1 evaluation message","r":"d","k":"error","w":"the REST error message is Firenook's own words for the same status and code (COMPATIBILITY.md: most error messages are Firenook's own words)"},{"t":"evaluation request 2","q":"rules evaluation event 2","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 3","q":"rules evaluation event 3","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 4","q":"rules evaluation event 4","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 10","q":"rules evaluation event 10","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 11","q":"rules evaluation event 11","a":"allow create /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 12","q":"rules evaluation event 12","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context); a write's granular outcomes are its own evaluation's; the official emulator's update event also carries its preliminary check's outcome (DESIGN.md, Allow-decision instrumentation: no duplicated entries imitating the jar's shared mutable history)"},{"t":"evaluation request 13","q":"rules evaluation event 13","a":"allow create /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 14","q":"rules evaluation event 14","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context); a write's granular outcomes are its own evaluation's; the official emulator's update event also carries its preliminary check's outcome (DESIGN.md, Allow-decision instrumentation: no duplicated entries imitating the jar's shared mutable history)"},{"t":"evaluation request 15","q":"rules evaluation event 15","a":"allow create /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 16","q":"rules evaluation event 16","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context); a write's granular outcomes are its own evaluation's; the official emulator's update event also carries its preliminary check's outcome (DESIGN.md, Allow-decision instrumentation: no duplicated entries imitating the jar's shared mutable history)"},{"t":"evaluation request 17","q":"rules evaluation event 17","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 18","q":"rules evaluation event 18","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 19","q":"rules evaluation event 19","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 20","q":"rules evaluation event 20","a":"allow create /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 21","q":"rules evaluation event 21","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context); a write's granular outcomes are its own evaluation's; the official emulator's update event also carries its preliminary check's outcome (DESIGN.md, Allow-decision instrumentation: no duplicated entries imitating the jar's shared mutable history)"},{"t":"evaluation request 22","q":"rules evaluation event 22","a":"allow create /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 23","q":"rules evaluation event 23","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context); a write's granular outcomes are its own evaluation's; the official emulator's update event also carries its preliminary check's outcome (DESIGN.md, Allow-decision instrumentation: no duplicated entries imitating the jar's shared mutable history)"},{"t":"evaluation request 24","q":"rules evaluation event 24","a":"allow delete /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"create typed","q":"PATCH /values/typed","a":"200 {name, fields, createTime, updateTime} · 2 evaluation messages","r":"c","k":"status"},{"t":"get typed","q":"GET /values/typed","a":"200 {name, fields, createTime, updateTime} · 1 evaluation message","r":"c","k":"answer"},{"t":"get authenticated","q":"GET /values/typed (signed in)","a":"200 {name, fields, createTime, updateTime} · 1 evaluation message","r":"c","k":"answer"},{"t":"delete","q":"DELETE /values/typed","a":"200 {} · 1 evaluation message","r":"c","k":"answer"},{"t":"initial history","q":"connect to the requests websocket","a":"empty history","r":"c","k":"answer"},{"t":"evaluation request 1","q":"rules evaluation event 1","a":"allow create /databases/(default)/documents/values/typed","r":"c","k":"answer"},{"t":"evaluation request 5","q":"rules evaluation event 5","a":"allow list /databases/(default)/documents/values/*","r":"c","k":"answer"},{"t":"evaluation request 7","q":"rules evaluation event 7","a":"allow get /databases/(default)/documents/values/missing","r":"c","k":"answer"},{"t":"query","q":"POST :runQuery","a":"200 [1 item] · 1 evaluation message","r":"d","k":"answer","w":"a runQuery stream ends without \"done\": true, as production's does (COMPATIBILITY.md)"},{"t":"get missing","q":"GET /values/missing","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/values/missing) not found. · 1 evaluation message","r":"d","k":"error","w":"the REST error message is Firenook's own words for the same status and code (COMPATIBILITY.md: most error messages are Firenook's own words)"},{"t":"evaluation request 2","q":"rules evaluation event 2","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 3","q":"rules evaluation event 3","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 4","q":"rules evaluation event 4","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 6","q":"rules evaluation event 6","a":"allow delete /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as absent","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as absent","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as owner","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as owner","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as owner","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as user","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as user","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as user-lowercase-scheme","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as user-lowercase-scheme","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as issued-at-zero","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as issued-at-zero","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as issued-tomorrow","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as issued-tomorrow","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as other-project","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as other-project","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as other-audience","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as other-audience","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as sub-only","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as sub-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as no-alg","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as no-alg","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as signed","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as signed","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as padded-base64","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as padded-base64","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as absent","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as absent","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as owner","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as owner","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as owner","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as user","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as user","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as user-lowercase-scheme","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as user-lowercase-scheme","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as issued-at-zero","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as issued-at-zero","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as issued-tomorrow","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as issued-tomorrow","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as other-project","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as other-project","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as other-audience","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as other-audience","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as sub-only","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as sub-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as no-alg","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as no-alg","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as signed","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as signed","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as padded-base64","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as padded-base64","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as absent","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as absent","a":"403 PERMISSION_DENIED: Null value error. for 'get' @ L8, Null value error. for 'get' @ L8","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as absent","a":"403 PERMISSION_DENIED: Null value error. for 'get' @ L9, Null value error. for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as user","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as user-lowercase-scheme","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as issued-at-zero","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as issued-tomorrow","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as other-project","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as other-audience","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as sub-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as sub-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as user-id-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as user-id-only","a":"403 PERMISSION_DENIED: Property sub is undefined on object. for 'get' @ L8, Property sub is undefined on object. for 'get' @ L8","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as empty-claims","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as empty-claims","a":"403 PERMISSION_DENIED: Property sub is undefined on object. for 'get' @ L8, Property sub is undefined on object. for 'get' @ L8","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as empty-claims","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as numeric-sub","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L8","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as numeric-sub","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as no-alg","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as no-alg","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as signed","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as padded-base64","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as padded-base64","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (rules, absent)","q":"ListCollectionIds as absent (with rules)","a":"PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"error"},{"t":"listCollectionIds over REST (rules, absent)","q":"POST :listCollectionIds as absent (with rules)","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (rules, user)","q":"ListCollectionIds as user (with rules)","a":"PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"error"},{"t":"listCollectionIds over REST (rules, user)","q":"POST :listCollectionIds as user (with rules)","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (rules, owner)","q":"ListCollectionIds as owner (with rules)","a":"OK","r":"c","k":"status"},{"t":"listCollectionIds over REST (rules, owner)","q":"POST :listCollectionIds as owner (with rules)","a":"200","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (open, absent)","q":"ListCollectionIds as absent (no rules)","a":"PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"error"},{"t":"listCollectionIds over REST (open, absent)","q":"POST :listCollectionIds as absent (no rules)","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (open, user)","q":"ListCollectionIds as user (no rules)","a":"PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"error"},{"t":"listCollectionIds over REST (open, user)","q":"POST :listCollectionIds as user (no rules)","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (open, owner)","q":"ListCollectionIds as owner (no rules)","a":"OK","r":"c","k":"status"},{"t":"listCollectionIds over REST (open, owner)","q":"POST :listCollectionIds as owner (no rules)","a":"200","r":"c","k":"status"},{"t":"pipeline as owner","q":"Enterprise ExecutePipeline as owner","a":"OK","r":"c","k":"status"},{"t":"query as owner","q":"Enterprise RunQuery as owner","a":"OK","r":"c","k":"status"},{"t":"json","q":"PUT /emulator/v1/projects/…:securityRules (json body)","a":"200 · the new rules then govern a read (403)","r":"c","k":"answer"},{"t":"text plain","q":"PUT /emulator/v1/projects/…:securityRules (text-plain body)","a":"200 · the new rules then govern a read (403)","r":"c","k":"answer"},{"t":"no content type","q":"PUT /emulator/v1/projects/…:securityRules (no-content-type body)","a":"200 · the new rules then govern a read (403)","r":"c","k":"answer"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as absent","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as absent","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as absent","a":"PERMISSION_DENIED: Null value error. for 'get' @ L6, Null value error. for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as absent","a":"403 PERMISSION_DENIED: Null value error. for 'get' @ L6, Null value error. for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as user","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as user","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as user-lowercase-scheme","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as user-lowercase-scheme","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as issued-at-zero","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as issued-at-zero","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as issued-tomorrow","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as issued-tomorrow","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as other-project","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as other-project","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as other-audience","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as other-audience","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as sub-only","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as sub-only","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as no-alg","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as no-alg","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as signed","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as signed","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as padded-base64","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as padded-base64","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/deny/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/anon/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on (default) over REST","q":"GET /v1/…/databases/(default)/documents/alice/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as absent","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as absent","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as absent","a":"PERMISSION_DENIED: Null value error. for 'get' @ L6, Null value error. for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as absent","a":"403 PERMISSION_DENIED: Null value error. for 'get' @ L6, Null value error. for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as user","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as user","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as user-lowercase-scheme","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as user-lowercase-scheme","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as issued-at-zero","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as issued-at-zero","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as issued-tomorrow","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as issued-tomorrow","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as other-project","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as other-project","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as other-audience","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as other-audience","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as sub-only","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as sub-only","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as no-alg","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as no-alg","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as signed","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as signed","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as padded-base64","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as padded-base64","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/deny/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/anon/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on unlisted over REST","q":"GET /v1/…/databases/unlisted/documents/alice/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"uid-null/x","q":"GET uid-null/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"token-sub/x","q":"GET token-sub/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"token-keys/x","q":"GET token-keys/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"uid-null/x","q":"GET uid-null/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"token-sub/x","q":"GET token-sub/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"token-keys/x","q":"GET token-keys/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"twoAllows over gRPC","q":"read refused by rules (twoAllows)","a":"PERMISSION_DENIED: false for 'get' @ L11, false for 'get' @ L12","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"twoAllows over REST","q":"read refused by rules (twoAllows)","a":"403 PERMISSION_DENIED: false for 'get' @ L11, false for 'get' @ L12","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"noMatchingAllow over gRPC","q":"read refused by rules (noMatchingAllow)","a":"PERMISSION_DENIED: No matching allow statements","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"noMatchingAllow over REST","q":"read refused by rules (noMatchingAllow)","a":"403 PERMISSION_DENIED: No matching allow statements","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"create over REST","q":"create refused by rules (create)","a":"403 PERMISSION_DENIED: false for 'create' @ L14","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"PartitionQuery over gRPC (rules, absent)","q":"PartitionQuery as absent (with rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (rules, user)","q":"PartitionQuery as user (with rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (rules, owner)","q":"PartitionQuery as owner (with rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (open, absent)","q":"PartitionQuery as absent (no rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (open, user)","q":"PartitionQuery as user (no rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (open, owner)","q":"PartitionQuery as owner (no rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"pipeline as user","q":"Enterprise ExecutePipeline as user","a":"PERMISSION_DENIED: false for 'list' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"query as user","q":"Enterprise RunQuery as user","a":"PERMISSION_DENIED: false for 'list' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"duration as a parameter","q":"install rules using \"duration\" as a parameter: function accept(duration) { return duration; }","a":"400 Error compiling rules: L4:18 duration is a package and cannot be used as variable name. L4:37 duration is a package and cannot be used…","r":"c","k":"verdict"},{"t":"duration as a binding","q":"install rules using \"duration\" as a binding: function accept() { let duration = true; return duration; }","a":"400 Error compiling rules: L4:26 duration is a package and cannot be used as variable name. L4:50 duration is a package and cannot be used…","r":"c","k":"verdict"},{"t":"duration as a function","q":"install rules using \"duration\" as a function: function duration() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"duration as a wildcard","q":"install rules using \"duration\" as a wildcard: allow get: if duration == 'one';","a":"400 Error compiling rules: L4:16 duration is a package and cannot be used as variable name. L4:42 duration is a package and cannot be used…","r":"c","k":"verdict"},{"t":"duration as a field","q":"install rules using \"duration\" as a field: allow get: if {'duration': true}.duration;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"hashing as a parameter","q":"install rules using \"hashing\" as a parameter: function accept(hashing) { return hashing; }","a":"400 Error compiling rules: L4:18 hashing is a package and cannot be used as variable name. L4:36 hashing is a package and cannot be used as…","r":"c","k":"verdict"},{"t":"hashing as a binding","q":"install rules using \"hashing\" as a binding: function accept() { let hashing = true; return hashing; }","a":"400 Error compiling rules: L4:26 hashing is a package and cannot be used as variable name. L4:49 hashing is a package and cannot be used as…","r":"c","k":"verdict"},{"t":"hashing as a function","q":"install rules using \"hashing\" as a function: function hashing() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"hashing as a wildcard","q":"install rules using \"hashing\" as a wildcard: allow get: if hashing == 'one';","a":"400 Error compiling rules: L4:16 hashing is a package and cannot be used as variable name. L4:41 hashing is a package and cannot be used as…","r":"c","k":"verdict"},{"t":"hashing as a field","q":"install rules using \"hashing\" as a field: allow get: if {'hashing': true}.hashing;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"latlng as a parameter","q":"install rules using \"latlng\" as a parameter: function accept(latlng) { return latlng; }","a":"400 Error compiling rules: L4:18 latlng is a package and cannot be used as variable name. L4:35 latlng is a package and cannot be used as v…","r":"c","k":"verdict"},{"t":"latlng as a binding","q":"install rules using \"latlng\" as a binding: function accept() { let latlng = true; return latlng; }","a":"400 Error compiling rules: L4:26 latlng is a package and cannot be used as variable name. L4:48 latlng is a package and cannot be used as v…","r":"c","k":"verdict"},{"t":"latlng as a function","q":"install rules using \"latlng\" as a function: function latlng() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"latlng as a wildcard","q":"install rules using \"latlng\" as a wildcard: allow get: if latlng == 'one';","a":"400 Error compiling rules: L4:16 latlng is a package and cannot be used as variable name. L4:40 latlng is a package and cannot be used as v…","r":"c","k":"verdict"},{"t":"latlng as a field","q":"install rules using \"latlng\" as a field: allow get: if {'latlng': true}.latlng;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"math as a parameter","q":"install rules using \"math\" as a parameter: function accept(math) { return math; }","a":"400 Error compiling rules: L4:18 math is a package and cannot be used as variable name. L4:33 math is a package and cannot be used as varia…","r":"c","k":"verdict"},{"t":"math as a binding","q":"install rules using \"math\" as a binding: function accept() { let math = true; return math; }","a":"400 Error compiling rules: L4:26 math is a package and cannot be used as variable name. L4:46 math is a package and cannot be used as varia…","r":"c","k":"verdict"},{"t":"math as a function","q":"install rules using \"math\" as a function: function math() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"math as a wildcard","q":"install rules using \"math\" as a wildcard: allow get: if math == 'one';","a":"400 Error compiling rules: L4:16 math is a package and cannot be used as variable name. L4:38 math is a package and cannot be used as varia…","r":"c","k":"verdict"},{"t":"math as a field","q":"install rules using \"math\" as a field: allow get: if {'math': true}.math;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"timestamp as a parameter","q":"install rules using \"timestamp\" as a parameter: function accept(timestamp) { return timestamp; }","a":"400 Error compiling rules: L4:18 timestamp is a package and cannot be used as variable name. L4:38 timestamp is a package and cannot be use…","r":"c","k":"verdict"},{"t":"timestamp as a binding","q":"install rules using \"timestamp\" as a binding: function accept() { let timestamp = true; return timestamp; }","a":"400 Error compiling rules: L4:26 timestamp is a package and cannot be used as variable name. L4:51 timestamp is a package and cannot be use…","r":"c","k":"verdict"},{"t":"timestamp as a function","q":"install rules using \"timestamp\" as a function: function timestamp() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"timestamp as a wildcard","q":"install rules using \"timestamp\" as a wildcard: allow get: if timestamp == 'one';","a":"400 Error compiling rules: L4:16 timestamp is a package and cannot be used as variable name. L4:43 timestamp is a package and cannot be use…","r":"c","k":"verdict"},{"t":"timestamp as a field","q":"install rules using \"timestamp\" as a field: allow get: if {'timestamp': true}.timestamp;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a parameter","q":"install rules using \"request\" as a parameter: function accept(request) { return request; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a binding","q":"install rules using \"request\" as a binding: function accept() { let request = true; return request; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a function","q":"install rules using \"request\" as a function: function request() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a wildcard","q":"install rules using \"request\" as a wildcard: allow get: if request == 'one';","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a field","q":"install rules using \"request\" as a field: allow get: if {'request': true}.request;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a parameter","q":"install rules using \"resource\" as a parameter: function accept(resource) { return resource; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a binding","q":"install rules using \"resource\" as a binding: function accept() { let resource = true; return resource; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a function","q":"install rules using \"resource\" as a function: function resource() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a wildcard","q":"install rules using \"resource\" as a wildcard: allow get: if resource == 'one';","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a field","q":"install rules using \"resource\" as a field: allow get: if {'resource': true}.resource;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a parameter","q":"install rules using \"value\" as a parameter: function accept(value) { return value; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a binding","q":"install rules using \"value\" as a binding: function accept() { let value = true; return value; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a function","q":"install rules using \"value\" as a function: function value() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a wildcard","q":"install rules using \"value\" as a wildcard: allow get: if value == 'one';","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a field","q":"install rules using \"value\" as a field: allow get: if {'value': true}.value;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"is a path","q":"get c/x: path('a/b') is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"is not a string","q":"get c/x: path('a/b') is string","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"equals the same path","q":"get c/x: path('a/b') == path('a/b')","a":"200 (expression held)","r":"c","k":"status"},{"t":"differs from another path","q":"get c/x: path('a/b') != path('a/c')","a":"200 (expression held)","r":"c","k":"status"},{"t":"equals a literal with its slash","q":"get c/x: path('/a/b') == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"equals a literal without its slash","q":"get c/x: path('a/b') == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"not equal to a string","q":"get c/x: path('a/b') == 'a/b'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"string of it keeps the text","q":"get c/x: string(path('a/b')) == 'a/b'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"string of it keeps the slash","q":"get c/x: string(path('/a/b')) == '/a/b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"first segment without a slash","q":"get c/x: path('a/b')[0] == 'a'","a":"200 (expression held)","r":"c","k":"status"},{"t":"first segment with a slash","q":"get c/x: path('/a/b')[0] == 'a'","a":"200 (expression held)","r":"c","k":"status"},{"t":"last segment","q":"get c/x: path('/a/b')[1] == 'b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"exists with it","q":"get c/x: exists(path('/databases/' + database + '/documents/c/x'))","a":"200 (expression held)","r":"c","k":"status"},{"t":"get with it","q":"get c/x: get(path('/databases/' + database + '/documents/c/x')).data.v == 1","a":"200 (expression held)","r":"c","k":"status"},{"t":"exists with a string is an error","q":"get c/x: exists('/databases/' + database + '/documents/c/x')","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"exists for a missing document","q":"get c/x: exists(path('/databases/' + database + '/documents/c/missing'))","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"equals the document name","q":"get c/x: resource.__name__ == path('/databases/' + database + '/documents/c/x')","a":"200 (expression held)","r":"c","k":"status"},{"t":"an integer is an error","q":"get c/x: path(1) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a null is an error","q":"get c/x: path(null) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"no argument is an error","q":"get c/x: path() is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"two arguments is an error","q":"get c/x: path('a', 'b') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"empty text","q":"get c/x: path('') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a doubled slash","q":"get c/x: path('a//b') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a trailing slash","q":"get c/x: path('a/b/') == path('a/b')","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a trailing slash alone","q":"get c/x: path('a/b/') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"the root alone","q":"get c/x: path('/') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"two leading slashes","q":"get c/x: path('//a') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a space in a segment","q":"get c/x: path('a b/c') == /a%20b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"a space is kept","q":"get c/x: path('a b/c')[0] == 'a b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a single segment","q":"get c/x: path('a') == /a","a":"200 (expression held)","r":"c","k":"status"},{"t":"an odd number of segments reads too","q":"get c/x: path('/databases/' + database + '/documents/c')[4] == 'c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a leading slash is kept","q":"get c/x: path('/a/b') == path('a/b')","a":"200 (expression held)","r":"c","k":"status"},{"t":"an interpolated literal","q":"get c/x: /a/$('b') == path('/a/b')","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a string in a literal","q":"get c/x: /a/$('b') == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a string function","q":"get c/x: /a/$(string(1)) == /a/1","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating an index","q":"get c/x: /a/$(['b'][0]) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a map key","q":"get c/x: /a/$({'k': 'b'}['k']) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name against a literal","q":"get c/x: /databases/$(database)/documents/c/x == resource.__name__","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name against a literal reversed","q":"get c/x: resource.__name__ == /databases/$(database)/documents/c/x","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name against the request path","q":"get c/x: resource.__name__ == request.path","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name is a path","q":"get c/x: resource.__name__ is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name as a string","q":"get c/x: string(resource.__name__) == '/databases/' + database + '/documents/c/x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name with a project","q":"get c/x: string(resource.__name__) == '/projects/{project}/databases/' + database + '/documents/c/x'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"the name first segment databases","q":"get c/x: resource.__name__[0] == 'databases'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name first segment projects","q":"get c/x: resource.__name__[0] == 'projects'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"the name last segment","q":"get c/x: resource.__name__[4] == 'x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the request path as a string","q":"get c/x: string(request.path) == '/databases/' + database + '/documents/c/x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the request path with a project","q":"get c/x: string(request.path) == '/projects/{project}/databases/' + database + '/documents/c/x'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a percent escape is read in a literal","q":"get c/x: /a%20b/c[0] == 'a b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a percent escape is kept as text","q":"get c/x: /a%20b/c[0] == 'a%20b'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a percent escape in string of a literal","q":"get c/x: string(/a%20b/c) == '/a%20b/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a space in string of a literal","q":"get c/x: string(/a%20b/c) == '/a b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a percent escape through path","q":"get c/x: path('a%20b/c')[0] == 'a%20b'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a percent escape through path is read","q":"get c/x: path('a%20b/c')[0] == 'a b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"string of a spaced path","q":"get c/x: string(path('a b/c')) == '/a b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"string of a spaced path encoded","q":"get c/x: string(path('a b/c')) == '/a%20b/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a slash escape in a literal","q":"get c/x: /a%2Fb/c[0] == 'a/b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name by index","q":"get c/x: resource['__name__'] == /databases/$(database)/documents/c/x","a":"200 (expression held)","r":"c","k":"status"},{"t":"string of a slash escape read","q":"get c/x: string(/a%2Fb/c) == '/a/b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"string of a slash escape kept","q":"get c/x: string(/a%2Fb/c) == '/a%2Fb/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a slash escape equals two segments","q":"get c/x: /a%2Fb/c == /a/b/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a slash escape through path","q":"get c/x: path('a%2Fb/c')[0] == 'a/b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolated slash one segment","q":"get c/x: /a/$('b/c')[1] == 'b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolated slash two segments","q":"get c/x: /a/$('b/c')[2] == 'c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"interpolated slash equals","q":"get c/x: /a/$('b/c') == /a/b/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"interpolated escape kept","q":"get c/x: /a/$('b%20c')[1] == 'b%20c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolated escape read","q":"get c/x: /a/$('b%20c')[1] == 'b c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a bad escape through path","q":"get c/x: path('a%zz') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a bad escape kept through path","q":"get c/x: path('a%zz')[0] == 'a%zz'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a bad escape in a literal","q":"get c/x: /a%zz/c is path","a":"rules refused (400)","r":"c","k":"verdict"},{"t":"a literal right after if","q":"get c/x: /a/b is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"a dot in a literal","q":"get c/x: /a/b.c[1] == 'b.c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"an interpolation then index","q":"get c/x: /a/$('b')[1] == 'b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal indexed","q":"get c/x: /a/b[1] == 'b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal range","q":"get c/x: /a/b/c[1:3] == /b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"a path range","q":"get c/x: path('/a/b/c')[1:3] == /b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind through path","q":"get c/x: path('/a/{x}/c').bind({'x': 'b'}) == /a/b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind on a literal","q":"get c/x: /a/{x}/c.bind({'x': 'b'}) == /a/b/c","a":"rules refused (400)","r":"c","k":"verdict"},{"t":"bind an integer","q":"get c/x: path('/a/{x}/c').bind({'x': 1}) == /a/1/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a missing key","q":"get c/x: path('/a/{x}/c').bind({'y': 'b'}) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind a missing key keeps it","q":"get c/x: string(path('/a/{x}/c').bind({'y': 'b'})) == '/a/{x}/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind an extra key","q":"get c/x: path('/a/{x}/c').bind({'x': 'b', 'y': 'd'}) == /a/b/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind part of a segment","q":"get c/x: path('/a/p{x}q/c').bind({'x': 'b'}) == /a/pbq/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind part of a segment kept","q":"get c/x: string(path('/a/p{x}q/c').bind({'x': 'b'})) == '/a/p{x}q/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind two keys","q":"get c/x: path('/{x}/{y}').bind({'x': 'a', 'y': 'b'}) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a slash value","q":"get c/x: path('/a/{x}').bind({'x': 'b/c'})[1] == 'b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a path value","q":"get c/x: path('/a/{x}').bind({'x': path('b/c')}) == /a/b/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind nothing","q":"get c/x: path('/a/b').bind({}) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a non map","q":"get c/x: path('/a/{x}').bind('b') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind on the request path","q":"get c/x: request.path.bind({}) == request.path","a":"200 (expression held)","r":"c","k":"status"},{"t":"a size of a path","q":"get c/x: path('/a/b').size() == 2","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"interpolating a path","q":"get c/x: /a/$(path('b/c')) == /a/b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a path segment","q":"get c/x: /a/$(path('b/c'))[2] == 'c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a literal","q":"get c/x: /a/$(/b/c) == /a/b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating an integer","q":"get c/x: /a/$(1) == /a/1","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a bool is an error","q":"get c/x: /a/$(true) is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating the request path","q":"get c/x: /a/$(request.path)[1] == request.path[0]","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating inside a segment","q":"get c/x: /a/p$('b')q == /a/pbq","a":"rules refused (400)","r":"c","k":"verdict"},{"t":"interpolating an empty string","q":"get c/x: /a/$('')/c is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a bool reads as text","q":"get c/x: /a/$(true)[1] == 'true'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a float","q":"get c/x: /a/$(1.5) is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a float reads as text","q":"get c/x: /a/$(1.5)[1] == '1.5'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a null","q":"get c/x: /a/$(null) is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a list","q":"get c/x: /a/$([1]) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"interpolating a map","q":"get c/x: /a/$({'k': 1}) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind a bool","q":"get c/x: path('/a/{x}').bind({'x': true})[1] == 'true'","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a float","q":"get c/x: path('/a/{x}').bind({'x': 1.5})[1] == '1.5'","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a null","q":"get c/x: path('/a/{x}').bind({'x': null}) is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a list","q":"get c/x: path('/a/{x}').bind({'x': [1]}) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind a recursive template","q":"get c/x: path('/a/{x=**}').bind({'x': 'b'}) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind keeps spaces","q":"get c/x: path('/a/{x}').bind({'x': 'b c'})[1] == 'b c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind does not read an escape","q":"get c/x: path('/a/{x}').bind({'x': 'b%20c'})[1] == 'b%20c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name by index is a path","q":"get c/x: resource['__name__'] is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id by index","q":"get c/x: resource['id'] == 'x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the data by index","q":"get c/x: resource['data'].v == 1","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id","q":"get c/x: resource.id == 'x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id is a string","q":"get c/x: resource.id is string","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id of a get","q":"get c/x: get(path('/databases/' + database + '/documents/c/x')).id == 'x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name of a get","q":"get c/x: get(path('/databases/' + database + '/documents/c/x')).__name__ == path('/databases/' + database + '/documents/c/x')","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id against a wildcard","q":"get c/x: resource.id == id","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal in parentheses","q":"get c/x: (/a/b) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal negated equal","q":"get c/x: /a/b != /a/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal in a list","q":"get c/x: /a/b in [/a/b]","a":"200 (expression held)","r":"c","k":"status"},{"t":"list the id","q":"list c: resource.id == 'x'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the id differs","q":"list c: resource.id != 'nope'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the id is a string","q":"list c: resource.id is string","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the name is a path","q":"list c: resource.__name__ is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the name equals","q":"list c: resource.__name__ == /databases/$(database)/documents/c/x","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the name by index","q":"list c: resource['__name__'] is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the id by index","q":"list c: resource['id'] is string","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"create the id","q":"create c/new: request.resource.id == 'new'","a":"200 (expression held)","r":"c","k":"status"},{"t":"create the id is a string","q":"create c/new: request.resource.id is string","a":"200 (expression held)","r":"c","k":"status"},{"t":"create the name","q":"create c/new: request.resource.__name__ == /databases/$(database)/documents/c/new","a":"200 (expression held)","r":"c","k":"status"},{"t":"create the name by index","q":"create c/new: request.resource['__name__'] == /databases/$(database)/documents/c/new","a":"200 (expression held)","r":"c","k":"status"},{"t":"create the name against the request path","q":"create c/new: request.resource.__name__ == request.path","a":"200 (expression held)","r":"c","k":"status"},{"t":"member get room","q":"GET documents/rooms/r1 as u-member","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"anonymous get room","q":"GET documents/rooms/r1 signed out","a":"403 PERMISSION_DENIED: false for 'get' @ L26","r":"c","k":"status"},{"t":"lead create room","q":"POST documents:commit as u-lead","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"member create room","q":"POST documents:commit as u-member","a":"403 PERMISSION_DENIED: false for 'create' @ L29, false for 'update' @ L39","r":"c","k":"status"},{"t":"anonymous create room","q":"POST documents:commit signed out","a":"403 PERMISSION_DENIED: false for 'create' @ L29, false for 'update' @ L39","r":"c","k":"status"},{"t":"create room unknown field","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L29:24 for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ L…","r":"c","k":"status"},{"t":"create room missing field","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: false for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ L29","r":"c","k":"status"},{"t":"create room title not string","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L29:24 for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ L…","r":"c","k":"status"},{"t":"create room title too long","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L29:24 for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ L…","r":"c","k":"status"},{"t":"create room visibility not listed","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L29:24 for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ L…","r":"c","k":"status"},{"t":"update room allowed field","q":"POST documents:commit as u-lead","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"update room locked field","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L39:24 for 'update' @ L39, false for 'update' @ L39","r":"c","k":"status"},{"t":"lead delete room","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: false for 'delete' @ L43","r":"c","k":"status"},{"t":"outsider get entry","q":"GET documents/rooms/r1/entries/e1 as u-outsider","a":"403 PERMISSION_DENIED: evaluation error at L52:23 for 'get' @ L52, false for 'get' @ L52","r":"c","k":"status"},{"t":"member get entry","q":"GET documents/rooms/r1/entries/e1 as u-member","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"member list foreign members","q":"POST documents/rooms/r2:runQuery as u-member","a":"403 PERMISSION_DENIED: evaluation error at L47:24 for 'list' @ L47, false for 'list' @ L47","r":"c","k":"status"},{"t":"outsider query entries with field","q":"POST documents/rooms/r1:runQuery as u-outsider","a":"403 PERMISSION_DENIED: evaluation error at L55:24 for 'list' @ L55, false for 'list' @ L55","r":"c","k":"status"},{"t":"create entry without optional field","q":"POST documents:commit as u-member","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"create entry over limit","q":"POST documents:commit as u-member","a":"403 PERMISSION_DENIED: false for 'create' @ L58, evaluation error at L63:26 for 'update' @ L63, false for 'create' @ L58","r":"c","k":"status"},{"t":"create entry not integer","q":"POST documents:commit as u-member","a":"403 PERMISSION_DENIED: false for 'create' @ L58, evaluation error at L63:26 for 'update' @ L63, false for 'create' @ L58","r":"c","k":"status"},{"t":"update entry in open room","q":"POST documents:commit as u-member","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"create room with null field","q":"POST documents:commit as u-lead","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"anonymous query missing document id","q":"POST documents:runQuery signed out","a":"403 PERMISSION_DENIED: false for 'list' @ L27","r":"c","k":"status"},{"t":"member query missing document id","q":"POST documents:runQuery as u-member","a":"403 PERMISSION_DENIED: evaluation error at L27:22 for 'list' @ L27","r":"c","k":"status"},{"t":"get matching document id","q":"GET documents/marks/yellow as u-member","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"get non matching document id","q":"GET documents/marks/YELLOW_1 as u-member","a":"403 PERMISSION_DENIED: false for 'get' @ L71","r":"c","k":"status"},{"t":"create mark both fields","q":"POST documents:commit as u-member","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"create mark wrong type","q":"POST documents:commit as u-member","a":"403 PERMISSION_DENIED: false for 'create' @ L73","r":"c","k":"status"},{"t":"member query entries with field","q":"POST documents/rooms/r1:runQuery as u-member","a":"200 [1 item]","r":"d","k":"answer","w":"Firenook ends a runQuery stream without \"done\": true, as production does"},{"t":"probe/access 10","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/access-10","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"probe/access 11","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/access-11","a":"403 PERMISSION_DENIED: evaluation error at L17:21 for 'get' @ L17, Service call error. Function: [get], Argument: [path_value { segments {…","r":"c","k":"verdict"},{"t":"probe/cached 11","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/cached-11","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"probe/exists 10","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/exists-10","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"probe/exists 11","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/exists-11","a":"403 PERMISSION_DENIED: evaluation error at L55:21 for 'get' @ L55, Service call error. Function: [exists], Argument: [path_value { segments…","r":"c","k":"verdict"},{"t":"batch 20 distinct access calls","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"verdict"},{"t":"batch 21 distinct access calls","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"403 PERMISSION_DENIED: evaluation error at L68:32 for 'create' @ L68, evaluation error at L68:32 for 'update' @ L68, evaluation error at L6…","r":"c","k":"verdict"},{"t":"get after sees pending write","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"verdict"},{"t":"get after denies stale invariant","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"403 PERMISSION_DENIED: evaluation error at L71:24 for 'update' @ L71, evaluation error at L74:24 for 'create' @ L74, false for 'update' @ L…","r":"c","k":"verdict"},{"t":"runtime/missing field","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/missing-field","a":"403 PERMISSION_DENIED: evaluation error at L77:21 for 'get' @ L77, Property missing is undefined on object. for 'get' @ L77","r":"c","k":"verdict"},{"t":"runtime/division zero","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/division-zero","a":"403 PERMISSION_DENIED: Divide by zero error. for 'get' @ L80, Divide by zero error. for 'get' @ L80","r":"c","k":"verdict"},{"t":"runtime/list out of bounds","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/list-out-of-bounds","a":"403 PERMISSION_DENIED: Index out of bound error. Index: [2] , size: [1]. for 'get' @ L83, Index out of bound error. Index: [2] , size: [1].…","r":"c","k":"verdict"},{"t":"runtime/wrong type method","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/wrong-type-method","a":"403 PERMISSION_DENIED: evaluation error at L86:21 for 'get' @ L86, Function not found error: Name: [size]. for 'get' @ L86","r":"c","k":"verdict"},{"t":"runtime/missing get resource","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/missing-get-resource","a":"403 PERMISSION_DENIED: evaluation error at L89:21 for 'get' @ L89, Null value error. for 'get' @ L89","r":"c","k":"verdict"},{"t":"public get","q":"GET /v1/projects/{project}/databases/(default)/documents/public/news","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"public list bounded","q":"POST /v1/projects/{project}/databases/(default)/documents:runQuery","a":"200 [1 item]","r":"c","k":"verdict"},{"t":"public list oversized","q":"POST /v1/projects/{project}/databases/(default)/documents:runQuery","a":"403 PERMISSION_DENIED: false for 'list' @ L67, false for 'list' @ L1190","r":"c","k":"verdict"},{"t":"tenant claim read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"tenant wrong claim","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a","a":"403 PERMISSION_DENIED: evaluation error at L71:21 for 'get' @ L71, false for 'get' @ L1190, false for 'get' @ L71, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"tenant admin update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"tenant editor update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a","a":"403 PERMISSION_DENIED: false for 'create' @ L1190, false for 'update' @ L74, false for 'update' @ L1190","r":"c","k":"verdict"},{"t":"member self read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/members/alice","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"member other read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/members/alice","a":"403 PERMISSION_DENIED: false for 'get' @ L78, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"project member read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"project nonmember read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"403 PERMISSION_DENIED: evaluation error at L89:23 for 'get' @ L89, false for 'get' @ L1190, false for 'get' @ L89, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"project owner update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"project owner forbidden change","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"403 PERMISSION_DENIED: false for 'create' @ L92, false for 'create' @ L1190, evaluation error at L96:26 for 'update' @ L96, false for 'upda…","r":"c","k":"verdict"},{"t":"project admin delete","q":"DELETE /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"200 {}","r":"c","k":"verdict"},{"t":"project member delete","q":"DELETE /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"403 PERMISSION_DENIED: false for 'delete' @ L102, false for 'delete' @ L1190","r":"c","k":"verdict"},{"t":"task member read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"task nonmember read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1","a":"403 PERMISSION_DENIED: evaluation error at L104:25 for 'get' @ L104, false for 'get' @ L1190, false for 'get' @ L104, false for 'get' @ L11…","r":"c","k":"verdict"},{"t":"task self create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-create-alice","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"task other create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-create-bob","a":"403 PERMISSION_DENIED: false for 'create' @ L107, false for 'create' @ L1190, evaluation error at L110:28 for 'update' @ L110, false for 'u…","r":"c","k":"verdict"},{"t":"task assignee update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-update-allow","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"task forbidden update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-update-deny","a":"403 PERMISSION_DENIED: evaluation error at L107:28 for 'create' @ L107, false for 'create' @ L1190, evaluation error at L110:28 for 'update…","r":"c","k":"verdict"},{"t":"comment member read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1/comments/comment-1","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"comment author create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1/comments/comment-new","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"comment impersonation","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1/comments/comment-bad","a":"403 PERMISSION_DENIED: false for 'create' @ L121, false for 'create' @ L1190, evaluation error at L125:38 for 'update' @ L125, false for 'u…","r":"c","k":"verdict"},{"t":"profile self read","q":"GET /v1/projects/{project}/databases/(default)/documents/profiles/alice","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"profile other read","q":"GET /v1/projects/{project}/databases/(default)/documents/profiles/alice","a":"403 PERMISSION_DENIED: false for 'get' @ L136, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"profile self update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/profiles/alice","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"profile role injection","q":"PATCH /v1/projects/{project}/databases/(default)/documents/profiles/alice","a":"403 PERMISSION_DENIED: false for 'create' @ L142, false for 'create' @ L1190, evaluation error at L138:24 for 'update' @ L138, false for 'u…","r":"c","k":"verdict"},{"t":"audit admin create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/audits/admin-event","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"audit editor create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/audits/editor-event","a":"403 PERMISSION_DENIED: false for 'create' @ L145, false for 'create' @ L1190, false for 'update' @ L150, false for 'update' @ L1190","r":"c","k":"verdict"},{"t":"recursive asset member","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/assets/folder/deep/file","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"recursive asset nonmember","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/assets/folder/deep/file","a":"403 PERMISSION_DENIED: evaluation error at L131:23 for 'get' @ L131, false for 'get' @ L1190, false for 'get' @ L131, false for 'get' @ L11…","r":"c","k":"verdict"},{"t":"stats admin read","q":"GET /v1/projects/{project}/databases/(default)/documents/stats/overview","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"stats editor read","q":"GET /v1/projects/{project}/databases/(default)/documents/stats/overview","a":"403 PERMISSION_DENIED: false for 'get' @ L153, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"generated entity 00","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-00/document-00","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 01","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-01/document-01","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 02","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-02/document-02","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 03","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-03/document-03","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 04","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-04/document-04","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 05","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-05/document-05","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 06","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-06/document-06","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 07","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-07/document-07","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity wrong tenant","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-00/document-00","a":"403 PERMISSION_DENIED: evaluation error at L166:21 for 'get' @ L166, false for 'get' @ L1190, false for 'get' @ L166, false for 'get' @ L11…","r":"c","k":"verdict"},{"t":"get after atomic allow","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"verdict"},{"t":"get after atomic deny","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"403 PERMISSION_DENIED: false for 'create' @ L1190, evaluation error at L157:24 for 'update' @ L157, false for 'update' @ L1190, evaluation…","r":"c","k":"verdict"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: false for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: false for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: false for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy in [\"query-owner\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy in [\"query-owner\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where createdBy in [\"query-owner\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy in [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy in [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy in [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy array-contains \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy array-contains \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy array-contains \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy >= \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy >= \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy >= \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where (createdBy == \"query-owner\" and published == false)","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and published == false)","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where (createdBy == \"query-owner\" and published == false)","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true))","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true…","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true))","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where (createdBy == \"query-owner\" or published == true)","a":"PERMISSION_DENIED: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where (createdBy == \"query-owner\" or published == true)","a":"PERMISSION_DENIED: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where (createdBy == \"query-owner\" or published == true)","a":"PERMISSION_DENIED: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery emptyRecords where createdBy == \"query-owner\"","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery emptyRecords where createdBy == \"query-owner\"","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen emptyRecords where createdBy == \"query-owner\"","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery emptyRecords where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery emptyRecords where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen emptyRecords where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId == \"granted\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId == \"granted\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where permissionId == \"granted\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId == \"denied\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId == \"denied\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where permissionId == \"denied\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId == \"missing\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId == \"missing\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where permissionId == \"missing\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId in [\"granted\",\"granted2\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId in [\"granted\",\"granted2\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where permissionId in [\"granted\",\"granted2\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId in [\"granted\",\"denied\"]","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,…","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId in [\"granted\",\"denied\"]","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,…","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where permissionId in [\"granted\",\"denied\"]","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,…","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery shortCircuit where createdBy == \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shortCircuit where createdBy == \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen shortCircuit where createdBy == \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery shared where members array-contains \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared where members array-contains \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen shared where members array-contains \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery shared where members array-contains \"other-owner\"","a":"PERMISSION_DENIED: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared where members array-contains \"other-owner\"","a":"PERMISSION_DENIED: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen shared where members array-contains \"other-owner\"","a":"PERMISSION_DENIED: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery shared where members array-contains-any [\"query-owner\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen shared where members array-contains-any [\"query-owner\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery shared","a":"PERMISSION_DENIED: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared","a":"PERMISSION_DENIED: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen shared","a":"PERMISSION_DENIED: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score == 5","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score == 5","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ratings where score == 5","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score > 5","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score > 5","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ratings where score > 5","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score >= 5","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score >= 5","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ratings where score >= 5","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score >= 4","a":"PERMISSION_DENIED: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score >= 4","a":"PERMISSION_DENIED: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ratings where score >= 4","a":"PERMISSION_DENIED: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score in [5,7]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score in [5,7]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ratings where score in [5,7]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score in [4,7]","a":"PERMISSION_DENIED: false for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score in [4,7]","a":"PERMISSION_DENIED: false for 'list' @ L12","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ratings where score in [4,7]","a":"PERMISSION_DENIED: false for 'list' @ L12","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery ratings","a":"PERMISSION_DENIED: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings","a":"PERMISSION_DENIED: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ratings","a":"PERMISSION_DENIED: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery nonnull where value != null","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery nonnull where value != null","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen nonnull where value != null","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery notblocked where value != \"blocked\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery notblocked where value != \"blocked\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen notblocked where value != \"blocked\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery limited limit 12","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery limited limit 13","a":"PERMISSION_DENIED: false for 'list' @ L15","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery limited limit 13","a":"PERMISSION_DENIED: false for 'list' @ L15","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen limited limit 13","a":"PERMISSION_DENIED: false for 'list' @ L15","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery limited","a":"PERMISSION_DENIED: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= flo…","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery limited","a":"PERMISSION_DENIED: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= flo…","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen limited","a":"PERMISSION_DENIED: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= flo…","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery offsets offset 2","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery offsets offset 2","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen offsets offset 2","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery offsets offset 3","a":"PERMISSION_DENIED: false for 'list' @ L16","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery offsets offset 3","a":"PERMISSION_DENIED: false for 'list' @ L16","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen offsets offset 3","a":"PERMISSION_DENIED: false for 'list' @ L16","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery offsets","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery offsets","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen offsets","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ordering order by updatedAt desc","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ordering order by updatedAt desc","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ordering order by updatedAt desc","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ordering order by updatedAt asc","a":"PERMISSION_DENIED: false for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ordering order by updatedAt asc","a":"PERMISSION_DENIED: false for 'list' @ L17","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ordering order by updatedAt asc","a":"PERMISSION_DENIED: false for 'list' @ L17","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery ordering","a":"PERMISSION_DENIED: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ordering","a":"PERMISSION_DENIED: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ordering","a":"PERMISSION_DENIED: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery fixedGet","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery fixedExists","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery fixedExists","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen fixedExists","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery dynamicExists where permissionId == \"granted\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery dynamicExists where permissionId == \"granted\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen dynamicExists where permissionId == \"granted\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery dynamicExists where permissionId == \"missing\"","a":"PERMISSION_DENIED: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery dynamicExists where permissionId == \"missing\"","a":"PERMISSION_DENIED: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen dynamicExists where permissionId == \"missing\"","a":"PERMISSION_DENIED: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery dynamicExists","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery dynamicExists","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen dynamicExists","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery group groupDocs where createdBy == \"query-owner\"","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery group groupDocs where createdBy == \"query-owner\"","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen group groupDocs where createdBy == \"query-owner\"","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery group groupDocs","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery group groupDocs","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen group groupDocs","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery group emptyGroup where createdBy == \"query-owner\"","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery group emptyGroup where createdBy == \"query-owner\"","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen group emptyGroup where createdBy == \"query-owner\"","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery group records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: No matching allow statements","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery group records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: No matching allow statements","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen group records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: No matching allow statements","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"ListenChanges over gRPC","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy == \"query-owner\"","a":"permission-denied: false for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\"","a":"permission-denied: false for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy in [\"query-owner\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy in [\"query-owner\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy in [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy in [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy array-contains \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy array-contains \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy >= \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy >= \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where (createdBy == \"query-owner\" and published == false)","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and published == false)","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true))","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true…","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where (createdBy == \"query-owner\" or published == true)","a":"permission-denied: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" or published == true)","a":"permission-denied: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen emptyRecords where createdBy == \"query-owner\"","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery emptyRecords where createdBy == \"query-owner\"","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen emptyRecords where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery emptyRecords where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId == \"granted\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId == \"granted\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId == \"denied\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId == \"denied\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId == \"missing\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId == \"missing\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId in [\"granted\",\"granted2\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId in [\"granted\",\"granted2\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId in [\"granted\",\"denied\"]","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,…","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId in [\"granted\",\"denied\"]","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,…","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shortCircuit where createdBy == \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shortCircuit where createdBy == \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared where members array-contains \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared where members array-contains \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared where members array-contains \"other-owner\"","a":"permission-denied: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared where members array-contains \"other-owner\"","a":"permission-denied: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared where members array-contains-any [\"query-owner\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared","a":"permission-denied: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared","a":"permission-denied: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score == 5","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score == 5","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score > 5","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score > 5","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score >= 5","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score >= 5","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score >= 4","a":"permission-denied: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score >= 4","a":"permission-denied: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score in [5,7]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score in [5,7]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score in [4,7]","a":"permission-denied: false for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score in [4,7]","a":"permission-denied: false for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings","a":"permission-denied: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings","a":"permission-denied: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen nonnull where value != null","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery nonnull where value != null","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen notblocked where value != \"blocked\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery notblocked where value != \"blocked\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery limited limit 12","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen limited limit 13","a":"permission-denied: false for 'list' @ L15","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery limited limit 13","a":"permission-denied: false for 'list' @ L15","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen limited","a":"permission-denied: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= flo…","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery limited","a":"permission-denied: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= flo…","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen offsets","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery offsets","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ordering order by updatedAt desc","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ordering order by updatedAt desc","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ordering order by updatedAt asc","a":"permission-denied: false for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ordering order by updatedAt asc","a":"permission-denied: false for 'list' @ L17","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ordering","a":"permission-denied: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ordering","a":"permission-denied: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery fixedGet","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen fixedExists","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery fixedExists","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen dynamicExists where permissionId == \"granted\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery dynamicExists where permissionId == \"granted\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen dynamicExists where permissionId == \"missing\"","a":"permission-denied: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery dynamicExists where permissionId == \"missing\"","a":"permission-denied: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen dynamicExists","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery dynamicExists","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen group groupDocs where createdBy == \"query-owner\"","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery group groupDocs where createdBy == \"query-owner\"","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen group groupDocs","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery group groupDocs","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen group emptyGroup where createdBy == \"query-owner\"","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery group emptyGroup where createdBy == \"query-owner\"","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen group records where createdBy == \"query-owner\"","a":"permission-denied: No matching allow statements","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery group records where createdBy == \"query-owner\"","a":"permission-denied: No matching allow statements","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"ListenChanges from the browser SDK (long-poll WebChannel)","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy == \"query-owner\"","a":"permission-denied: false for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\"","a":"permission-denied: false for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy in [\"query-owner\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy in [\"query-owner\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy in [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy in [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy array-contains \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy array-contains \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy >= \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy >= \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where (createdBy == \"query-owner\" and published == false)","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and published == false)","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true))","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true…","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where (createdBy == \"query-owner\" or published == true)","a":"permission-denied: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" or published == true)","a":"permission-denied: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen emptyRecords where createdBy == \"query-owner\"","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery emptyRecords where createdBy == \"query-owner\"","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen emptyRecords where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery emptyRecords where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId == \"granted\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId == \"granted\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId == \"denied\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId == \"denied\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId == \"missing\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId == \"missing\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId in [\"granted\",\"granted2\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId in [\"granted\",\"granted2\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId in [\"granted\",\"denied\"]","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,…","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId in [\"granted\",\"denied\"]","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,…","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shortCircuit where createdBy == \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shortCircuit where createdBy == \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared where members array-contains \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared where members array-contains \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared where members array-contains \"other-owner\"","a":"permission-denied: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared where members array-contains \"other-owner\"","a":"permission-denied: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared where members array-contains-any [\"query-owner\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared","a":"permission-denied: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared","a":"permission-denied: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score == 5","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score == 5","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score > 5","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score > 5","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score >= 5","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score >= 5","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score >= 4","a":"permission-denied: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score >= 4","a":"permission-denied: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score in [5,7]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score in [5,7]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score in [4,7]","a":"permission-denied: false for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score in [4,7]","a":"permission-denied: false for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings","a":"permission-denied: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings","a":"permission-denied: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen nonnull where value != null","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery nonnull where value != null","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen notblocked where value != \"blocked\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery notblocked where value != \"blocked\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery limited limit 12","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen limited limit 13","a":"permission-denied: false for 'list' @ L15","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery limited limit 13","a":"permission-denied: false for 'list' @ L15","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen limited","a":"permission-denied: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= flo…","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery limited","a":"permission-denied: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= flo…","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen offsets","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery offsets","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ordering order by updatedAt desc","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ordering order by updatedAt desc","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ordering order by updatedAt asc","a":"permission-denied: false for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ordering order by updatedAt asc","a":"permission-denied: false for 'list' @ L17","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ordering","a":"permission-denied: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ordering","a":"permission-denied: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery fixedGet","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen fixedExists","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery fixedExists","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen dynamicExists where permissionId == \"granted\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery dynamicExists where permissionId == \"granted\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen dynamicExists where permissionId == \"missing\"","a":"permission-denied: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery dynamicExists where permissionId == \"missing\"","a":"permission-denied: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen dynamicExists","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery dynamicExists","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen group groupDocs where createdBy == \"query-owner\"","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery group groupDocs where createdBy == \"query-owner\"","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen group groupDocs","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery group groupDocs","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen group emptyGroup where createdBy == \"query-owner\"","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery group emptyGroup where createdBy == \"query-owner\"","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen group records where createdBy == \"query-owner\"","a":"permission-denied: No matching allow statements","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery group records where createdBy == \"query-owner\"","a":"permission-denied: No matching allow statements","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK · count 1","r":"c","k":"answer"},{"t":"ListenChanges from the browser SDK (streaming WebChannel)","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery limited limit 12","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery fixedGet","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/members","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/members","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/members","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/getMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/getMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/getMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/functionMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/functionMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/functionMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/reversedMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/reversedMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/reversedMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/emptyGranted/members","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/emptyGranted/members","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/emptyGranted/members","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/members where uid == \"query-owner\"","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/members where uid == \"query-owner\"","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/members where uid == \"query-owner\"","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments queryParents/granted/members","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments queryParents/denied/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments queryParents/emptyGranted/members","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"ListenChanges over gRPC","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery limited limit 12","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery fixedGet","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/members","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/members","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/getMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/getMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/functionMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/functionMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/reversedMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/reversedMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/emptyGranted/members","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/emptyGranted/members","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/members where uid == \"query-owner\"","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/members where uid == \"query-owner\"","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"ListenChanges from the browser SDK (long-poll WebChannel)","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen limited limit 12","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery limited limit 12","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen fixedGet","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery fixedGet","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/members","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/members","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/getMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/getMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/functionMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/functionMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/reversedMembers","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/reversedMembers","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/negatedAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/negatedAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/literalOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/literalOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/concreteErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/concreteErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/concreteErrorAnd","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/concreteErrorAnd","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/budgetErrorOr","a":"OK · 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/budgetErrorOr","a":"OK · count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/emptyGranted/members","a":"OK · 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/emptyGranted/members","a":"OK · count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/members where uid == \"query-owner\"","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/members where uid == \"query-owner\"","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"ListenChanges from the browser SDK (streaming WebChannel)","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK · 0 documents","r":"c","k":"answer"}]} \ No newline at end of file diff --git a/src/content/docs/docs/contribute/build.md b/src/content/docs/docs/contribute/build.md index 1f85249..fe3f144 100644 --- a/src/content/docs/docs/contribute/build.md +++ b/src/content/docs/docs/contribute/build.md @@ -11,7 +11,7 @@ project, and which tests a change must pass. ## What you need - **Rust**, the toolchain `rust-toolchain.toml` names: the stable channel with - `clippy` and `rustfmt`. The workspace needs Rust 1.98 or later, and 0.2.4 + `clippy` and `rustfmt`. The workspace needs Rust 1.98 or later, and 0.2.5 was built with 1.100.0, the toolchain the release records. - **Node 24.20.0 and npm 12.0.2**, the versions `CONTRIBUTING.md` names and the repository's checks pin: `console/` and `conformance/` declare @@ -86,7 +86,7 @@ what they lack. To run a change in your own app through the npm launcher, build a local candidate. It is a pair of private tarballs, the launcher and your machine's engine, with a version of their own that names the commit, such as -`0.2.4-local.g1a2b3c4d5e6f`. Nothing is published. +`0.2.5-local.g1a2b3c4d5e6f`. Nothing is published. 1. Commit your change. The build refuses uncommitted tracked changes, so every candidate names the exact source it came from. diff --git a/src/content/docs/docs/data/keep-data.mdx b/src/content/docs/docs/data/keep-data.mdx index 846f97e..2dfb902 100644 --- a/src/content/docs/docs/data/keep-data.mdx +++ b/src/content/docs/docs/data/keep-data.mdx @@ -19,7 +19,7 @@ npx firenook emulators:start --keep-data The first start begins empty and says where the data goes: ```text -firenook 0.2.4 +firenook 0.2.5 demo-shop · a fresh start Node 24.20.0 · data in .firenook/state ``` @@ -34,7 +34,7 @@ Every later start picks the data up, says when it was saved, and counts what it holds: ```text -firenook 0.2.4 +firenook 0.2.5 demo-shop · picking up the data saved just now Node 24.20.0 · data in .firenook/state @@ -52,7 +52,7 @@ Each start gets a new, empty working directory, `.firenook/runs/session-/state`, and says so: ```text -firenook 0.2.4 +firenook 0.2.5 demo-shop · a fresh start Node 24.20.0 · data in .firenook/runs/session-VLd3PD, for this run ``` diff --git a/src/content/docs/docs/data/seeds.mdx b/src/content/docs/docs/data/seeds.mdx index 3c0fc29..00247a5 100644 --- a/src/content/docs/docs/data/seeds.mdx +++ b/src/content/docs/docs/data/seeds.mdx @@ -59,7 +59,7 @@ npx firenook emulators:start --import ./data --keep-data The first start imports it into `.firenook/state`: ```text -firenook 0.2.4 +firenook 0.2.5 demo-shop · first start, importing the seed "data" Node 24.20.0 · data in .firenook/state diff --git a/src/content/docs/docs/get-started/ci.md b/src/content/docs/docs/get-started/ci.md index c588b67..eeec644 100644 --- a/src/content/docs/docs/get-started/ci.md +++ b/src/content/docs/docs/get-started/ci.md @@ -70,7 +70,7 @@ looks like this, trimmed: ```text Firenook: running the script through the shell as the official CLI does; use -- for an argv command without shell interpretation -Firenook 0.2.4; engine 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9; disk/WAL state /.firenook/runs/session-Syhid2/state +Firenook 0.2.5; engine 6683b3edb53941a8e7fd34b89a45855b9fff0b50; disk/WAL state /.firenook/runs/session-Syhid2/state Services: firestore, auth, storage, functions, pubsub; Emulator UI on; host localhost Demo project demo-shop: no cloud service is contacted, but user Functions can still reach external providers; this CLI is not a network sandbox. Working data and launch receipt are preserved in /.firenook/runs/session-Syhid2. No automatic deletion. diff --git a/src/content/docs/docs/get-started/docker.md b/src/content/docs/docs/get-started/docker.md index 87825ea..745b4c8 100644 --- a/src/content/docs/docs/get-started/docker.md +++ b/src/content/docs/docs/get-started/docker.md @@ -12,7 +12,7 @@ data you want to keep. ## Use the release image -`ghcr.io/firenook-dev/firenook:0.2.4` holds Node 24 and the `firenook` npm +`ghcr.io/firenook-dev/firenook:0.2.5` holds Node 24 and the `firenook` npm package of that version, nothing else, for linux/amd64 and linux/arm64. `latest` is the newest release. Mount the project, with its `firebase.json`, rules and functions, at `/project`, publish the ports you use, and start the @@ -21,7 +21,7 @@ emulators on every address in the container: ```sh docker run --rm -v "$PWD:/project" \ -p 4000:4000 -p 8080:8080 -p 9099:9099 -p 9199:9199 \ - ghcr.io/firenook-dev/firenook:0.2.4 \ + ghcr.io/firenook-dev/firenook:0.2.5 \ emulators:start --project demo-shop --host 0.0.0.0 ``` @@ -40,7 +40,7 @@ In Compose, or as a CI service container: ```yaml title="compose.yaml" services: firebase: - image: ghcr.io/firenook-dev/firenook:0.2.4 + image: ghcr.io/firenook-dev/firenook:0.2.5 command: emulators:start --project demo-shop --host 0.0.0.0 volumes: - ./:/project diff --git a/src/content/docs/docs/get-started/install.mdx b/src/content/docs/docs/get-started/install.mdx index ab5ae0c..f201a74 100644 --- a/src/content/docs/docs/get-started/install.mdx +++ b/src/content/docs/docs/get-started/install.mdx @@ -115,7 +115,7 @@ stops: ```console $ npx firenook binary-path -Firenook: Missing @firenook/cli-darwin-arm64@0.2.4. Install with optional dependencies enabled. No postinstall script is needed. +Firenook: Missing @firenook/cli-darwin-arm64@0.2.5. Install with optional dependencies enabled. No postinstall script is needed. ``` :::note @@ -152,7 +152,7 @@ published with, and prints where it is: ```console $ npx firenook --version -0.2.4 (engine source 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9) +0.2.5 (engine source 6683b3edb53941a8e7fd34b89a45855b9fff0b50) $ npx firenook binary-path ~/demo-shop/node_modules/@firenook/cli-darwin-arm64/bin/firenook ``` @@ -188,8 +188,8 @@ $ npx firenook doctor }, "warnings": [], "problems": [], - "version": "0.2.4", - "engineRevision": "4be26bedd0ce6124c3267d6936ec6d9b539a2bc9" + "version": "0.2.5", + "engineRevision": "6683b3edb53941a8e7fd34b89a45855b9fff0b50" } ``` diff --git a/src/content/docs/docs/get-started/new-project.mdx b/src/content/docs/docs/get-started/new-project.mdx index deee990..fe4cb46 100644 --- a/src/content/docs/docs/get-started/new-project.mdx +++ b/src/content/docs/docs/get-started/new-project.mdx @@ -62,7 +62,7 @@ Enter takes them all: ╭──────────────────────────────────────────────────────────────────────────╮ │ │ │ ▄█ │ - │ ▄███▀ ▄ firenook 0.2.4 │ + │ ▄███▀ ▄ firenook 0.2.5 │ │ ▄███▀ ███▄ a new project in ~/my-app │ │ ▀██▀ ███▀ Node 24.20.0 · Claude Code found │ │ █▀▀ │ @@ -113,7 +113,7 @@ once. Each step gets a line with its time: │ │ │ Files ✓ 4 ms firebase.json, .firebaserc, rules, functions/, … │ │ Agents ✓ 0 ms .mcp.json for Claude Code │ - │ Firenook ✓ 517 ms 0.2.4 in package.json │ + │ Firenook ✓ 517 ms 0.2.5 in package.json │ │ Packages ✓ 14.1 s npm install in functions/, 241 packages │ │ Build ✓ 1.1 s tsc, into functions/lib │ │ │ @@ -208,7 +208,7 @@ The scripts, as `init` writes them for TypeScript: "emulators": "firenook emulators:start --keep-data --build" }, "devDependencies": { - "firenook": "0.2.4" + "firenook": "0.2.5" } } ``` @@ -289,7 +289,7 @@ Firenook init: project demo-my-app in ~/my-app wrote ~/my-app/functions/.gitignore wrote ~/my-app/.gitignore done Agents: .mcp.json for Claude Code (0.0 s) - done Firenook: 0.2.4 in package.json (0.4 s) + done Firenook: 0.2.5 in package.json (0.4 s) done Packages: npm install in functions/, 241 packages (2.3 s) done Build: tsc, into functions/lib (0.8 s) Next steps: diff --git a/src/content/docs/docs/get-started/tests.md b/src/content/docs/docs/get-started/tests.md index 0e65d60..b4de3ec 100644 --- a/src/content/docs/docs/get-started/tests.md +++ b/src/content/docs/docs/get-started/tests.md @@ -149,7 +149,7 @@ builds the functions and starts the emulators around it. Trimmed: ```console $ npm run test:integration Firenook: running the script through the shell as the official CLI does; use -- for an argv command without shell interpretation -Firenook 0.2.4; engine 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9; disk/WAL state ~/demo-shop/.firenook/runs/session-Syhid2/state +Firenook 0.2.5; engine 6683b3edb53941a8e7fd34b89a45855b9fff0b50; disk/WAL state ~/demo-shop/.firenook/runs/session-Syhid2/state Services: firestore, auth, storage, functions, pubsub; Emulator UI on; host localhost Build: functions runs its build script before the emulators start firenook functions: Loaded functions definitions from source: helloWorld, orderTotal. diff --git a/src/content/docs/docs/help/former-name.md b/src/content/docs/docs/help/former-name.md index d384f22..86b7227 100644 --- a/src/content/docs/docs/help/former-name.md +++ b/src/content/docs/docs/help/former-name.md @@ -71,7 +71,7 @@ where Fireside left it. Start with the same `--state-dir`, and the same ```console $ npx firenook emulators:start --keep-data --state-dir ./local-state --import ./seed -Firenook 0.2.4; engine 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9; disk/WAL state ~/demo-shop/local-state +Firenook 0.2.5; engine 6683b3edb53941a8e7fd34b89a45855b9fff0b50; disk/WAL state ~/demo-shop/local-state firenook resuming validated native state (seed import skipped) firenook: indexed the top-level fields of 5 Firestore documents in 0.0 s All emulators ready diff --git a/src/content/docs/docs/help/report.md b/src/content/docs/docs/help/report.md index 171f2f6..a0c4299 100644 --- a/src/content/docs/docs/help/report.md +++ b/src/content/docs/docs/help/report.md @@ -17,7 +17,7 @@ Search the open and closed issues first: someone may have reported it, and ```console $ npx firenook --version -0.2.4 (engine source 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9) +0.2.5 (engine source 6683b3edb53941a8e7fd34b89a45855b9fff0b50) ``` Include the whole line: the engine revision says exactly which engine you @@ -51,7 +51,7 @@ log to the run's folder and prints where: ```console $ npx firenook emulators:start --plain --debug --only firestore -Firenook 0.2.4; engine 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9; disk/WAL state ~/demo-shop/.firenook/runs/session-12IyTo/state +Firenook 0.2.5; engine 6683b3edb53941a8e7fd34b89a45855b9fff0b50; disk/WAL state ~/demo-shop/.firenook/runs/session-12IyTo/state Services: firestore; Emulator UI on; host localhost Demo project demo-shop: no cloud service is contacted, but user Functions can still reach external providers; this CLI is not a network sandbox. Debug log: ~/demo-shop/.firenook/runs/session-12IyTo/firenook-debug.log diff --git a/src/content/docs/docs/help/troubleshooting.md b/src/content/docs/docs/help/troubleshooting.md index 659213b..141cf78 100644 --- a/src/content/docs/docs/help/troubleshooting.md +++ b/src/content/docs/docs/help/troubleshooting.md @@ -82,7 +82,7 @@ it where your app connects too. Every emulator needs its own port; see ```console $ npx firenook emulators:start -Firenook: Missing @firenook/cli-darwin-arm64@0.2.4. Install with optional dependencies enabled. No postinstall script is needed. +Firenook: Missing @firenook/cli-darwin-arm64@0.2.5. Install with optional dependencies enabled. No postinstall script is needed. ``` The native engine for your machine comes in an optional dependency, one diff --git a/src/content/docs/docs/help/versions.md b/src/content/docs/docs/help/versions.md index d63ac59..8b1b1c8 100644 --- a/src/content/docs/docs/help/versions.md +++ b/src/content/docs/docs/help/versions.md @@ -8,7 +8,7 @@ install one on purpose, and how to check the package and the engine you have. ## Releases -The current release is `0.2.4`. The first for public use was `0.2.0`, and +The current release is `0.2.5`. The first for public use was `0.2.0`, and before it came the previews, `0.2.0-next.1` to `0.2.0-next.8`. Each release is listed, with what it changed and what it passed, on the [releases page](https://github.com/firenook-dev/firenook/releases) and in the @@ -20,7 +20,7 @@ only held the name before the first release and contains no emulator. ## Channels -npm has two tags for Firenook. `latest` is the release to install, `0.2.4` +npm has two tags for Firenook. `latest` is the release to install, `0.2.5` today; `npm install firenook` and a bare `npx firenook` get it on any Node from 20 up. `next` carries previews, which keep their own `-next` versions. `npm view firenook dist-tags` shows where each tag points. @@ -34,9 +34,9 @@ and every CI run gets the same release until you upgrade: npm install --save-dev firenook ``` -npm records it as `^0.2.4`: an update can take a later `0.2` release, never +npm records it as `^0.2.5`: an update can take a later `0.2` release, never `0.3` or a preview. To install one release in particular, name it, as in -`npm install --save-dev firenook@0.2.4`. +`npm install --save-dev firenook@0.2.5`. Firenook never upgrades itself. In a terminal, it asks for the version tags (from firenook.dev from 0.2.5, the npm registry before) at most once a day, in the background, and the next start @@ -51,8 +51,8 @@ say whether it changes how data is stored. ## Data between releases -Data kept with `--keep-data` moves between `0.2.4`, `0.2.3`, `0.2.2`, `0.2.1` -and `0.2.0` as it is. It also moves between `0.2.0` and the last preview, in +Data kept with `--keep-data` moves between `0.2.5`, `0.2.4`, `0.2.3`, +`0.2.2`, `0.2.1` and `0.2.0` as it is. It also moves between `0.2.0` and the last preview, in both directions: - The first `0.2.0` start of data an earlier release saved builds the @@ -78,14 +78,14 @@ both: ```console $ npx firenook --version -0.2.4 (engine source 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9) +0.2.5 (engine source 6683b3edb53941a8e7fd34b89a45855b9fff0b50) ``` The launcher records the engine it expects in `release.json`: ```json title="node_modules/firenook/release.json" { - "engineRevision": "4be26bedd0ce6124c3267d6936ec6d9b539a2bc9", + "engineRevision": "6683b3edb53941a8e7fd34b89a45855b9fff0b50", "rustToolchain": "1.100.0", "platforms": { "darwin-arm64": "aarch64-apple-darwin", @@ -102,10 +102,10 @@ cut short: ```json title="node_modules/@firenook/cli-darwin-arm64/receipt.json" { - "version": "0.2.4", + "version": "0.2.5", "platform": "darwin-arm64", "target": "aarch64-apple-darwin", - "engineRevision": "4be26bedd0ce6124c3267d6936ec6d9b539a2bc9", + "engineRevision": "6683b3edb53941a8e7fd34b89a45855b9fff0b50", "sha256": "…" } ``` @@ -153,7 +153,7 @@ They do not replace npm's provenance or your lockfile. ## What a release has passed -Each release on GitHub, tagged `npm-v0.2.4` and so on, names its +Each release on GitHub, tagged `npm-v0.2.5` and so on, names its engine revision and the CI runs it passed, and carries: - the published tarballs, the launcher's and each platform's; @@ -166,8 +166,8 @@ You can compare what npm serves with the manifest. `npm pack` downloads the tarball, and its SHA-256 must match the manifest's: ```sh -npm pack firenook@0.2.4 -shasum -a 256 firenook-0.2.4.tgz +npm pack firenook@0.2.5 +shasum -a 256 firenook-0.2.5.tgz ``` A platform is supported for a release only when that release's run passed on diff --git a/src/content/docs/docs/index.mdx b/src/content/docs/docs/index.mdx index 1228bb5..6da3500 100644 --- a/src/content/docs/docs/index.mdx +++ b/src/content/docs/docs/index.mdx @@ -59,7 +59,7 @@ Java and nothing else to download. ## Status -These docs describe Firenook `0.2.4`. It +These docs describe Firenook `0.2.5`. It runs on Node 22, 24 or 26, on macOS (Apple silicon and Intel), Linux x64 and arm64 with glibc 2.28 or newer, and Windows x64. Every release passes conformance replays against the official emulator and packed installs on all diff --git a/src/content/docs/docs/reference/cli.md b/src/content/docs/docs/reference/cli.md index c7e748e..241bbfb 100644 --- a/src/content/docs/docs/reference/cli.md +++ b/src/content/docs/docs/reference/cli.md @@ -1,6 +1,6 @@ --- title: CLI commands -description: Every firenook command and flag in 0.2.4, grouped as firenook --help groups them, with what each does and its default. +description: Every firenook command and flag in 0.2.5, grouped as firenook --help groups them, with what each does and its default. --- Every command the `firenook` executable takes, grouped as `firenook --help` @@ -9,7 +9,7 @@ groups them. Run them through your package manager (`npx firenook ...`, ```console $ npx firenook --version -0.2.4 (engine source 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9) +0.2.5 (engine source 6683b3edb53941a8e7fd34b89a45855b9fff0b50) ``` `firenook --help`, `-h` or `help` prints one help text for every command, @@ -293,8 +293,8 @@ $ npx firenook doctor ... "warnings": [], "problems": [], - "version": "0.2.4", - "engineRevision": "4be26bedd0ce6124c3267d6936ec6d9b539a2bc9" + "version": "0.2.5", + "engineRevision": "6683b3edb53941a8e7fd34b89a45855b9fff0b50" } ``` diff --git a/src/content/docs/docs/reference/mcp-tools.mdx b/src/content/docs/docs/reference/mcp-tools.mdx index de97225..ac47e54 100644 --- a/src/content/docs/docs/reference/mcp-tools.mdx +++ b/src/content/docs/docs/reference/mcp-tools.mdx @@ -6,7 +6,7 @@ description: All 55 tools firenook mcp gives a coding agent, by group, with what import McpTools from '../../../../components/docs/McpTools.astro'; `firenook mcp` serves these 55 tools to a coding agent, in this order. The -list is what the server answers to `tools/list` in 0.2.4. To connect +list is what the server answers to `tools/list` in 0.2.5. To connect an agent, see [Connect your coding agent](/docs/tools/mcp). Two marks recur below: diff --git a/src/content/docs/docs/services/firestore.mdx b/src/content/docs/docs/services/firestore.mdx index 97d6f0f..4449c45 100644 --- a/src/content/docs/docs/services/firestore.mdx +++ b/src/content/docs/docs/services/firestore.mdx @@ -354,7 +354,9 @@ curl -X PATCH -H 'Authorization: Bearer owner' -H 'Content-Type: application/jso - **Transactions are optimistic.** A write that conflicts with a read-write transaction succeeds, and the transaction's commit then fails with - `ABORTED`, so the SDK runs it again. The official emulator holds a lock + `ABORTED`, so the SDK runs it again. A write conflicts when it changes a + document the transaction read, or the results of a query it ran, including + a query that found nothing. The official emulator holds a lock instead and aborts the write. A test that races a write against a transaction sees a different side fail. - **REST follows production** where the official emulator's REST adapter diff --git a/src/content/docs/docs/services/rules.mdx b/src/content/docs/docs/services/rules.mdx index d4fe218..fe245ba 100644 --- a/src/content/docs/docs/services/rules.mdx +++ b/src/content/docs/docs/services/rules.mdx @@ -54,6 +54,18 @@ says where it went wrong: firenook storage: rules for every bucket in ~/demo-shop/storage.rules did not compile; the rules in force are unchanged: 9:1: Unexpected '}'. ``` +A file that compiles but names a method, service or variable the rules +language does not have, such as `allow writes`, is installed with the +official compiler's warnings, at start-up and on each reload. The misspelled +part allows nothing: + +```text +firenook firestore: firestore.rules:5:19 - WARNING Invalid method name: writes. +firenook firestore: database "(default)" rules reloaded from ~/demo-shop/firestore.rules +``` + +The official emulator prints these warnings on a reload only. + Tests can also replace the rules over HTTP. On the Firestore port, `PUT /emulator/v1/projects/:securityRules` replaces the rules of every database of the project, as on the official emulator. It reads the body diff --git a/src/content/docs/docs/services/storage.mdx b/src/content/docs/docs/services/storage.mdx index e0f2e1f..d69efcd 100644 --- a/src/content/docs/docs/services/storage.mdx +++ b/src/content/docs/docs/services/storage.mdx @@ -47,7 +47,9 @@ The `storage` section takes the same three forms as the official CLI: - **Both APIs:** uploads (simple, multipart and resumable), downloads, metadata and custom metadata, download tokens, listing with pagination, - copies and deletes, and gzip. + copies and deletes, and gzip. A token the Admin SDK sets in the + `firebaseStorageDownloadTokens` metadata becomes the file's download token, + as on the official emulator. - **Security Rules, evaluated in the engine.** No Java and no rules runtime to download. Version 1 and `rules_version = '2'` files are compiled natively, including `firestore.get()` and `firestore.exists()` against the local diff --git a/src/content/docs/docs/tools/mcp.mdx b/src/content/docs/docs/tools/mcp.mdx index 1fea289..940ba77 100644 --- a/src/content/docs/docs/tools/mcp.mdx +++ b/src/content/docs/docs/tools/mcp.mdx @@ -163,7 +163,7 @@ agent starts it in, and takes the project id from there. Its first line, on stderr, says what it found: ```text -firenook mcp 0.2.4: 55 tools over stdio for project demo-shop (from ~/demo-shop/firebase.json); local emulators only +firenook mcp 0.2.5: 55 tools over stdio for project demo-shop (from ~/demo-shop/firebase.json); local emulators only ``` `--project ` picks the project, and `--config ` reads a diff --git a/src/content/docs/docs/tools/terminal.md b/src/content/docs/docs/tools/terminal.md index 8b1b4f4..a042c57 100644 --- a/src/content/docs/docs/tools/terminal.md +++ b/src/content/docs/docs/tools/terminal.md @@ -19,7 +19,7 @@ of `?`. The empty rows above the footer are left out. ╭──────────────────────────────────────────────────────────────────────╮ │ │ │ ▄█ │ - │ ▄███▀ ▄ firenook 0.2.4 │ + │ ▄███▀ ▄ firenook 0.2.5 │ │ ▄███▀ ███▄ demo-shop · picking up the data saved 1 minute ago │ │ ▀██▀ ███▀ Node 24.20.0 · data in .firenook/state │ │ █▀▀ │ @@ -340,7 +340,7 @@ Firenook prints plain lines, with no screen, when: The plain lines look like this (trimmed): ```text -Firenook 0.2.4; engine 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9; disk/WAL state ~/demo-shop/.firenook/state +Firenook 0.2.5; engine 6683b3edb53941a8e7fd34b89a45855b9fff0b50; disk/WAL state ~/demo-shop/.firenook/state Services: firestore, auth, storage, functions, pubsub; Emulator UI on; host localhost firenook: Starting emulators: auth, functions, firestore, pubsub, storage firenook functions: Loaded functions definitions from source: checkout, sendReceipt, stripeWebhook, nightlyReport. @@ -387,7 +387,7 @@ splits into two lines, and below 64 columns the banner drops the flame: ```text +------------------------------------------------------+ | | - | firenook 0.2.4 | + | firenook 0.2.5 | | demo-shop - a fresh start | | Node 24.20.0 - data in .firenook/... | | | @@ -425,7 +425,7 @@ tags: from 0.2.5 it asks firenook.dev, which answers npm's tags and counts the day's checks by version and platform (see [privacy](/privacy)), and the npm registry when firenook.dev does not answer. The answer shows on the next start, as the Update row of the ready summary, so the check never slows a start down. It follows -the channel of the version you have: `latest` for a release such as 0.2.4, +the channel of the version you have: `latest` for a release such as 0.2.5, and `next` for a preview, which also hears of a later release on `latest`. It gives the install command for your package manager, from your lockfile. It never runs in plain output, in CI, or with diff --git a/src/data/conformance/history.json b/src/data/conformance/history.json index 59966a3..0cc12ab 100644 --- a/src/data/conformance/history.json +++ b/src/data/conformance/history.json @@ -138,5 +138,12 @@ "total": 6791, "production": 1681, "official": 5110 + }, + { + "release": "0.2.5", + "date": "2026-11-14", + "total": 6791, + "production": 1681, + "official": 5110 } ] diff --git a/src/data/conformance/summary.json b/src/data/conformance/summary.json index 81b449d..89664fd 100644 --- a/src/data/conformance/summary.json +++ b/src/data/conformance/summary.json @@ -1,13 +1,13 @@ { - "release": "0.2.4", - "importedAt": "2026-11-13", + "release": "0.2.5", + "importedAt": "2026-11-14", "total": 6791, "production": 1681, "official": 5110, "scenarios": 595, - "checked": 6414, + "checked": 6439, "differs": 351, - "unreplayed": 26, + "unreplayed": 1, "checkedProduction": 1630, "services": [ { @@ -345,9 +345,9 @@ "production": 1187, "official": 1497, "scenarios": 241, - "checked": 2396, + "checked": 2421, "differs": 262, - "unreplayed": 26, + "unreplayed": 1, "checkedProduction": 1141, "sets": [ { @@ -375,9 +375,9 @@ "recordedAt": "2026-11-13", "scenarios": 16, "answers": 120, - "checked": 94, + "checked": 119, "differs": 0, - "unreplayed": 26, + "unreplayed": 1, "start": 1187 }, { @@ -531,13 +531,13 @@ ], [ 1187, - 94, + 119, "official", "c" ], [ - 1281, - 26, + 1306, + 1, "official", "u" ], diff --git a/src/data/engine/CHANGELOG.md b/src/data/engine/CHANGELOG.md index c253f6c..3209e0e 100644 --- a/src/data/engine/CHANGELOG.md +++ b/src/data/engine/CHANGELOG.md @@ -1,3 +1,63 @@ +# 0.2.5 — two transactions that find nothing no longer both create, compile errors answered as the official emulator answers them, an Admin SDK's download token kept, and no four-second start on Windows after a crash + +- Pin the engine to `6683b3edb53941a8e7fd34b89a45855b9fff0b50`, main after + every 0.2.5 pull request merged (the merge of + [PR #248](https://github.com/firenook-dev/firenook/pull/248)). CI + ([run 43582162294](https://github.com/firenook-dev/firenook/actions/runs/43582162294)), + the five-platform packed-install matrix + ([run 43582162275](https://github.com/firenook-dev/firenook/actions/runs/43582162275)) + and the real SDK clients on Android, iOS and the web + ([run 43582182279](https://github.com/firenook-dev/firenook/actions/runs/43582182279)) + passed on it. The engine is built with Rust 1.100.0. +- **Firestore.** A transaction's queries are checked at commit, not only the + documents they returned (#235). Two transactions that each looked for a + document, found none and created one both committed, so it existed twice + (26 of 30 runs of the reporter's script on 0.2.4; 0 on 0.2.5 and on + firebase-tools 15.35.0). The later commit is now ABORTED, and the SDK + retries it, whenever another commit changed a query's results, a query that + found nothing included. Transactions stay optimistic: the first commit + wins, where the official emulator locks and aborts the other write. +- **Storage.** A download token the Admin SDK names in an object's metadata + (`firebaseStorageDownloadTokens`) is the object's token, as the official + emulator keeps it: a client's `getDownloadURL` answers it instead of + minting another (#221). Objects saved before are read the same way. +- **Starting after a crash.** A suite killed without stopping leaves its hub + locator behind, and the next start asked each address in it one after + another, two seconds each. Windows does not refuse a closed port at once, + so that start waited four seconds; it now asks them at once, with 200 ms + for an address to answer (#181). On Windows in CI, the check of a killed + suite's locator took 4.0 s before and passes in well under a second now. +- **Security Rules.** A reload that does not compile is answered as the + official emulator answers it, every problem after the first included: the + parser recovers from an error as the official ANTLR parser does (#229). + 119 of the 120 recorded reloads now match, 25 more than 0.2.4; the last, + `rules_version = '1'`, needs version 1 of the language and is #247. Rules + that compile with the official compiler's warnings (an unknown service or + method, a parameter or let nothing reads) are put in force as officially, + so a misspelled service governs nothing, every request is denied, and it is + no longer refused at start. Each warning is logged as the official CLI + logs it after a reload (`firestore.rules:2:9 - WARNING Invalid service + name: cloud.firestor.`), and at start too. +- **The conformance record.** 6,791 answers recorded from + production and the official emulators, in 43 sets, as in 0.2.4. 6,439 are + compared exactly (6,414 in 0.2.4), 351 are compared and different on + purpose, each with its reason, and 1 is listed, under #247 (26 under #229 + in 0.2.4). +- **The release check is counted.** The once-a-day check for a newer + release asks firenook.dev, which answers npm's version tags and counts the + day's checks by Firenook version and platform, and keeps nothing else: no + address, id or project (#240). The npm registry is asked when firenook.dev + does not answer. `DO_NOT_TRACK=1` turns the check off, beside CI, the plain + output, `FIRENOOK_NO_UPDATE_CHECK=1` and `NO_UPDATE_NOTIFIER=1`. +- **Releases.** A release's engine is tested once, on main: the release pull + request and the release run check that the pinned commit passed CI, the + packed installs and the real SDK clients, instead of running them again + (#245). The iOS client checks run on two Macs at once. A CI test that could + lose a free port to a test beside it starts again on new ports (#234). +- No data format changed: 0.2.5 opens what 0.2.4 saved, and 0.2.4 opens what + 0.2.5 saves. +- Published straight to `latest`, as 0.2.4 was. + # 0.2.4 — all but 26 recorded answers replayed, 18 bugs fixed, and deep Security Rules no longer stop the engine - Pin the engine to `4be26bedd0ce6124c3267d6936ec6d9b539a2bc9`, main after diff --git a/src/data/engine/README.md b/src/data/engine/README.md index 8d86f07..98e97c8 100644 --- a/src/data/engine/README.md +++ b/src/data/engine/README.md @@ -1,7 +1,7 @@ # From the engine repository Copied from github.com/firenook-dev/firenook at the release the site -describes (tag `npm-v0.2.4`). Copy them again for a new release. +describes (tag `npm-v0.2.5`). Copy them again for a new release. - `CHANGELOG.md`: `packaging/CHANGELOG.md`, which /changelog and its feed are drawn from. Links into the former repository (archived, no longer diff --git a/src/data/mcp-tools.json b/src/data/mcp-tools.json index 57f7f96..790afb2 100644 --- a/src/data/mcp-tools.json +++ b/src/data/mcp-tools.json @@ -1,5 +1,5 @@ { - "version": "0.2.4", + "version": "0.2.5", "tools": [ { "name": "firenook_status", diff --git a/src/lib/changelog.ts b/src/lib/changelog.ts index 55383e5..7c5c2db 100644 --- a/src/lib/changelog.ts +++ b/src/lib/changelog.ts @@ -8,6 +8,7 @@ import type { Panel } from './panels'; /** When each version reached npm (`npm view firenook time`; the 0.1 line was @fireside-dev/cli). */ const published: Record = { + '0.2.5': '2026-11-14T12:04:40Z', '0.2.4': '2026-11-13T08:45:09Z', '0.2.3': '2026-11-12T06:01:06Z', '0.2.2': '2026-11-11T00:27:36Z', diff --git a/src/lib/compatibility.ts b/src/lib/compatibility.ts index baec67a..7ef185f 100644 --- a/src/lib/compatibility.ts +++ b/src/lib/compatibility.ts @@ -15,7 +15,7 @@ export interface Surface { differs?: string[]; } -export const record = 'https://github.com/firenook-dev/firenook/blob/npm-v0.2.4/COMPATIBILITY.md'; +export const record = 'https://github.com/firenook-dev/firenook/blob/npm-v0.2.5/COMPATIBILITY.md'; export const surfaces: Surface[] = [ { @@ -41,7 +41,7 @@ export const surfaces: Surface[] = [ differs: [ 'The official emulator refuses more than one database and then loads no rules; Firenook serves them all.', 'A rules file that does not compile leaves the rules in force serving requests, and the console shows the errors beside the file.', - 'Transactions are optimistic: a write that conflicts with a read-write transaction succeeds and the transaction’s commit is aborted, where the official emulator holds a lock and aborts the write.', + 'Transactions are optimistic: a write that conflicts with a read-write transaction, by changing a document it read or the results of a query it ran, succeeds and the transaction’s commit is aborted, where the official emulator holds a lock and aborts the write.', 'Over REST, Firenook keeps production’s behaviour where the official adapter departs from it, such as answering partitionQuery.', ], }, @@ -73,7 +73,7 @@ export const surfaces: Surface[] = [ covers: [ 'Uploads, downloads, metadata, gzip and pagination on the Firebase and Cloud Storage APIs', 'Uploads as the native iOS and Android SDKs and browsers send them, checked with the real clients', - 'A download token for an object the Admin SDK saved, made on its first Firebase read as the official emulator makes it, so getDownloadURL() works', + 'A download token for an object the Admin SDK saved, made on its first Firebase read as the official emulator makes it, so getDownloadURL() works; a token the Admin SDK names in firebaseStorageDownloadTokens becomes the object’s own', 'Several buckets through storage targets, each target’s rules applied to every bucket it maps to', 'Security Rules with production’s request model, including firestore.get() and exists()', 'Rules files reloaded when you save them, with or without Firestore running', @@ -316,6 +316,14 @@ export interface Found { } export const found: { release: string; date: string | null; items: Found[] }[] = [ + { + release: '0.2.5', + date: '2026-11-14', + items: [ + { number: 235, kind: 'issue', area: 'Firestore', text: 'A query in a transaction that found nothing was not checked at commit, so two “find or create” transactions could both create.', recorded: false }, + { number: 221, kind: 'issue', area: 'Cloud Storage', text: 'A download token the Admin SDK set in `firebaseStorageDownloadTokens` was replaced by a new one on the web SDK’s `getDownloadURL`.', recorded: false }, + ], + }, { release: '0.2.3', date: '2026-11-12', diff --git a/src/lib/pages.ts b/src/lib/pages.ts index 9971c3b..ddc20cc 100644 --- a/src/lib/pages.ts +++ b/src/lib/pages.ts @@ -52,7 +52,7 @@ export const pages = { '/compatibility': { title: 'Compatibility: what each emulator covers · Firenook', description: - 'What Firenook’s Firestore, Auth, Storage, Functions, Extensions, Pub/Sub, Cloud Tasks and Eventarc emulators cover in 0.2.4, and what they do not.', + 'What Firenook’s Firestore, Auth, Storage, Functions, Extensions, Pub/Sub, Cloud Tasks and Eventarc emulators cover in 0.2.5, and what they do not.', card: { title: 'What each emulator covers', subtitle: 'Service by service, what Firenook does in this release, what it does not, and where it differs from the official emulator.' }, crumb: 'Compatibility', }, diff --git a/src/lib/site.ts b/src/lib/site.ts index 0e4d3b0..6ef8bcd 100644 --- a/src/lib/site.ts +++ b/src/lib/site.ts @@ -13,12 +13,12 @@ export const site = { npm: 'https://www.npmjs.com/package/firenook', license: 'https://github.com/firenook-dev/firenook/blob/main/LICENSE', /** The release the site describes. The recordings name the release they are from. */ - version: '0.2.4', + version: '0.2.5', install: 'npm install --save-dev firenook', /** The release the site describes, as its changelog names it. */ release: { - title: 'All but 26 recorded answers replayed, 18 bugs fixed, and deep Security Rules no longer stop the engine', - url: '/changelog/0.2.4', + title: 'Two transactions that find nothing no longer both create, compile errors answered as the official emulator answers them, an Admin SDK’s download token kept, and no four-second start on Windows after a crash', + url: '/changelog/0.2.5', }, requirements: 'Node 22, 24 or 26 on macOS, Linux with glibc 2.28 or newer, or Windows x64', } as const;