diff --git a/scripts/history-policy-gate.py b/scripts/history-policy-gate.py index bcddd6a8dc..a24c5993de 100644 --- a/scripts/history-policy-gate.py +++ b/scripts/history-policy-gate.py @@ -1,5 +1,37 @@ #!/usr/bin/env python3 -"""Bounded full-history audit and required baseline-delta policy gate.""" +"""Bounded full-history audit and required baseline-delta policy gate. + +Secret detection is two-stage: + +1. ``secret_rule.pickaxe_regex`` is a POSIX ERE that git evaluates natively + (``git log -S --pickaxe-regex`` for history, ``git grep -E`` for a tree). + It only narrows candidates cheaply; it is deliberately a superset of the + precise patterns on the line that carries the credential prefix, and it is + interval-free: bounded repetitions such as ``{36}`` make git's POSIX + matcher markedly slower over full history. +2. ``secret_rule.credential_patterns`` are Python regexes evaluated over the + whole blob. They decide. Whole-blob matching lets a PEM block require key + material on the lines after its BEGIN line (git's pickaxe is line-bound), + and the ``password`` group of a database URL is checked against + ``secret_rule.password_policy`` so placeholders and documented local + development defaults are not reported as credentials. + +Two further, narrow filters keep test fixtures out without path allowlists: + +* ``synthetic_run_length``: a match containing an ascending run of that many + consecutive digits or letters (``ABCDEFGH``, ``01234567``) is a hand-made + fixture. A random credential contains such a run with negligible + probability (about 3e-11 for a 36-character token and a run of 8). +* ``reviewed_blobs``: individually reviewed git blob IDs (for example a + self-signed loopback TLS key read only by tests). The exemption is bound to + the exact content; any edit produces a new blob and is scanned again. + +A history candidate counts only when the precise match count of the path rises +in that commit (an introduction). Bare prefixes in detectors, tests and +warning docs never reach a finding. The current-tree scan applies the same +precise check at the tip, so an introduction the pickaxe cannot see (its +candidate count unchanged) is still caught there. +""" import argparse import hashlib @@ -15,8 +47,20 @@ class GateError(RuntimeError): pass -FULL_AUDIT_SCANNER_VERSIONS = ["commit-path/v2", "diff-pickaxe/v2", "public-tree/v2"] +FULL_AUDIT_SCANNER_VERSIONS = ["commit-path/v2", "diff-pickaxe/v3", "public-tree/v3"] BASELINE_SCANNER_VERSIONS = FULL_AUDIT_SCANNER_VERSIONS +SECRET_RULE_KEYS = { + "id", + "rationale", + "pickaxe_regex", + "credential_patterns", + "password_policy", + "synthetic_run_length", + "reviewed_blobs", +} +MIN_SYNTHETIC_RUN_LENGTH = 8 +SEQUENCES = ("0123456789", "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ") +PASSWORD_POLICY_KEYS = {"min_length", "placeholder_prefixes", "placeholder_markers", "dev_default_passwords"} def canonical(value): @@ -68,9 +112,93 @@ def load_policy(path): or set(source_paths) - {policy["policy_source_path"]} != set(sources) ): raise GateError("invalid scanner-source contract") + validate_secret_rule(policy["secret_rule"]) return policy +def string_list(value): + return isinstance(value, list) and all(isinstance(item, str) and item for item in value) + + +def validate_secret_rule(rule): + if not isinstance(rule, dict) or set(rule) != SECRET_RULE_KEYS: + raise GateError("invalid secret-rule contract") + if not all(isinstance(rule[key], str) and rule[key] for key in ("id", "rationale", "pickaxe_regex")): + raise GateError("invalid secret-rule contract") + patterns = rule["credential_patterns"] + if ( + not isinstance(patterns, list) + or not patterns + or not all(isinstance(item, dict) and set(item) == {"id", "regex"} and all(isinstance(v, str) and v for v in item.values()) for item in patterns) + or len({item["id"] for item in patterns}) != len(patterns) + ): + raise GateError("invalid credential-pattern contract") + for item in patterns: + try: + compiled = re.compile(item["regex"]) + except re.error as exc: + raise GateError(f"invalid credential pattern: {item['id']}") from exc + if compiled.groupindex and set(compiled.groupindex) != {"password"}: + raise GateError(f"credential pattern may only name a password group: {item['id']}") + passwords = rule["password_policy"] + if ( + not isinstance(passwords, dict) + or set(passwords) != PASSWORD_POLICY_KEYS + or not isinstance(passwords["min_length"], int) + or passwords["min_length"] < 1 + or not all(string_list(passwords[key]) for key in PASSWORD_POLICY_KEYS - {"min_length"}) + or any(value != value.lower() for value in passwords["dev_default_passwords"]) + ): + raise GateError("invalid password-policy contract") + run = rule["synthetic_run_length"] + if not isinstance(run, int) or isinstance(run, bool) or run < MIN_SYNTHETIC_RUN_LENGTH: + raise GateError("invalid synthetic-run contract") + reviewed = rule["reviewed_blobs"] + if ( + not isinstance(reviewed, list) + or not all( + isinstance(item, dict) + and set(item) == {"blob", "reason"} + and isinstance(item["blob"], str) + and re.fullmatch(r"[0-9a-f]{40}|[0-9a-f]{64}", item["blob"]) + and isinstance(item["reason"], str) + and item["reason"].strip() + for item in reviewed + ) + or len({item["blob"] for item in reviewed}) != len(reviewed) + ): + raise GateError("invalid reviewed-blob contract") + + +def synthetic(value, run_length): + """True when value holds an ascending run of run_length digits or letters.""" + return any(sequence[start : start + run_length] in value for sequence in SEQUENCES for start in range(len(sequence) - run_length + 1)) + + +def placeholder_password(value, passwords): + """True when a database-URL password is a placeholder or a documented dev default.""" + return ( + len(value) < passwords["min_length"] + or value.startswith(tuple(passwords["placeholder_prefixes"])) + or any(marker in value for marker in passwords["placeholder_markers"]) + or value.lower() in passwords["dev_default_passwords"] + ) + + +def credential_count(text, rule): + """Count precise credential matches in text; the decision stage of SEC001.""" + count = 0 + for pattern in rule["credential_patterns"]: + for match in re.finditer(pattern["regex"], text): + password = match.groupdict().get("password") + if password is not None and placeholder_password(password, rule["password_policy"]): + continue + if synthetic(match.group(0), rule["synthetic_run_length"]): + continue + count += 1 + return count + + def policy_fingerprint(policy): baseline = policy["baseline"] material = { @@ -180,16 +308,26 @@ def current_tree_scan(root, policy, ref="HEAD"): matches = git(root, timeout, "grep", "-I", "-l", "-E", policy["secret_rule"]["pickaxe_regex"], ref, allowed=(0, 1)).decode(errors="surrogateescape").splitlines() for value in matches: path = value.removeprefix(ref + ":") - if not scanner_source(path, policy): - object_ref = git(root, timeout, "rev-parse", f"{ref}:{path}").decode().strip() - findings.append(finding("current-secret", policy["secret_rule"]["id"], path, object_ref)) + if scanner_source(path, policy) or not secret_match_count(root, timeout, ref, path, policy["secret_rule"]): + continue + object_ref = git(root, timeout, "rev-parse", f"{ref}:{path}").decode().strip() + findings.append(finding("current-secret", policy["secret_rule"]["id"], path, object_ref)) return findings -def secret_match_count(root, timeout, ref, path, regex): - """Count secret-rule matches for path at ref. Missing path → 0.""" - blob = git(root, timeout, "show", f"{ref}:{path}", allowed=(0, 128)) - return len(re.findall(regex, blob.decode(errors="surrogateescape"))) +def secret_match_count(root, timeout, ref, path, rule): + """Count precise credential matches for path at ref. Missing path or ref, or a reviewed blob → 0.""" + blob_id = git(root, timeout, "rev-parse", "--verify", "--quiet", f"{ref}:{path}", allowed=(0, 1, 128)).decode().strip() + if not blob_id or blob_id in {item["blob"] for item in rule["reviewed_blobs"]}: + return 0 + blob = git(root, timeout, "cat-file", "blob", blob_id, allowed=(0, 128)) # 128: a gitlink, not a blob + return credential_count(blob.decode(errors="surrogateescape"), rule) + + +def secret_introduced(root, timeout, commit, path, rule): + """Pickaxe -S fires on introduce AND remove; only a rising precise count is an introduction.""" + before = secret_match_count(root, timeout, f"{commit}^", path, rule) + return secret_match_count(root, timeout, commit, path, rule) > before def merge_base(root, timeout, left, right): @@ -243,12 +381,7 @@ def delta_scan(root, policy, base): continue commit = lines_rec[0] for path in sorted(set(lines_rec[1:])): - if scanner_source(path, policy): - continue - # Pickaxe -S fires on introduce AND remove. Only flag introductions. - before = secret_match_count(root, timeout, f"{commit}^", path, regex) - after = secret_match_count(root, timeout, commit, path, regex) - if after <= before: + if scanner_source(path, policy) or not secret_introduced(root, timeout, commit, path, policy["secret_rule"]): continue findings.append(finding("delta-secret", policy["secret_rule"]["id"], path, commit)) return findings @@ -311,7 +444,7 @@ def full_audit(root, policy): lines = [line for line in record.splitlines() if line] if lines: for path in sorted(set(lines[1:])): - if not scanner_source(path, policy): + if not scanner_source(path, policy) and secret_introduced(root, timeout, lines[0], path, policy["secret_rule"]): findings.append(finding("full-secret", policy["secret_rule"]["id"], path, lines[0])) findings = bounded(findings, policy) current_ids = sorted(item["id"] for item in current_tree_scan(root, policy)) diff --git a/security/evidence/full-history-baseline-v1-review.md b/security/evidence/full-history-baseline-v1-review.md index f47278687a..589f0f6c2e 100644 --- a/security/evidence/full-history-baseline-v1-review.md +++ b/security/evidence/full-history-baseline-v1-review.md @@ -39,3 +39,52 @@ objects, not a newly accepted finding class. No rule, forbidden-path entry, source-binding requirement, or allowlist was weakened. The pending audit status remains intentional because remediation of other historical classes is outside this baseline rotation. + +## Precise SEC001 rule and baseline rotation (2026-10-17) + +The SEC001 rule matched bare prefixes (`ghp_`, `AKIA`, `sk_live_`, +`PRIVATE KEY-----`) and any database URL with a password field. Every +current-tree hit on the private integration tree (40, plus 53 history +introductions) was a secret *detector*, a test fake, a warning in +documentation, a `${VAR}` or `{placeholder}` password, a local development +default or a self-signed loopback test key. The noise hid real signals. + +- **Two stages.** The git pickaxe uses an interval-free POSIX ERE that only + narrows candidates (intervals such as `{36}` made `git log -S` exceed the + per-command timeout on the larger private tree). A precise Python check over + the blob decides: GitHub tokens with their full length, fine-grained + `github_pat_`, AWS key IDs (`…EXAMPLE` documentation keys excluded), Stripe + live keys, PEM blocks only with base64 key material, and database URLs only + with a literal password of at least eight characters that is neither a + placeholder nor a documented development default. +- **Two narrow filters.** A match containing an ascending run of eight + characters (`ABCDEFGH`, `01234567`) is a hand-made fixture; one reviewed + self-signed loopback TLS test key is exempt by Git blob ID only, so any change + to its content is scanned again. +- **History** reports an introduction only when the precise match count of a + blob rises in a commit. +- **Limits.** `command_timeout_seconds` is raised from 120 to 300 s: the + candidate pickaxe over the private tree took 81 s, too close to the old limit + for slower runners. + +### Baseline audit + +- Audit target: `b37ee3be11f2525cd785348d3e43ccdbb590fe94` +- Audit source: fresh clone of the public repository with `main`, + `cla-signatures` and all tags — the ref set of the 16,291-commit audit above + (recomputed: `main` up to `bff280` plus `cla-signatures` plus its tags gives + exactly 16,291). Open pull-request branches are not part of the baseline. +- Scanner contract: `commit-path/v2`, `diff-pickaxe/v3`, `public-tree/v3` +- Coverage: 17,061 commits, 109,865 objects, 369 findings — 368 path findings + (IP001–IP006) and one SEC001 finding (`server.md` in commit `13e3e76353`, + reachable from an archive tag). The SEC001 finding is a credential; its + rotation is tracked privately. +- Current tree: 0 accepted finding IDs (previously 11, all removed by the + precise rule). +- Runtime: full audit 533 s (limit 1,800 s). +- The evidence that shipped with the 3.11.0 export named 8,818 commits, which + matches no public ref set; it most likely came from the private integration + tree. This rotation replaces it with an audit of the public refs. + +Verified against the private integration tree: of the 93 findings the previous +rule reported there, none remains. diff --git a/security/evidence/full-history-baseline-v1.json b/security/evidence/full-history-baseline-v1.json index af6d296d95..b5d061be27 100644 --- a/security/evidence/full-history-baseline-v1.json +++ b/security/evidence/full-history-baseline-v1.json @@ -1 +1 @@ -{"audit_status":"rotation-and-rewrite-decision-pending","audited_commit":"bff280bfc8eba6959854fafcbf104b5745d794c3","counts":{"commits":8818,"findings":243,"objects":72966},"current_tree_finding_ids":["01e63476c806714159dcdc1bfc4f7b1d95f118674beed3381225f2745487fcc2","0bc233171f50ff095da09239746a80b66cecfa381806736ead09436faabf27ba","3aa407a0a9d0ba15d9b9606d2761a1e95792695df54ff389f700e4e4f05f4388","4ca14e3c3b265ed64468919f644a43dbfabd9af3ea9825bc58b533e910ed8c56","8e364ce52bf6d56b670eb810308b172c693ddf974d975f87e3a16541e2da2f10","b78d17f186d15b65ef0029c6736ec0e47045982ed61baec481ca8d6283657dff","cb7857e44eb7a2c301f39a21b90c7d91d79b2806818c0263ae1ba07afca53bb3","d32e5da1a7a3ca2c2312781d4decff7cbe4a04331f3f0c7254f0e01c4f6d7dec","d8679483dad7f7abf9b20a8250fcacf6032170dd4b060d4de71d621035a2181b","dcb409cf41fa69be9069745c5ed5b63b8c49138dbc14fd813b4828e913ba29eb","fee97bde0fb202652119f097ac96e55945ba71a6e3d8d6058d129dd6805aa148"],"finding_set_sha256":"d6cf660a68dd2ecd3b1065aba4faf215694dfe07de90884ecc1b8d639c7420a3","findings":[{"id":"73396d75d30f0a2fa97497d23b1ed95d9e79c57a6bf2cb447508720662f51f37","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"63d5f08e097dfeb217e4e586dd9ae3a891858387a68138790baa2047521c68fa","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"416a7fdb43502d9c31319d9a46afa031a00919df2ce7115130b05d1e318006b2","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"b12db6a6efee472b15d295307afbafadfe3b6f95864b2f9d832da6bbd1cd117c","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"f7c6ef8d917376935850357158e9ebf24ad529232597d30a40eeaf916576c934","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"d2f09d447fc845298991f770d57dfca707567d18890d849d157367ebc6176ebc","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"7cb5f11e5d8f8e20e9cf646a66aa947e0f90fcd8754c7bff3cfd2ad81a14ca94","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"5f0566f67f1ca05780776bd6961e464d91f33922c525264d4a5afefa84929fde","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"d8e8cc84457271ad24e913f98104862987b5fd8a9c14dfe3195f6b14656c6bae","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"b99b4692fb9d7218344ea7f3335b385e7c95357d31dd9a9fa0a788988b4ab26f","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"b477316f922eeced206a99329c0b205ddec958a7b3dfe939040e8251b8884253","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"5466ad3ee6f7241a681973dfea9558a8fd4b4dda893bdc3633b0bd2ed6fe0e7b","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"174332ffa3b3c5d0fa10f032e243e43ebc27411999c448b4c355c525abc0e068","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"82b0e223962d45616077388db54b0f05d44afb4d6aee2a93dd75a2987a6608dc","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"fcc445f838d418e159078a6e28e96b613771845ec697e1dce11221a88e69b38d","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"25249485902e8f981aaa7f0303fd9e556b76be87aac07501de13dc5e69deb687","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"2c10a65dd84ecef3858ba0d26a56c52f790bfe79c31925298e3819d1ab570673","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"a7fb5847353e1d241af4e0eda1b3829885caeaf6ad3c0d585dc8cbd88e86b0fe","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"f0388a2fbecfc5120fbba2948a39e7d567e5b7f4887729bee9341ce16611d6b2","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"fb63259c8396b1197e986160ae8910d0ad194425d7f73cdbc30256ee4efc8f14","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"a232a9ae91d128f863420a1583efca6a1f6946924532687fd4c65ac98930b7c3","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"eb4f333a79580b6a578fe182cd68b005deb395ccadebca48760316de5754a5a5","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"24835f39ad7480f7442ec38079f0ce153330dd2275957676abece58e8d5db447","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"01a272ad71777151c48757bf70660210b18e7e0da61b64fedbd0d40d5fd1c43a","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"752265265e2360178cc400de8a584d215aafe18d495b4519062ebb7310e741f1","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"25a82930267655df738349d3c19d03cf05cf9a6e866e60e1786fa6034aa1248f","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"05df22b3932d2166f2276ca0d0b207e983b1737869ea4545c32e4f7c037dfb8e","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"6b0ed4e3bf1659ae3b93266916a58e46571a8028727aa3560e2938ddffcd7600","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"8d912005ab260fdc84138f82ebc03f98bc09d19ec2a5903425c54f79d8075e94","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"bf9e6ef504efc45485fe20f108939f77a484bb9125f15ce6d902303a01b12176","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"9ff909c263bc7c426fbcfc2644f1f0ed91bb0d94a458f7b14fd2df738ec4ef74","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"b2511ff32cfde7fe4857f54e72c438d7817d7e44dea5430f3d06386c5d707968","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"148d4e2f92e43ea947a439b116455be69fb0294d3e0c1b009c1d3b9e48f19751","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"d05e1b3eb87b9369b28343078427c511f9c125fc3859da73e5dd6bfa3020be71","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"31d2b22f16eb61ffe323ea748a89f363fad76f1b86a47527efd1cc6bde8dccec","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"b59994cc3a8585808c93cc8d55b8e0a7811e9681a060d36057eeef0ac460ff2a","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"6ce8ff0be5ecf6117b0c158d9b581a1f0d856767a1c6821552a95ce6eb491eb0","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"2f86d8beeb268d599dd4bd493757163edaad3d958c728b92e580a8c5f6016dce","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"e8240848b776e1a3cc09ad14546db2e37d4f4022b9125dc3c3c3a7a1a4a6bdbc","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"fcd5995b24313032c6b0f11aec1640ec27533f1437cf931f3e401b4caf9cb53f","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"6cfcca7dc6d3efdaf1b536658fccfb9c18d3e2bce320d1aa411934b46c4f7ee4","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"49a1dd09a89a504664bc86fa47e8aa9ce563dc1f610bcd7578242485bbab8e4e","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"494aef91b19be463daad68f337823e449dcf53b629717966d6c4528e3d2afd40","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"5de600b0f525dfb2b004083265f0a63041a135a0d39ffdb8ce4f47f21f10a948","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"5069b1bf0b471899687353a8e2ad4190e51f01dd7dcbd5bbf9e211f7d3eab638","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"712018481547ed52725917c753a632dce0ac86debbd52d91f3e6d466a9be74cb","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"b90a032a9d4256721bd476222f554f16b4a9b78f2e25affa1d6246922bc567f2","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"a71da57747c898330e379026715d4a8515187dcef41796a2d3d6e63dbb5cca02","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"5cd27a35019368faed4d2960852b55414d3b546a98d34d2d1fd660f661f1002e","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"5ec8c94ada4fff1c675197c46be9fdd10f357195893f05d63dcdd6a796670cac","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"d147aebb141b34581a672e50dbb3b26709b03d2398277db75208f11045bb885f","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"9d244dfcb94f7590926905cdeecab29cee1df73ac047ebf691abbb25cecb938b","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"9a4978890ec09c04b2fc367a975b2bd72c24ed4e7f53edb348923248f905d62f","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"f50afec91219dd816ea1066e9d9db02cf5b8eaaa548c452d80b70d3724de0794","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"4cde3906860f7e9e56d23fe253d82d3238cc0a40889f0bd8b80a28fa109b68ff","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/lib.rs","rule":"IP001","scanner":"full-path"},{"id":"133db56b0a7ebdbfca7951cb1a53fd787eaa587f0b3e5fb2739005739841f0c0","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/lib.rs","rule":"IP001","scanner":"full-path"},{"id":"6296c10a7f42c3700d150b4e94a0a69e9af9c89e2066449991606541116427e1","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"2e9849df5cdbace4ebcf7df31ce136207f9e6ac53b6b65587e1bf0aeef54cf56","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"fb9abafed6df032483c11d2488d83dd4852b22c5b17b6a273201d60f183f033f","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"41a6a5c65b9b7831fc4445184e235975d4dc71163bff393252b91dd6e830b6ed","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"068de8ffc6587b3a4b1d192eb249185de43f1531ecadebd9c89f5de4d4af0df2","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"9b5f738620cfcfcdf9ddc32425186feb4e44f66ded79cde2f679345e407c3e5c","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"fc40238b8de8c3b8a0073bdd1fb56fa3b3811fa307991a8f10de3d73a68b4afe","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/routes/admin.rs","rule":"IP001","scanner":"full-path"},{"id":"ac7509eec139fa717ef99e7e1e1b07319b13142d33f25d52b6340e38ba9e318e","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/routes/admin.rs","rule":"IP001","scanner":"full-path"},{"id":"e1bbe1520158da40e907de6f3e5d23cec860c3b6cecea5bfe13b335c6aaf9be7","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"ae2e9215ca930a52a851135c58738b422752ca4a7cc4c17bff9963dad10414b8","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"8c2e990c28eefe3c14498038844a1073858a3858c0e92481ef3b41993da2f816","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"e315514f2984e51ae3d0165280eeaf7019eaee4029324b407896acbd108e1398","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"b9e78ee89b922927db35b00359451f22d422ccf1f66838d959cd7139ec4e8675","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"449ba3de7422744df03b8b03f9f116cd272f41b94542568783ce3a8098e74cf4","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"b6951c8cd58753290b89c5c2009cee50ff2c6650058145af9711f1cc44338a8c","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"c9df6a1bf9feb25150af6b428d8cee417108b0beb252278f3e70549f59d4952a","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"e0cf05a74996433d0fba9e9c6b0b01b62b07bf2c2d49a6532adca489b86eabe6","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"008e53275c523c76867acbb32d04b597827dc4f22d9a30574e41cc84dffad5e1","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"4eefe0377a7baad18219808ac88329fefccbf1c1297c80c6410586dbfb45124e","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"332ac19a36448893199c414ec49282ac39a04d192ccb73cbc587490bdee106b9","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"f0a22178d78f4d3871a78307c8082cf24cd3945dac164188fc3335d24ed9fc1b","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"c41fbd2774e9ced614d10b836039b6cf86e239adfc769712b5e30e2655467386","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"bb004bf913921950ec662456739cd747acb185cc20e187cba68b5ee02ce128c6","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"d6f5fc64548bb5b4c7325ef6e6cbfe31269dae9395f82365188eb91c70deaf0c","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"9a92e6e7da88ebe0b165de8fbee561f242908319623916f88501c9c70c4d4552","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"16fa03fd58b5d32d7d8c754c11774db36a18d87a79333062ea3a1671dee75643","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"a2275cf726d71c1c0a0c8c2a38ffc7c56425d9c7cdf67d565681941a7866e14d","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/routes/pro.rs","rule":"IP001","scanner":"full-path"},{"id":"925e3bdc867bdeeb1e9997669c95628f350188cf3d6cdb8625ed6b7a22e3e4a3","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/routes/pro.rs","rule":"IP001","scanner":"full-path"},{"id":"9bed04957adc415fd4422411be9517850d49e52f6931a99aa730213c5ec67d3b","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"35e0c9b25ebd1922cc99f190f002504d38ff8d6a0d50612998f42380d5f25b13","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"40f9517bc618685e8c4f8c7480fe0d59b0a6c08dd2e13e4e0c86fcecac8679d6","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"5bbe1ecf9a0b5530869108d89c3f8c5b0e66195d30a92bb1b9b3b7861c528050","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"2d853577fa8dcd77da976df67de1d4bb77431f85c8d9055ba334a74a470fc2ca","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"69259c72324a97b61290a448d78367bfafa16a09fbd0450b2e13a0f14cdbcbc7","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"085814b34792f39ba32049fef54d3567593c4e2de66dcd6fceafef87840d51e2","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"89307d7bb899ed065459ce4e524a753080b48657d5becd5be40e6e2c0e8f5403","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"1294c47fcefad2dde795d2e52e99d2e294efcca6e0720e12f33bf30c340d9d5f","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"cefa3bc93b6e292c2f288b9a58d62e34bbfe51f46abd6006d1f1f927a270de80","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"b208ec6bb7a399706012cdad19bf52135864d3f1128eaa82329771c5b08c7981","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"3b6eaab1daf480167998a4201c9776aaa4186f1c57769e0e1fdb996ae4aba713","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"a8948c7dd6e84d36d8a8f39b2c2f9e75d736eb54078b93179975e88d974fa7ba","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"0459527a9da9f72d6b24cc878ba2652ba6f9450e8043184197ad8037253472f2","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"afea18a6775340705f78dae39f7ca1825ceb25343caf57a2a47215af53f395af","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"3ed452c2980bd8d2a5f4973a4a3e59ad2576b510bb40693c9e56b449bf03abe5","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"c8919075f207e19553724acc2a0c35768d1f7978138f896ae231fb6d47b9d2d3","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"68135a204f56f87e1dcd43686708e3cc9a3ed012684a88dd61c9ec51ecc3e51b","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"9b9f1b35101c7222f534e61a8b6a0e4e5767792c01c22a39c40b0ef880fe6523","object":"5368a58a9e5c80ddec8e53650ca3c0ed03ea6b30","path":"docs/business/enterprise-ai-gateway/11-core-vs-enterprise-boundary.md","rule":"IP002","scanner":"full-path"},{"id":"aede0f39f524c9237b3723926e27ac23fe4da53d0ba76b21b821ef9b683c0bd5","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/enterprise-ai-gateway/11-core-vs-enterprise-boundary.md","rule":"IP002","scanner":"full-path"},{"id":"5fad7639b084ed0fcbab89c69f181361ea638906cde7235a0e4176c2b0940bfd","object":"0b061abda5bbc0337008a27549fb9baee60a3576","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"7b8394edb5f1d8aeff82e1fd7846f5ebbd49b36c3201c03203062517085603d1","object":"15e001baea944447aa3c170dc0f0a9010e54ac63","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"2601aefaa73773808f189dc2b99faf1cf56cdf91377e48810870b490ae5b0683","object":"3f4ce5eda3cc5ee0477433c0a25f6229a697de9a","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"c8fd5e6342666f21f339bbe70bd8fd0bcc167fcba9140edb107fea7ff61f149f","object":"5368a58a9e5c80ddec8e53650ca3c0ed03ea6b30","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"6cddd89b55a9f0c4794b04023096ea1c5ba84c86c7c15d095a4ff21d29215d03","object":"6c43879b9443828f9adea9eeee87863020b48c88","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"a40af5c618929e127b725692d7d3b397a90c6586645465845152a099691f409d","object":"ac8db0db92d14814d0f1153e9ea46e1442fba927","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"24ad9437e1568ec4b3043351665cee99217b88ad0cfc00d2a32c1132d332dc31","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"ca721fdf11d27ce2e950c900d2ab7d2bc238552e32b1707b01d066138b7ed85b","object":"15e001baea944447aa3c170dc0f0a9010e54ac63","path":"docs/business/gateway-integration/OCLA-UMBAU-ZIEL.md","rule":"IP002","scanner":"full-path"},{"id":"79052c17be672235dab31e4dd68e8d397aa11908afb6f997089e12d256d2bdc9","object":"3f4ce5eda3cc5ee0477433c0a25f6229a697de9a","path":"docs/business/gateway-integration/OCLA-UMBAU-ZIEL.md","rule":"IP002","scanner":"full-path"},{"id":"3e493f5bb445726748fa3fc7d8306e455ae1b6362cb74d7ab0be4bb89e3b836b","object":"ac8db0db92d14814d0f1153e9ea46e1442fba927","path":"docs/business/gateway-integration/OCLA-UMBAU-ZIEL.md","rule":"IP002","scanner":"full-path"},{"id":"2da6f659ad7216b649d22010bbe72527fadc8d1b8fb5d2e8228d6d9749b81ee3","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/gateway-integration/OCLA-UMBAU-ZIEL.md","rule":"IP002","scanner":"full-path"},{"id":"ec6c2c3faf3a91bdc349993fcba7aa66c52ba245dc050efe1d95c6d0c669e865","object":"af0030f183ac3ac42d7703a4953ea260b5ae2e6d","path":"docs/business/gateway-integration/OCLA-UMBAU-ZIEL.md","rule":"IP002","scanner":"full-path"},{"id":"596a16b9e9e5e7402c7a0d1d38cd3d4bf82bf0488b554b358f76fec290d29c1c","object":"5368a58a9e5c80ddec8e53650ca3c0ed03ea6b30","path":"docs/business/gateway-integration/README.md","rule":"IP002","scanner":"full-path"},{"id":"d37059c43b3f2956fc38d1fe7379190e3fe3b0d226b271d648c166058009e35a","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/gateway-integration/README.md","rule":"IP002","scanner":"full-path"},{"id":"8d7bbe613a91f2206e52568cee81017931f62d89ea24ae03133e5a91bca90932","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/gateway-integration/canvases/ocla-soll-architektur.canvas.tsx","rule":"IP002","scanner":"full-path"},{"id":"ff7e209fb1d512918f7d99fadeb403c97370a8a0f093c92b1ba84f2b791a430a","object":"fd64ef9b8757abfe845088d7d7d3ea357f5f4d82","path":"docs/business/gateway-integration/canvases/ocla-soll-architektur.canvas.tsx","rule":"IP002","scanner":"full-path"},{"id":"760f5ee648d2530ada06f0bbdc9be3320c6ddb7d2f8aec02dc83b998dd5bc3b0","object":"5368a58a9e5c80ddec8e53650ca3c0ed03ea6b30","path":"docs/business/gateway-integration/documentation-completion-audit.md","rule":"IP002","scanner":"full-path"},{"id":"12759875d5ba6174cabba69edb0ae649b9d3bc17312ebab3a811284d017c70a1","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/gateway-integration/documentation-completion-audit.md","rule":"IP002","scanner":"full-path"},{"id":"88d31015cb7dc5b0fac0c16cc5fa0b64e2931fdfcf0fcb7a19b1dc9da1a3cf6b","object":"5368a58a9e5c80ddec8e53650ca3c0ed03ea6b30","path":"docs/business/gateway-integration/plan.md","rule":"IP002","scanner":"full-path"},{"id":"9246ffc9b52f0d373381681b6fe44f022d7af892ea54011eccb09ff6737752bc","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/gateway-integration/plan.md","rule":"IP002","scanner":"full-path"},{"id":"dd9ff67daec5a662d952fb5290e9c1ce68233b8f5d4f655987f41a5aba73c37f","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/gateway-integration/requirements-traceability.md","rule":"IP002","scanner":"full-path"},{"id":"4260db481dd22bfeba7f722f24a1fe722ea5b5eb2d5d470b9dcfab5392cc4089","object":"af0030f183ac3ac42d7703a4953ea260b5ae2e6d","path":"docs/business/gateway-integration/requirements-traceability.md","rule":"IP002","scanner":"full-path"},{"id":"f7057adea0428b8bd63dd99ad0f332053dde1b20a35e1b74ab219b203bf51e90","object":"c3f55a9fdedc5670157535fda61730efec16e180","path":"docs/business/gateway-integration/requirements-traceability.md","rule":"IP002","scanner":"full-path"},{"id":"1d13c1af0ae92db4c8c9947e876ce3ae7f8c8c61a820d8ea32db49805a15d9a3","object":"5368a58a9e5c80ddec8e53650ca3c0ed03ea6b30","path":"docs/business/gateway-integration/tasks.md","rule":"IP002","scanner":"full-path"},{"id":"83ba92ecd8ae7a279ca5c10aa6278f5702cfffe2037492ec7a36ad8cdd5137f5","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/gateway-integration/tasks.md","rule":"IP002","scanner":"full-path"},{"id":"cf8e55df02479215adf706c15fac5c5c0e36a145b1d112c4be1a5209535c5153","object":"0bad5a3d2f4965979307f4c306721ae5a7a3bdba","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"b5886f2c73e9a255fd1a45fd0791141ce1ad363adfaba797fd7e853b66a70ece","object":"5881d5511d0316eab31e4ec0bbe1d55b6dcd4887","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"51ab7d14b39fcc9ac647a7bfc04c04fe45f40f06d43d752c1c53dee123e68c12","object":"781b2c4d25bb458545278d8b74f0f654f9b80072","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"43708200341a8edbad2df62e0ae144ccb9c28c0b7bcfd3b591fefb11ce524869","object":"868a751801699feb94875fa2f427fc5ed17981c0","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"d80234c382b922944d1f0064a2fb615d6fe5642125b19f816f6cb0706f8cdc2e","object":"a7f4da98c0b9507e40081edde80556c5ffa2965d","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"1bcf75e45d4f24d4bbddb2a37c8d414565f4391184e1a9bba68ea3acc7b963ea","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"0331a0dc2c4bf8b6742614a22629ca2d133c6fed977fce979ae5691af2bfa03a","object":"af0030f183ac3ac42d7703a4953ea260b5ae2e6d","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"b1b273790cae4fbbd7f2a1c4d2ec9e1378d508f334ada8619010017baa778dc9","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"bac60500cc9f0c43d0c843d1395a72e03a16925e1e5d7cf53e3e304b16b5537b","object":"cb93a4bfa0cdbf0594afe3b0e18f4c840e52d067","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"fe43c7af6fefba58e7180686e373f15cb7aead61fabd8a7f78d40c6828dff7ef","object":"d782c03d0a3a3846fbe9023ba7405dcb56c410de","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"036f2b707cb553efd20c3d7d017cd83ca9a3cebee01cfe312165ebe8d31af5f6","object":"868a751801699feb94875fa2f427fc5ed17981c0","path":"memory-bank/cockpit-audit.md","rule":"IP003","scanner":"full-path"},{"id":"d911b354c76d253649a378a558ba176d5397c360d8f17bba1ca4cbb90bccdacf","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/cockpit-audit.md","rule":"IP003","scanner":"full-path"},{"id":"17533f4094d83ecf75bb6ee3eba70f8c8a6c46716770da448effdbccecf1f700","object":"cb93a4bfa0cdbf0594afe3b0e18f4c840e52d067","path":"memory-bank/cockpit-audit.md","rule":"IP003","scanner":"full-path"},{"id":"49f865091165f24b7aee9bf86458f960a3360ea5569a3211841f3f087fb33e71","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/decisions.md","rule":"IP003","scanner":"full-path"},{"id":"88ec061235926bbc6dc7831707e80efffee83d324fba083e6ef5b3d3bf3f0436","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/decisions.md","rule":"IP003","scanner":"full-path"},{"id":"43b67acfb700a85a49fbd91ed8c3ac1ca071c71838a254d3e33aa4a7b23b98c8","object":"0bad5a3d2f4965979307f4c306721ae5a7a3bdba","path":"memory-bank/deployment.md","rule":"IP003","scanner":"full-path"},{"id":"af9b8db78afb67aaa6815ca225667f912460d462aa9347282b1f768406a81d0a","object":"a7f4da98c0b9507e40081edde80556c5ffa2965d","path":"memory-bank/deployment.md","rule":"IP003","scanner":"full-path"},{"id":"e4d0a5c507e30f3385d0be5df2f238f3cf89c7bbfe2eee596aa12256d1568658","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/deployment.md","rule":"IP003","scanner":"full-path"},{"id":"78283a25b6a824edc39c78cbde94eb33e46825ac6d2d35f3088493d066785c89","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/deployment.md","rule":"IP003","scanner":"full-path"},{"id":"3cb1e6c7f3edead80d95a73bb9c9f4fea222b2946cf14b96a9f89089fcda0f0a","object":"0bad5a3d2f4965979307f4c306721ae5a7a3bdba","path":"memory-bank/productContext.md","rule":"IP003","scanner":"full-path"},{"id":"0ad168d326d99d95b9d78f0575e5ce207a3068b6a5c1248cbf16d98e2f260bbb","object":"781b2c4d25bb458545278d8b74f0f654f9b80072","path":"memory-bank/productContext.md","rule":"IP003","scanner":"full-path"},{"id":"fdbceab52b3e595e5d20995c082be5c2322686833d63ed4aeb0f95a69ac01fc9","object":"a7f4da98c0b9507e40081edde80556c5ffa2965d","path":"memory-bank/productContext.md","rule":"IP003","scanner":"full-path"},{"id":"bedfc5817cb8879a4002ad084fa1fb2525877aa41573b67f49f7c320fb44121a","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/productContext.md","rule":"IP003","scanner":"full-path"},{"id":"e9b5d107f1a42ca6873ba2b23a7697d58747e710df5f7e95ee1a522c3067e735","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/productContext.md","rule":"IP003","scanner":"full-path"},{"id":"90c9a3bd6708d0487e999094486e34f9dc5228e6a47c7d6ab9491c25a684b299","object":"0bad5a3d2f4965979307f4c306721ae5a7a3bdba","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"5faf61829f2b70078c40f0de4f790b6ad2c6b1f2880d51caf4e197a84350ebd6","object":"5881d5511d0316eab31e4ec0bbe1d55b6dcd4887","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"b5b8fde460c3beac3a185069ccf59eb42e9b6665784316d3d0d0afcf407c9499","object":"781b2c4d25bb458545278d8b74f0f654f9b80072","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"8bee983acbf4bb0064039012f01256769487f56d9aafae9ae84778598071577b","object":"868a751801699feb94875fa2f427fc5ed17981c0","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"2f2acb259e7871e2617314538933a15ad18f086b92c4afdd9e3a98ba3d35d433","object":"97e697294e8a1f58f8be27a840cd66ef2a0a8370","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"088d3202c186f8875171f945194e64d06e9eda52c643c09fe69afc8198fe462e","object":"a7f4da98c0b9507e40081edde80556c5ffa2965d","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"eb4f77bed7d05107a9c47ed0df6a9c691fbc627d0f7c03e9f4eb4fcda0fdeb9c","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"ed32d55325ed89641d614124fb336b38a0dd121fffbf1c6bd12c2bf5728371c2","object":"af0030f183ac3ac42d7703a4953ea260b5ae2e6d","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"c7f0e0d4045a33e145714f753fcc75bc5ded3adf403fef996bbd8a0513e973fc","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"6921fa4b002ea577d637c3615d1cb3c481bfa8576fb0f54fa28919c35c58075f","object":"cb93a4bfa0cdbf0594afe3b0e18f4c840e52d067","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"206d7a44ba58c0bda53e8aa2e64e0548a3376032f2e31dccf10a457b717967d3","object":"d782c03d0a3a3846fbe9023ba7405dcb56c410de","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"3595635572489be8b1c0e2e37e52c1959cc301b22c1aac66c9eecf93f85f6b14","object":"0bad5a3d2f4965979307f4c306721ae5a7a3bdba","path":"memory-bank/projectbrief.md","rule":"IP003","scanner":"full-path"},{"id":"a190dac2578cadc46eeed73910ba82735360cd7d1d074ea5bbd8287b0ed3cbed","object":"781b2c4d25bb458545278d8b74f0f654f9b80072","path":"memory-bank/projectbrief.md","rule":"IP003","scanner":"full-path"},{"id":"96d9fce8ae803c1e57ed38dadc6750e199d29bea5845eb3fef3fe798128aeb0f","object":"a7f4da98c0b9507e40081edde80556c5ffa2965d","path":"memory-bank/projectbrief.md","rule":"IP003","scanner":"full-path"},{"id":"b68c20b65d8ae704390c738b3ab547b4c1253ed10d50477cc758819123abf9ba","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/projectbrief.md","rule":"IP003","scanner":"full-path"},{"id":"01a1df86e09431a2b04b0c01c4d9a89579e100f347dd4e56606cf984d4fc2c17","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/projectbrief.md","rule":"IP003","scanner":"full-path"},{"id":"2bf6fe0730c4429b43d96ff5697ceaa922531d7e8794ae524ea750d0533d8867","object":"0bad5a3d2f4965979307f4c306721ae5a7a3bdba","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"c82316f4fc4475419c674456a5c3a10b3cc90e523bb849be459b8f89c7bb8261","object":"62e3df3bf28bb97c99336007b45392ec5aaef377","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"1156ddbfe9acc1ff1a372f2760433b950ddd1d74bfda4db77bfd46276128ebf4","object":"66775905790bea4261977e788524d5c8914cf777","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"0975d4fe27a41b701dfa50277451b7288b25f64b76f22c8ab9f346fb6fd4e41b","object":"807fb714b1718cac00e2fe0f1e42f16b48855ac5","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"2a35d35bee950e0830884a40d2c26972226eb2488ca678a00be4afd0e190783b","object":"a7f4da98c0b9507e40081edde80556c5ffa2965d","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"6cc592c2a1f629e1921fdc40f58ea99dfb4dbb55ee3e2d21ba69ee798a6e5d6d","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"a1c97e374fa509e2580fd0131b8a79e1f80e10e15a784111d96563b34e5391e0","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"8565ba68c2b8ffbee91c644ba5c802814b113dd7300d39f3288f2858422e43a4","object":"e514f755717aab782ecb9295503ac900e5742991","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"04953cad48c2c8326ccd4e21292b99f55dcd89e55a7a8d2ecdaf3eda2396fa3d","object":"0bad5a3d2f4965979307f4c306721ae5a7a3bdba","path":"memory-bank/systemPatterns.md","rule":"IP003","scanner":"full-path"},{"id":"171cd1e2caeef5e615a1e25b27058dbb1aa3d728c453c8a45441a26722969f44","object":"781b2c4d25bb458545278d8b74f0f654f9b80072","path":"memory-bank/systemPatterns.md","rule":"IP003","scanner":"full-path"},{"id":"c21ff1388ea039a4dc09dd6a5c738072cb0c5929d47d8a72f0acbfb64bd66987","object":"a7f4da98c0b9507e40081edde80556c5ffa2965d","path":"memory-bank/systemPatterns.md","rule":"IP003","scanner":"full-path"},{"id":"a4c9cae2c1d6d197a462633c8061dd1455def9b92abae53d90a60373898f16b2","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/systemPatterns.md","rule":"IP003","scanner":"full-path"},{"id":"7e2c6fdf0b07f711eaef6dcbce804d6e014e8793e068aa53e8cb116eaa559556","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/systemPatterns.md","rule":"IP003","scanner":"full-path"},{"id":"1cd52d87430ba5bfb70bea8476dc59adf708d17fea1c8e0b0e765c9480f557cb","object":"0bad5a3d2f4965979307f4c306721ae5a7a3bdba","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"270136bc013f94b0ffece6001519b08300387ab9cf329f36a0bb122c2a375d0f","object":"781b2c4d25bb458545278d8b74f0f654f9b80072","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"95f9f20c4af64ca01cab71de2eb442c8268f3a269c359841d5ffe657c6d7b837","object":"97e697294e8a1f58f8be27a840cd66ef2a0a8370","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"07e821d85289ed03b56c8ad7b52ff0a5b1b584e494b7474ad231984271259fdc","object":"a7f4da98c0b9507e40081edde80556c5ffa2965d","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"89ffb6bc878581c1656fda6ba0959b1288bfcae1aab2fa40987d5f8ba0a76652","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"c420dc4b01c68c4c869dc52c5f084ce156ba93c12e492d5468a43ac9ddd57642","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"404b84c26fb1e4d1a554ea886f98f68d401cb22ca81b334d1524bc5daf114aca","object":"99a219004cd93e98a32bf9f386d44f4807ff3222","path":"rust/src/core/billing/stripe_invoice.rs","rule":"IP006","scanner":"full-path"},{"id":"13ec943d4ed5beb07d208e72fa03d71d94b584ede11e152bb57bf033e12fa4f8","object":"d2ab293db68108b796a7107302a80ead9f11b2bd","path":"rust/src/core/billing/stripe_invoice.rs","rule":"IP006","scanner":"full-path"},{"id":"2d51a7dedd87a064e44e6adde54f441f63df8b9ded67f2054e8dc3cde3153a26","object":"62ba93ba30b46c6d2c8002e0cbcc1b07e26dfb8b","path":".gitlab-ci.yml","rule":"SEC001","scanner":"full-secret"},{"id":"09bc7e95da4c9e5228b7f534163515ef6c1abea94761cb708a10c08626752ec7","object":"63462120acd394f526504ca95fc21c069f779736","path":"deploy/self-deploy/.env.example","rule":"SEC001","scanner":"full-secret"},{"id":"7a46408ac1c8db796ef18a50545c7761382382f48e515aa00fa34c5910838766","object":"6d0d89bc207dd0c20915ad648fff06bfa5421fda","path":"deploy/self-deploy/.env.example","rule":"SEC001","scanner":"full-secret"},{"id":"90982502ba1faec864276fda1d1cf28342f224739c5695b28e8e94da1100d9e7","object":"32379b1d2f0a2c44f9a4542cdbe6ae838ec49ac7","path":"docs/reference/13-security-and-governance.md","rule":"SEC001","scanner":"full-secret"},{"id":"29cf0a3962b5721b3852b7c59e07ff9e88fcd1103a18df1e0a981f540b8ec582","object":"640021bc36c84e0b73d638aa8bd12a223095375e","path":"docs/reference/13-security-and-governance.md","rule":"SEC001","scanner":"full-secret"},{"id":"81add3154582e38785e3506347647366067d25e2db4f891aa3f7e042ab8a9b64","object":"31fc613f9df5806da031254af47d6b5cdbc314c6","path":"rust/src/core/addons/runtime.rs","rule":"SEC001","scanner":"full-secret"},{"id":"c65efd4f8900733f2685e885f0a0918d54ea539f97374eaab65480882d437d8e","object":"de96cc5b42ea4386d958323d54759a89d04ad6c9","path":"rust/src/core/addons/runtime.rs","rule":"SEC001","scanner":"full-secret"},{"id":"ea334f9ee1eb7515352e0a7a5be92aba140fc45779823c433e5b73ca10a41f73","object":"99a219004cd93e98a32bf9f386d44f4807ff3222","path":"rust/src/core/billing/stripe_invoice.rs","rule":"SEC001","scanner":"full-secret"},{"id":"34e5b5f3a6a49ba6cf2851e580050bfabac37e52081e9e0826de5562b4f795ca","object":"d2ab293db68108b796a7107302a80ead9f11b2bd","path":"rust/src/core/billing/stripe_invoice.rs","rule":"SEC001","scanner":"full-secret"},{"id":"0682a82856b4441a66b0308b317fe93bbba1ac9152879bb0e942029f25083e04","object":"aac3f39f457ef1edcca5e83e8c2d33e60eed003d","path":"rust/src/core/claim_extractor.rs","rule":"SEC001","scanner":"full-secret"},{"id":"b073790cc9d6841446681142138f111ef7282d20944fb438b0e30d3501165bf4","object":"ae79545b7694987e4eda8e4141a9c47958f58e24","path":"rust/src/core/claim_extractor.rs","rule":"SEC001","scanner":"full-secret"},{"id":"e1a2b14046f1ee4919e937cae59089983b120b6ff60496546c65a08d66edc3ea","object":"fbf20879de08e98ca0acacb9ea2484301edc6cce","path":"rust/src/core/claim_extractor.rs","rule":"SEC001","scanner":"full-secret"},{"id":"fbaccd9c5461bb2e5b5913a8ce06f372c55f67931f13f9b52da075f4dec1e2cc","object":"c5cecafd0712ac620442143fe1b77c1dae1f3c0e","path":"rust/src/core/cooccurrence.rs","rule":"SEC001","scanner":"full-secret"},{"id":"19bd6f188daaa7807cd8f735826fff2690bbf5a61532b73ba2d2327756cc6dc8","object":"c69a6b8ce78eb49da3cfc228ab0f0e8028ba5136","path":"rust/src/core/policy/builtin/baseline.toml","rule":"SEC001","scanner":"full-secret"},{"id":"a8208f0584f88070a891f25b80b68690487270cf5884d3c1e7a106786ff8fbbe","object":"7154d27eccbc1faa7fba92f1e4d940f4dc845084","path":"rust/src/core/policy/coverage.rs","rule":"SEC001","scanner":"full-secret"},{"id":"f09d817e9e526955853b5a2404bf46fe245bae8300330833f2026c6e32fe1ad1","object":"ae79545b7694987e4eda8e4141a9c47958f58e24","path":"rust/src/core/policy/coverage.rs","rule":"SEC001","scanner":"full-secret"},{"id":"e1407550837f83cbaf9d27ae1da4114fcc379a5e72495d4329e5a6a393954af0","object":"043a24ac28b1c5c31c306fad52b18c8609059b87","path":"rust/src/core/redaction.rs","rule":"SEC001","scanner":"full-secret"},{"id":"3ffa53aedc125f319add140ba6ca0eb4331cb5b3b6543d5cb245db24061d1243","object":"32379b1d2f0a2c44f9a4542cdbe6ae838ec49ac7","path":"rust/src/core/redaction.rs","rule":"SEC001","scanner":"full-secret"},{"id":"5495e3987689117750bb59b4687051288ede5e3511fe066273a24c83f0fd123c","object":"ae79545b7694987e4eda8e4141a9c47958f58e24","path":"rust/src/core/redaction.rs","rule":"SEC001","scanner":"full-secret"},{"id":"96465d20a1faac24b98a2ae80c799a33e80c073fc628fa113e311c4201ba8ad4","object":"bde14da4219da51e81c814a907d8cf6c8b7ffe3f","path":"rust/src/core/redaction.rs","rule":"SEC001","scanner":"full-secret"},{"id":"991f92239ca22bf755318af5c50d1634d24c41b7c96579bf294530f9a51c1edf","object":"52da729bbb4549334030bb9e7d7e448204bb5c6a","path":"rust/src/core/secret_detection.rs","rule":"SEC001","scanner":"full-secret"},{"id":"0d584c55951beda914c5875e6321cadf784a175162795455d5fd6d49493184af","object":"aac3f39f457ef1edcca5e83e8c2d33e60eed003d","path":"rust/src/core/secret_detection.rs","rule":"SEC001","scanner":"full-secret"},{"id":"fe7f5bd3ca016e50b45ea9f04a4e2fca7efaa733ab789137113fed913e9d3cbe","object":"ae79545b7694987e4eda8e4141a9c47958f58e24","path":"rust/src/core/secret_detection.rs","rule":"SEC001","scanner":"full-secret"},{"id":"d3f05a1ed7e44265415ad458ed432e08edab18a7caab39113a1b5e56e8a4351f","object":"3b5cb6157aac77a58917ae4433f5db0b088ef6c5","path":"rust/src/core/sensitivity/classify.rs","rule":"SEC001","scanner":"full-secret"},{"id":"e4867fcdd1e30be968b416dee7b536a0e0e6d9e83ba1ce7a62073a406e90e325","object":"ae79545b7694987e4eda8e4141a9c47958f58e24","path":"rust/src/core/sensitivity/classify.rs","rule":"SEC001","scanner":"full-secret"},{"id":"fa65559964bd53d031234a35bf0b0433e320008625d18c8d992ba10ec271c939","object":"3b5cb6157aac77a58917ae4433f5db0b088ef6c5","path":"rust/src/core/sensitivity/mod.rs","rule":"SEC001","scanner":"full-secret"},{"id":"6ebe8f9fe18afa061d610e85532ed123fcef965db976dadf13ecd6861f53a9e6","object":"ae79545b7694987e4eda8e4141a9c47958f58e24","path":"rust/src/core/sensitivity/mod.rs","rule":"SEC001","scanner":"full-secret"},{"id":"43eaeec6121650445ad0c94f67e15cee394d456e60d5615a1c02810a468accc7","object":"695cd2c70975963f6c9ecb3d83065c1a8d0da498","path":"rust/src/gateway_server/doctor.rs","rule":"SEC001","scanner":"full-secret"},{"id":"3c94cbd7c8c0ae1cdebd7d802c8cc1b9b543640820b2d3fb992daa7cef387517","object":"9a3c63e237058d3ffe69a9bf8301b1bdfb738271","path":"rust/src/gateway_server/doctor.rs","rule":"SEC001","scanner":"full-secret"},{"id":"e25feece688137d9695843aa0a033c704e8cd953e3b1b6f0f06c1fe451e67334","object":"beaf0f46dbdf85447461f50cebcf1dbec8fe7b1d","path":"rust/src/gateway_server/doctor.rs","rule":"SEC001","scanner":"full-secret"},{"id":"201f88c7bc192aa2c8fa2eb93d2f1e43e25cc3cb910f2014b25b6bd13d02cde4","object":"695cd2c70975963f6c9ecb3d83065c1a8d0da498","path":"rust/src/gateway_server/init.rs","rule":"SEC001","scanner":"full-secret"},{"id":"883f33eef1dcbbc0f9885ad79e54d01f49054da6c6369fad2871fa96dfe87a86","object":"9a3c63e237058d3ffe69a9bf8301b1bdfb738271","path":"rust/src/gateway_server/init.rs","rule":"SEC001","scanner":"full-secret"},{"id":"ee376a9b0b1be6aba1c8a08db71a075298cb38ef5e92759b1eadc33312aaefdf","object":"695cd2c70975963f6c9ecb3d83065c1a8d0da498","path":"rust/src/gateway_server/store.rs","rule":"SEC001","scanner":"full-secret"},{"id":"e1e41e12680602bed43997674d4920aa32b346a791972da343143745bddf29cb","object":"beaf0f46dbdf85447461f50cebcf1dbec8fe7b1d","path":"rust/src/gateway_server/store.rs","rule":"SEC001","scanner":"full-secret"},{"id":"a92c13643fab2f7884072aa556f5c3aa3a7ea9ae345b942fd75b99bd18dbecc9","object":"6d7e60c8d3e0ae0bb19ee49f8938f12672dd08d8","path":"rust/src/proxy/auth_tests.rs","rule":"SEC001","scanner":"full-secret"},{"id":"7ce71b377590957d2ad6e20779bc53fad82860c14549645b9f3304c965a22315","object":"7b912f382d1cfe90d4a2cd2fb44a7871198c9d2c","path":"rust/src/proxy/auth_tests.rs","rule":"SEC001","scanner":"full-secret"},{"id":"af29f6b957c4a419b6b36a76ee09bee6a03de2c7e04ab3af878f0b63e070ab7b","object":"16ce9e99fd9e4eb5a34a433ccd0f96a4380a00b4","path":"rust/src/proxy/mod.rs","rule":"SEC001","scanner":"full-secret"},{"id":"521e6ce456987f28ae90f07db6754cf357751da877f315d0a212821c67826765","object":"6d7e60c8d3e0ae0bb19ee49f8938f12672dd08d8","path":"rust/src/proxy/mod.rs","rule":"SEC001","scanner":"full-secret"},{"id":"71e68c38ab68847f68b1c14b715b24668528d078c7b4952e2db5b3d796ebbcc4","object":"4665d97443efb8fdc95e6692f6659fd3479b1d8b","path":"rust/src/shell.rs","rule":"SEC001","scanner":"full-secret"},{"id":"07a8c9b4d2dede3acf159cd2ae5c0ec70fdf28e21118d2cf5b997c272bfe59d6","object":"6520ba0fe214172e2cbd7ce494458e198bc55a40","path":"rust/src/shell.rs","rule":"SEC001","scanner":"full-secret"},{"id":"e0a5fae58b1d7d9ba5b3ac530d16fc1c7f2607028a7c76035998e7f045b46a00","object":"f4194071a0c774c39095d89748b10dedc05a8105","path":"rust/src/shell.rs","rule":"SEC001","scanner":"full-secret"},{"id":"a3a22cdd2387563e99b56350eec5c8db452714c286bf37facce69baec5dec8a2","object":"bde14da4219da51e81c814a907d8cf6c8b7ffe3f","path":"rust/src/shell/redact.rs","rule":"SEC001","scanner":"full-secret"},{"id":"183ce7d8d3ab2a4d3c2eae63a155ba23ddba40d58d6eca774d0ec8c4fdd4577b","object":"f4194071a0c774c39095d89748b10dedc05a8105","path":"rust/src/shell/redact.rs","rule":"SEC001","scanner":"full-secret"},{"id":"1e5b8e9cb6ea3432119d8af6f44c87ebc9aa8e21e5a00639414753410d4725b0","object":"043a24ac28b1c5c31c306fad52b18c8609059b87","path":"rust/src/tools/ctx_edit.rs","rule":"SEC001","scanner":"full-secret"},{"id":"a66bb05eeabaea0aa7abb57077c8d6e047b96996add3c7bb73ddbfe9073c8280","object":"49d6bf463513051158cf240c2f50968ad073e314","path":"rust/src/tools/ctx_edit.rs","rule":"SEC001","scanner":"full-secret"},{"id":"9ff617cba488a59734dcf22b34ed23b76ac2eef27de7566ab8365906913e507d","object":"b1c5e86d5c8e09098c2c600dfbeeac441aca80cd","path":"rust/tests/compliance_frameworks.rs","rule":"SEC001","scanner":"full-secret"},{"id":"df8d8e825ac434ee3ab287d833acc18c223c4b3fbc05fe8869e3cb4e92572660","object":"d33fb98432927da6eb32b9998f3ec58bf8008527","path":"rust/tests/gateway_postprocess_e2e.rs","rule":"SEC001","scanner":"full-secret"},{"id":"c0913e4b028603ec6c6d5b60b0446937915aa2bf02563981785024c74d64f2e4","object":"1b4019b4ba81ccc2c8b3acdf1be848fec00ebe76","path":"rust/tests/secret_scan_artifacts.rs","rule":"SEC001","scanner":"full-secret"},{"id":"e52b64f16b385cd40d37923c8b0dd1b2ff2c8cd1e254477f2b34e70d04853081","object":"48c1441ec809e3c997d79c7feddf404c64e2e5d9","path":"rust/tests/secret_scan_artifacts.rs","rule":"SEC001","scanner":"full-secret"},{"id":"539af45e125ef9ac47d707ad3f5ab123da218e159272d88206469ead275b874f","object":"1b4019b4ba81ccc2c8b3acdf1be848fec00ebe76","path":"rust/tests/sensitivity_floor.rs","rule":"SEC001","scanner":"full-secret"},{"id":"10d7eb2799dae6c78bfaf836fd1e6db0e2e0a1f33169913d89dac152140e2f27","object":"3b5cb6157aac77a58917ae4433f5db0b088ef6c5","path":"rust/tests/sensitivity_floor.rs","rule":"SEC001","scanner":"full-secret"},{"id":"23f9d0225f18c9a40f59d1a82def31241f2eee1370cff05a311ab29a7b78fe28","object":"1b4019b4ba81ccc2c8b3acdf1be848fec00ebe76","path":"rust/tests/suite/secret_scan_artifacts.rs","rule":"SEC001","scanner":"full-secret"},{"id":"20e82023aafbcd07da54374f187598066da85ce59d89bbbd03afd53f3f4e5a4b","object":"1b4019b4ba81ccc2c8b3acdf1be848fec00ebe76","path":"rust/tests/suite/sensitivity_floor.rs","rule":"SEC001","scanner":"full-secret"}],"policy_sha256":"16624b52e050d52592494256faf6c17c76f48dbd91c462eafe57f3c082c2ee86","scanner_versions":["commit-path/v2","diff-pickaxe/v2","public-tree/v2"],"schema_version":"leanctx.full-history-evidence/v1"} +{"audit_status":"rotation-and-rewrite-decision-pending","audited_commit":"b37ee3be11f2525cd785348d3e43ccdbb590fe94","counts":{"commits":17061,"findings":369,"objects":109865},"current_tree_finding_ids":[],"finding_set_sha256":"72fbce1cef9336e2937ab78d94f22371a084d41aeef993d440890e2ab18a131f","findings":[{"id":"92a475195f733649f10c0e8ec9ea3908244383e782b3f2e0cd5813e0978b1e31","object":"2016476401d89358027039b2210e4f3a67cea950","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"73396d75d30f0a2fa97497d23b1ed95d9e79c57a6bf2cb447508720662f51f37","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"63d5f08e097dfeb217e4e586dd9ae3a891858387a68138790baa2047521c68fa","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"2a921252145bb492b3c7380f89494aab580e2a1cb61c7ffe15ac945f09f25cb8","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"416a7fdb43502d9c31319d9a46afa031a00919df2ce7115130b05d1e318006b2","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"b12db6a6efee472b15d295307afbafadfe3b6f95864b2f9d832da6bbd1cd117c","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"eab7277c768cd7099b4fa7bc35338990ba65210ad67da85609b9f9bbd4389cc7","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"f7c6ef8d917376935850357158e9ebf24ad529232597d30a40eeaf916576c934","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"d2f09d447fc845298991f770d57dfca707567d18890d849d157367ebc6176ebc","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"5a375c6bc04c0046297f58c96fa47ef06e888e01bc4bc8c6dc4ca9720091169f","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"337b179dd6a42ce3845f1e8ba6e544104338e665f42db51c263920db02a17e99","object":"f941a288179c5e7232fae75a9d07600096bb0ced","path":"cloud/.env.example","rule":"IP001","scanner":"full-path"},{"id":"83515cc5e3ae34795b8963628d76fecccf6d6aa96038c4fc67046a751338270b","object":"2016476401d89358027039b2210e4f3a67cea950","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"7cb5f11e5d8f8e20e9cf646a66aa947e0f90fcd8754c7bff3cfd2ad81a14ca94","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"5f0566f67f1ca05780776bd6961e464d91f33922c525264d4a5afefa84929fde","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"34b2e90e50516b83cb6497a1919599ea54b9defee4c8fff481d52a86977d8673","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"d8e8cc84457271ad24e913f98104862987b5fd8a9c14dfe3195f6b14656c6bae","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"b99b4692fb9d7218344ea7f3335b385e7c95357d31dd9a9fa0a788988b4ab26f","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"de049d677eddf4f763c85750e062aceab7e0c649ddbc0d72827b7671d73ce76c","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"b477316f922eeced206a99329c0b205ddec958a7b3dfe939040e8251b8884253","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"5466ad3ee6f7241a681973dfea9558a8fd4b4dda893bdc3633b0bd2ed6fe0e7b","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"93a31bd7caf25b95a80fde13af13051f1214f48a8e0f97a416dcdbc75f654a62","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"9b7b15f3a484c988a4dbcbf9876d1ce6b2f1ed68a2900c55583a0be4033480c1","object":"f941a288179c5e7232fae75a9d07600096bb0ced","path":"cloud/Cargo.lock","rule":"IP001","scanner":"full-path"},{"id":"e41768133b5bcf99230c52e10e66d128f3f967e69039dbb0ddeb06dd8dd43b3b","object":"2016476401d89358027039b2210e4f3a67cea950","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"174332ffa3b3c5d0fa10f032e243e43ebc27411999c448b4c355c525abc0e068","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"82b0e223962d45616077388db54b0f05d44afb4d6aee2a93dd75a2987a6608dc","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"b1a08e62f037222415bc8a14e9a9474eca35c69ce39dc8e0bdb48ab0450e6e32","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"fcc445f838d418e159078a6e28e96b613771845ec697e1dce11221a88e69b38d","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"25249485902e8f981aaa7f0303fd9e556b76be87aac07501de13dc5e69deb687","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"1c393eb6671be8e4cee40acdeeb9f3c7ad3d9656775c8b311ff985ad17334d3d","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"2c10a65dd84ecef3858ba0d26a56c52f790bfe79c31925298e3819d1ab570673","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"a7fb5847353e1d241af4e0eda1b3829885caeaf6ad3c0d585dc8cbd88e86b0fe","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"a301f0f7d9e40b25a4d5c0b9f9b6bca4f7472d2b5772bde9b44bac0f186c1a17","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"9d7e14fa0d605fd80aa0f16a6e8d03032dfa051c20e4512b4b88c22dd887f3cb","object":"f941a288179c5e7232fae75a9d07600096bb0ced","path":"cloud/Cargo.toml","rule":"IP001","scanner":"full-path"},{"id":"5ff43cf0473bf18473ef1846c549a41434d22729a7ad750448a5ebccfb65086c","object":"2016476401d89358027039b2210e4f3a67cea950","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"f0388a2fbecfc5120fbba2948a39e7d567e5b7f4887729bee9341ce16611d6b2","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"fb63259c8396b1197e986160ae8910d0ad194425d7f73cdbc30256ee4efc8f14","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"96fde588f9c903badae259b27592e6d91767a80114546596bae2f5ff35991bc1","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"a232a9ae91d128f863420a1583efca6a1f6946924532687fd4c65ac98930b7c3","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"eb4f333a79580b6a578fe182cd68b005deb395ccadebca48760316de5754a5a5","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"abf4d41bdab301c51f2528003cca96e1b26926c73a74c96a489399e99e1f6be0","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"24835f39ad7480f7442ec38079f0ce153330dd2275957676abece58e8d5db447","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"01a272ad71777151c48757bf70660210b18e7e0da61b64fedbd0d40d5fd1c43a","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"3290117867fce1ca41f40dbc232ab0eccead19ba4eb7aee6280383284d485192","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"d5765ee715b490e5a563b9aca2b397cc129fcd82e5753f44b49c66fb94ea6334","object":"f941a288179c5e7232fae75a9d07600096bb0ced","path":"cloud/Dockerfile","rule":"IP001","scanner":"full-path"},{"id":"57ce5274f9c1f8f52bf2a7800f7bf07d7c904d7792771047fbdc6145695c1409","object":"2016476401d89358027039b2210e4f3a67cea950","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"752265265e2360178cc400de8a584d215aafe18d495b4519062ebb7310e741f1","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"25a82930267655df738349d3c19d03cf05cf9a6e866e60e1786fa6034aa1248f","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"850a098794c71907d8a87f5240005567121524637aa5a708c8a2c3dedc02974c","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"05df22b3932d2166f2276ca0d0b207e983b1737869ea4545c32e4f7c037dfb8e","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"6b0ed4e3bf1659ae3b93266916a58e46571a8028727aa3560e2938ddffcd7600","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"489c71e23939ef5fd9a59f74622946a2877a7e1dbe95738cc34044a8a8715399","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"8d912005ab260fdc84138f82ebc03f98bc09d19ec2a5903425c54f79d8075e94","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"bf9e6ef504efc45485fe20f108939f77a484bb9125f15ce6d902303a01b12176","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"e1afd2adda0733107ccb71434fbd29de188bc53dc19429a4fdd320085c763297","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"3d9a18de2876d9f72bf8815940272c21625a1d2a1520fa995c1ae9c3f1bf832d","object":"f941a288179c5e7232fae75a9d07600096bb0ced","path":"cloud/migrations/001_init.sql","rule":"IP001","scanner":"full-path"},{"id":"90b389da7583eb291312aab24ae595f7129d5dd2a02fab44bd0bb9fd166fd5f8","object":"2016476401d89358027039b2210e4f3a67cea950","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"9ff909c263bc7c426fbcfc2644f1f0ed91bb0d94a458f7b14fd2df738ec4ef74","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"b2511ff32cfde7fe4857f54e72c438d7817d7e44dea5430f3d06386c5d707968","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"a09c91df9615a9344d8cdb4aae1153e974d062904b26aa884b0b615d1c0f2b58","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"148d4e2f92e43ea947a439b116455be69fb0294d3e0c1b009c1d3b9e48f19751","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"d05e1b3eb87b9369b28343078427c511f9c125fc3859da73e5dd6bfa3020be71","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"f8b49c51d4d666530239ab21e573b8ccd845ad007bdf223f10e731474e8f4d52","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"31d2b22f16eb61ffe323ea748a89f363fad76f1b86a47527efd1cc6bde8dccec","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"b59994cc3a8585808c93cc8d55b8e0a7811e9681a060d36057eeef0ac460ff2a","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"64ea1a1d27dcf4deeea9edd0d9b2797994291889f2245ba2d7223e9699c96c1c","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"e576be381d1a8e8a27d0824efde1d30290060eb1cb9b311a04bd6feebc98e1e3","object":"f941a288179c5e7232fae75a9d07600096bb0ced","path":"cloud/src/auth/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"2e18781fe8317ceafb8a2bdb49421a409119640d638682685470de8d86ba804b","object":"2016476401d89358027039b2210e4f3a67cea950","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"6ce8ff0be5ecf6117b0c158d9b581a1f0d856767a1c6821552a95ce6eb491eb0","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"2f86d8beeb268d599dd4bd493757163edaad3d958c728b92e580a8c5f6016dce","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"c1aaa61e16df24972ab3e43d94a5c655c3120ea55620a99f7ef9cfdecc279ebe","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"e8240848b776e1a3cc09ad14546db2e37d4f4022b9125dc3c3c3a7a1a4a6bdbc","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"fcd5995b24313032c6b0f11aec1640ec27533f1437cf931f3e401b4caf9cb53f","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"2adac7467fc475f851e49a106c919de64c6261a3c79003f268f7054ce566ab3e","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"6cfcca7dc6d3efdaf1b536658fccfb9c18d3e2bce320d1aa411934b46c4f7ee4","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"49a1dd09a89a504664bc86fa47e8aa9ce563dc1f610bcd7578242485bbab8e4e","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"70c24d2770fb3fb081fe9e43f86dc36950a28400a34bb04b09f3948e417a355d","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"de19ab821c8d157f0b292938ba285c0af8df1df4a353e372d9b9c8f81d52cea0","object":"f941a288179c5e7232fae75a9d07600096bb0ced","path":"cloud/src/db/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"877db3957ced9e6372d16bf23f28f13b552c6c5443b25a9d2021ff033199155b","object":"2016476401d89358027039b2210e4f3a67cea950","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"494aef91b19be463daad68f337823e449dcf53b629717966d6c4528e3d2afd40","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"5de600b0f525dfb2b004083265f0a63041a135a0d39ffdb8ce4f47f21f10a948","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"60de855f8852c6913238599a6a0a77e6283e72e859c6f147a06da2cecb3b8ce6","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"5069b1bf0b471899687353a8e2ad4190e51f01dd7dcbd5bbf9e211f7d3eab638","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"712018481547ed52725917c753a632dce0ac86debbd52d91f3e6d466a9be74cb","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"dec06eb18bf3a240ae9a0969b33c282d47e4b4948a3447a49d681fa0d96e223c","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"b90a032a9d4256721bd476222f554f16b4a9b78f2e25affa1d6246922bc567f2","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"a71da57747c898330e379026715d4a8515187dcef41796a2d3d6e63dbb5cca02","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"ffc00a4c96d30a06097eb6995dc69fbf9b6055871d9531dce72896be518bc8e0","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"3dea0dee13458e02e3ddded537b354840dc91bc3fcd8ce4eae3ed0b768d82fab","object":"f941a288179c5e7232fae75a9d07600096bb0ced","path":"cloud/src/db/queries.rs","rule":"IP001","scanner":"full-path"},{"id":"dfc8614a61f51a92b688618f9add85146d0fa1f7ad135e6e91dbe5e175da014f","object":"2016476401d89358027039b2210e4f3a67cea950","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"5cd27a35019368faed4d2960852b55414d3b546a98d34d2d1fd660f661f1002e","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"5ec8c94ada4fff1c675197c46be9fdd10f357195893f05d63dcdd6a796670cac","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"b7ba7dfe779f4712bc54de8dad2e6b01955dd3c5274fac9c749f658d0a768a8d","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"d147aebb141b34581a672e50dbb3b26709b03d2398277db75208f11045bb885f","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"9d244dfcb94f7590926905cdeecab29cee1df73ac047ebf691abbb25cecb938b","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"0e3c4bf7dd09563b3bab60ed1e116e7948dd8fdbdc215778f32e1ac5bcbb3e76","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"9a4978890ec09c04b2fc367a975b2bd72c24ed4e7f53edb348923248f905d62f","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"f50afec91219dd816ea1066e9d9db02cf5b8eaaa548c452d80b70d3724de0794","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"902275330adaa9a3fbc28e864c9cdfed6a2c28a9bdb08bdf11bbc8ad54f4386c","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"b7550826fa2aa0708c5f1c91e83cb0fdfd09be5110c13a014db783001da9dc9a","object":"f941a288179c5e7232fae75a9d07600096bb0ced","path":"cloud/src/db/schema.rs","rule":"IP001","scanner":"full-path"},{"id":"9055c355d5c4f3a524ef2e952fcf0bc8e5b08a35f147f1c0a5f15f0342e63736","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/src/lib.rs","rule":"IP001","scanner":"full-path"},{"id":"4cde3906860f7e9e56d23fe253d82d3238cc0a40889f0bd8b80a28fa109b68ff","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/lib.rs","rule":"IP001","scanner":"full-path"},{"id":"c90fdd168cbeb4dcd365f9c5f16669d009f0217716cf79b446d18f6c6110ee09","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/src/lib.rs","rule":"IP001","scanner":"full-path"},{"id":"133db56b0a7ebdbfca7951cb1a53fd787eaa587f0b3e5fb2739005739841f0c0","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/lib.rs","rule":"IP001","scanner":"full-path"},{"id":"1d9dd9201bb065a3eb9308caf718db4bd8926fa13ba4051c18439232c28e013e","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/src/lib.rs","rule":"IP001","scanner":"full-path"},{"id":"53833a05e3929575bf253e0797edc918ccf55c7f5362ce93b0294dfbc015f4fc","object":"2016476401d89358027039b2210e4f3a67cea950","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"6296c10a7f42c3700d150b4e94a0a69e9af9c89e2066449991606541116427e1","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"2e9849df5cdbace4ebcf7df31ce136207f9e6ac53b6b65587e1bf0aeef54cf56","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"43ad5dd53bea19b5232fcd62018851bcff634c04ae117d272df6ee74b18202f7","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"fb9abafed6df032483c11d2488d83dd4852b22c5b17b6a273201d60f183f033f","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"41a6a5c65b9b7831fc4445184e235975d4dc71163bff393252b91dd6e830b6ed","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"4175a3611e698bbda478aacbb152bcae60069a43e37de4c791f794cbf13b4093","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"068de8ffc6587b3a4b1d192eb249185de43f1531ecadebd9c89f5de4d4af0df2","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"9b5f738620cfcfcdf9ddc32425186feb4e44f66ded79cde2f679345e407c3e5c","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"33cb6c9e650428b0d0de9db07130764573a55f9c3f87978ec09d944088791e9a","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"9f9f17726193f7b5492f7f6f52e3a109f607156641e4e46d66da8c38663daf87","object":"f941a288179c5e7232fae75a9d07600096bb0ced","path":"cloud/src/main.rs","rule":"IP001","scanner":"full-path"},{"id":"7626a1f18aa635e57a227bff9460f160395a5295d558064790d4d4a07e5405d4","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/src/routes/admin.rs","rule":"IP001","scanner":"full-path"},{"id":"fc40238b8de8c3b8a0073bdd1fb56fa3b3811fa307991a8f10de3d73a68b4afe","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/routes/admin.rs","rule":"IP001","scanner":"full-path"},{"id":"4fc66c49b3e1fbe22e1e67ba0964e979911af14f201ff61f7238f1a84e5b6e4b","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/src/routes/admin.rs","rule":"IP001","scanner":"full-path"},{"id":"ac7509eec139fa717ef99e7e1e1b07319b13142d33f25d52b6340e38ba9e318e","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/routes/admin.rs","rule":"IP001","scanner":"full-path"},{"id":"4fda96f82084214062347e6db4585a6af1049ce94f4639f3e87f31dd446b0ca8","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/src/routes/admin.rs","rule":"IP001","scanner":"full-path"},{"id":"890c039e800744e971e88aa8ec2382a18429a6539ae39ff1ec02f100ce155595","object":"2016476401d89358027039b2210e4f3a67cea950","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"e1bbe1520158da40e907de6f3e5d23cec860c3b6cecea5bfe13b335c6aaf9be7","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"ae2e9215ca930a52a851135c58738b422752ca4a7cc4c17bff9963dad10414b8","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"ddfec0d19c79bbe55bde539bb75da05daa6c43ceb2bbc107259f6dbed3302237","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"8c2e990c28eefe3c14498038844a1073858a3858c0e92481ef3b41993da2f816","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"e315514f2984e51ae3d0165280eeaf7019eaee4029324b407896acbd108e1398","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"0a657b2c5d5783d49f51161e8017d8c0be0c946ca9f848c83f8dd3570f944091","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"b9e78ee89b922927db35b00359451f22d422ccf1f66838d959cd7139ec4e8675","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"449ba3de7422744df03b8b03f9f116cd272f41b94542568783ce3a8098e74cf4","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"ede9655306c31fb90d941a8bc1f1f586f31695d5940e5ea26b7f5c4ecdbdca33","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"c9a76ca778dc304a21273c9c9dff68bf78a3a89ff4f041dac2854fb26cc588f0","object":"f941a288179c5e7232fae75a9d07600096bb0ced","path":"cloud/src/routes/auth.rs","rule":"IP001","scanner":"full-path"},{"id":"91ccf87f5b13c630e667362a2135d43769151950504fb13e09b714ca59134c5c","object":"2016476401d89358027039b2210e4f3a67cea950","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"b6951c8cd58753290b89c5c2009cee50ff2c6650058145af9711f1cc44338a8c","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"c9df6a1bf9feb25150af6b428d8cee417108b0beb252278f3e70549f59d4952a","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"f05d50aaa1f29a73f421298e892404beb66047f00384fb9dff2a77883a4f10c3","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"e0cf05a74996433d0fba9e9c6b0b01b62b07bf2c2d49a6532adca489b86eabe6","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"008e53275c523c76867acbb32d04b597827dc4f22d9a30574e41cc84dffad5e1","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"adc6dbd246e0e100795bdaab6804074c0ba0c017c30a0d74cbc752afd938655a","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"4eefe0377a7baad18219808ac88329fefccbf1c1297c80c6410586dbfb45124e","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"332ac19a36448893199c414ec49282ac39a04d192ccb73cbc587490bdee106b9","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"1cfb2c1922c1cf67e0f7090b822f3dfb79bcee8bb91f46921a6b52c30a91bbbe","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"94e00e63d9a973d5e4333a63298daca4a994f79bbf91689db1fe398a7d8f2a60","object":"f941a288179c5e7232fae75a9d07600096bb0ced","path":"cloud/src/routes/contribute.rs","rule":"IP001","scanner":"full-path"},{"id":"c9e297c5faec1088c766d37d281650f8e0c401ecdc1a32075a18538cfaed397c","object":"2016476401d89358027039b2210e4f3a67cea950","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"f0a22178d78f4d3871a78307c8082cf24cd3945dac164188fc3335d24ed9fc1b","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"c41fbd2774e9ced614d10b836039b6cf86e239adfc769712b5e30e2655467386","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"8c34ee38fdfd05c1414d5aa86980bc5a336d4b98a542db530a2df5dba2e31ee7","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"bb004bf913921950ec662456739cd747acb185cc20e187cba68b5ee02ce128c6","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"d6f5fc64548bb5b4c7325ef6e6cbfe31269dae9395f82365188eb91c70deaf0c","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"b6e285383ab9fff1c14a1a6045a483966893f0f4ec4dbba5403af30fd0031e54","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"9a92e6e7da88ebe0b165de8fbee561f242908319623916f88501c9c70c4d4552","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"16fa03fd58b5d32d7d8c754c11774db36a18d87a79333062ea3a1671dee75643","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"ce4b7e9d905a8dfbd3e2f51baf440f86e42bbcfca600110b8bc421f25dc0c205","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"1e63740e86a0641bf7d68281b0794d119d76bb036a77f5f8d75032296fcf93aa","object":"f941a288179c5e7232fae75a9d07600096bb0ced","path":"cloud/src/routes/mod.rs","rule":"IP001","scanner":"full-path"},{"id":"eb5c4ac4d3a3cba42511bbd1aa493d98ad92e2d06929b34b30ccd311174c2855","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/src/routes/pro.rs","rule":"IP001","scanner":"full-path"},{"id":"a2275cf726d71c1c0a0c8c2a38ffc7c56425d9c7cdf67d565681941a7866e14d","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/routes/pro.rs","rule":"IP001","scanner":"full-path"},{"id":"c64b27a6508b0e73ff7fdfdb4266812a7f492e42d6540945864b7c53e194a1e6","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/src/routes/pro.rs","rule":"IP001","scanner":"full-path"},{"id":"925e3bdc867bdeeb1e9997669c95628f350188cf3d6cdb8625ed6b7a22e3e4a3","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/routes/pro.rs","rule":"IP001","scanner":"full-path"},{"id":"00b2c4187076782a06674b51c852c2c753b8e9d7d5eff04d725d51810a64eff0","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/src/routes/pro.rs","rule":"IP001","scanner":"full-path"},{"id":"4f60ee4b0448d8ed5cf7cfff7f04ed6c34b8ba0cc7c2105ffe500706925574e0","object":"2016476401d89358027039b2210e4f3a67cea950","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"9bed04957adc415fd4422411be9517850d49e52f6931a99aa730213c5ec67d3b","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"35e0c9b25ebd1922cc99f190f002504d38ff8d6a0d50612998f42380d5f25b13","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"d3c5435d05143e9d3f4987ad3a33153d88abc9ec099a059303139d8bf086e7d8","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"40f9517bc618685e8c4f8c7480fe0d59b0a6c08dd2e13e4e0c86fcecac8679d6","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"5bbe1ecf9a0b5530869108d89c3f8c5b0e66195d30a92bb1b9b3b7861c528050","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"af439a23bc2425dad78af54c2c57ddba2e2c06e85a463892de99c428bf77e54d","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"2d853577fa8dcd77da976df67de1d4bb77431f85c8d9055ba334a74a470fc2ca","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"69259c72324a97b61290a448d78367bfafa16a09fbd0450b2e13a0f14cdbcbc7","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"a30b14c9176cb33ee6cb3d9001de9ff75d4943de9c3f13e31ff93202c7df7eb5","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"20c3e594e0662c4426c9666fa0b26ebd318f648e611097df689f2787952d5978","object":"f941a288179c5e7232fae75a9d07600096bb0ced","path":"cloud/src/routes/stats.rs","rule":"IP001","scanner":"full-path"},{"id":"7e08a5e89644d91be5e87d403bb995ce4c09786f524e50e3520915bc27d88bf9","object":"2016476401d89358027039b2210e4f3a67cea950","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"085814b34792f39ba32049fef54d3567593c4e2de66dcd6fceafef87840d51e2","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"89307d7bb899ed065459ce4e524a753080b48657d5becd5be40e6e2c0e8f5403","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"19bc8db39d2d7d82a4cf190c0170b1545274daecc3e9e46528c8c78e30346927","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"1294c47fcefad2dde795d2e52e99d2e294efcca6e0720e12f33bf30c340d9d5f","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"cefa3bc93b6e292c2f288b9a58d62e34bbfe51f46abd6006d1f1f927a270de80","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"0aae4304ba29c13cc196564ec2276376d124b3552a933aeaca938abee2823ce3","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"b208ec6bb7a399706012cdad19bf52135864d3f1128eaa82329771c5b08c7981","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"3b6eaab1daf480167998a4201c9776aaa4186f1c57769e0e1fdb996ae4aba713","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"0d6e5efeb5a8b2dd522d69a52365107526b6903503ed19111c9624fe2132359d","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"24d3676ecc282af069831a810dea4afa010f419dbf4406be5211c0286d1084c0","object":"f941a288179c5e7232fae75a9d07600096bb0ced","path":"cloud/src/routes/stripe.rs","rule":"IP001","scanner":"full-path"},{"id":"f3fd826027840ef12defda2ce199d1cf33b72732d658f92adeb58322aa005401","object":"2016476401d89358027039b2210e4f3a67cea950","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"a8948c7dd6e84d36d8a8f39b2c2f9e75d736eb54078b93179975e88d974fa7ba","object":"2741651d51baa2c07b4737d4ddcca9956615d995","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"0459527a9da9f72d6b24cc878ba2652ba6f9450e8043184197ad8037253472f2","object":"295217065fae1171b4fcc62634a12089d11e3ea1","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"89df999ece591c7d1c910df04a0f91c9114492f334b91365d293e3eabfac82be","object":"5833c32e6ede27702e1d67861091cf1b25bf2b91","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"afea18a6775340705f78dae39f7ca1825ceb25343caf57a2a47215af53f395af","object":"69117d8fb1c00f0f69de369a9b2445d787b50bdf","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"3ed452c2980bd8d2a5f4973a4a3e59ad2576b510bb40693c9e56b449bf03abe5","object":"7303ae535dc8542f6342659c6cc6bb644d58368b","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"50c4dc5e5090787d9e9515eaa426af65260c454cb1085aa0fef3457c90173c2c","object":"ad839d6fdc3ac527ea894e8c1b8e0b13f50e15cc","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"c8919075f207e19553724acc2a0c35768d1f7978138f896ae231fb6d47b9d2d3","object":"af1666a1e51d7fdc7a43182f499f5fd7919259ee","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"68135a204f56f87e1dcd43686708e3cc9a3ed012684a88dd61c9ec51ecc3e51b","object":"dd2f140ae7f08ba38f9e2e7023baf16bae39ca83","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"db39311602803566a0562e60f42653b265754be01d7e162b405f8af53aa92c30","object":"de2e35b365fb1a1a0848d4b1ea25b3a07edeccc7","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"1370e60a102929dcb98ee88c8323ae49f9519f89598c4c54e383cc8730580e09","object":"f941a288179c5e7232fae75a9d07600096bb0ced","path":"cloud/src/routes/sync.rs","rule":"IP001","scanner":"full-path"},{"id":"aed4279df40a94df9aff3c2c9b2c6cf3c02c1d898d85b26325fc997abadd49f5","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"docs/business/enterprise-ai-gateway/11-core-vs-enterprise-boundary.md","rule":"IP002","scanner":"full-path"},{"id":"9b9f1b35101c7222f534e61a8b6a0e4e5767792c01c22a39c40b0ef880fe6523","object":"5368a58a9e5c80ddec8e53650ca3c0ed03ea6b30","path":"docs/business/enterprise-ai-gateway/11-core-vs-enterprise-boundary.md","rule":"IP002","scanner":"full-path"},{"id":"aede0f39f524c9237b3723926e27ac23fe4da53d0ba76b21b821ef9b683c0bd5","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/enterprise-ai-gateway/11-core-vs-enterprise-boundary.md","rule":"IP002","scanner":"full-path"},{"id":"31a3386d054ea1083d32f6346d4b4e9a89a12a0d1eaccaf847653f3f0d1d787f","object":"b38b7bf1c7920ae9bb6cf549094ec9c0876fae9f","path":"docs/business/enterprise-ai-gateway/11-core-vs-enterprise-boundary.md","rule":"IP002","scanner":"full-path"},{"id":"5fad7639b084ed0fcbab89c69f181361ea638906cde7235a0e4176c2b0940bfd","object":"0b061abda5bbc0337008a27549fb9baee60a3576","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"f025e03c6789cde63c19858a4b8c425cc5488e1aaaac4d3cb70c485fef191164","object":"1082def5c6ce3d68153cfc3e1d216f70a8af8894","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"ecb157ba98684c67a4728d440866a9c2ef310f113413bbc8aa9411da59998422","object":"15ddfc392e1ffde383fb3d6d2d1fad522efd4810","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"7b8394edb5f1d8aeff82e1fd7846f5ebbd49b36c3201c03203062517085603d1","object":"15e001baea944447aa3c170dc0f0a9010e54ac63","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"c1030d9f839401a6b9325c2e3c4ee6023158fd07a4d786b71b85b536885b42e2","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"2601aefaa73773808f189dc2b99faf1cf56cdf91377e48810870b490ae5b0683","object":"3f4ce5eda3cc5ee0477433c0a25f6229a697de9a","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"5029546fb5e00aab0b7ad2ca9794e0a724e120629c2925b6d5893d1df40e8c8f","object":"502e16f097bc68225ee0ed05166d36d2d7ac4808","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"c8fd5e6342666f21f339bbe70bd8fd0bcc167fcba9140edb107fea7ff61f149f","object":"5368a58a9e5c80ddec8e53650ca3c0ed03ea6b30","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"1bcb70f75ac440e5a8705970cac177214b9e9904e67d56746a73e7ebcac6b055","object":"6bf92970be5b909e1591a5f1f30908d0dde896ed","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"6cddd89b55a9f0c4794b04023096ea1c5ba84c86c7c15d095a4ff21d29215d03","object":"6c43879b9443828f9adea9eeee87863020b48c88","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"a40af5c618929e127b725692d7d3b397a90c6586645465845152a099691f409d","object":"ac8db0db92d14814d0f1153e9ea46e1442fba927","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"24ad9437e1568ec4b3043351665cee99217b88ad0cfc00d2a32c1132d332dc31","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"94ba20a3a773beaeb974b9d5d0a82448f7fd92852a0a1cdaa92f9502b15fabbe","object":"b38b7bf1c7920ae9bb6cf549094ec9c0876fae9f","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"962cbe2c9742e8be6af22156785edd4218758d6e9ba1ab945a569c31f2049751","object":"ead23e05cebca040d3a4f4d2a7b2d2471231ceae","path":"docs/business/gateway-integration/HANDOVER.md","rule":"IP002","scanner":"full-path"},{"id":"43ab2621e02b52b79c332eabda1655abbd76008a61e8f72bdae17ed351e403e9","object":"1082def5c6ce3d68153cfc3e1d216f70a8af8894","path":"docs/business/gateway-integration/OCLA-UMBAU-ZIEL.md","rule":"IP002","scanner":"full-path"},{"id":"d05bd1c5a6ceaa61b2b51b04770c8be433a1d46e64550d29dda049ee4f9a2c27","object":"15ddfc392e1ffde383fb3d6d2d1fad522efd4810","path":"docs/business/gateway-integration/OCLA-UMBAU-ZIEL.md","rule":"IP002","scanner":"full-path"},{"id":"ca721fdf11d27ce2e950c900d2ab7d2bc238552e32b1707b01d066138b7ed85b","object":"15e001baea944447aa3c170dc0f0a9010e54ac63","path":"docs/business/gateway-integration/OCLA-UMBAU-ZIEL.md","rule":"IP002","scanner":"full-path"},{"id":"c1f64de264cadd019279c3f3d640fe37823b45b2b0d7ef6fa586964e9d27b659","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"docs/business/gateway-integration/OCLA-UMBAU-ZIEL.md","rule":"IP002","scanner":"full-path"},{"id":"2fa1fb936e73874e2027eb4c45bcdff062677736b9ecfe3864e5a94c1158a678","object":"33716302028755a2059d3b30e6d68760de04d72d","path":"docs/business/gateway-integration/OCLA-UMBAU-ZIEL.md","rule":"IP002","scanner":"full-path"},{"id":"79052c17be672235dab31e4dd68e8d397aa11908afb6f997089e12d256d2bdc9","object":"3f4ce5eda3cc5ee0477433c0a25f6229a697de9a","path":"docs/business/gateway-integration/OCLA-UMBAU-ZIEL.md","rule":"IP002","scanner":"full-path"},{"id":"3e493f5bb445726748fa3fc7d8306e455ae1b6362cb74d7ab0be4bb89e3b836b","object":"ac8db0db92d14814d0f1153e9ea46e1442fba927","path":"docs/business/gateway-integration/OCLA-UMBAU-ZIEL.md","rule":"IP002","scanner":"full-path"},{"id":"2da6f659ad7216b649d22010bbe72527fadc8d1b8fb5d2e8228d6d9749b81ee3","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/gateway-integration/OCLA-UMBAU-ZIEL.md","rule":"IP002","scanner":"full-path"},{"id":"ec6c2c3faf3a91bdc349993fcba7aa66c52ba245dc050efe1d95c6d0c669e865","object":"af0030f183ac3ac42d7703a4953ea260b5ae2e6d","path":"docs/business/gateway-integration/OCLA-UMBAU-ZIEL.md","rule":"IP002","scanner":"full-path"},{"id":"594d929d8586d24159d1823f352e635dcc4ca9065cb333a12ba0423ea9e83640","object":"ead23e05cebca040d3a4f4d2a7b2d2471231ceae","path":"docs/business/gateway-integration/OCLA-UMBAU-ZIEL.md","rule":"IP002","scanner":"full-path"},{"id":"2eece2cbbc3a72b33f1e9abfe253eafc4ed7cf23ada61ff777c991b53d3a4235","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"docs/business/gateway-integration/README.md","rule":"IP002","scanner":"full-path"},{"id":"596a16b9e9e5e7402c7a0d1d38cd3d4bf82bf0488b554b358f76fec290d29c1c","object":"5368a58a9e5c80ddec8e53650ca3c0ed03ea6b30","path":"docs/business/gateway-integration/README.md","rule":"IP002","scanner":"full-path"},{"id":"d37059c43b3f2956fc38d1fe7379190e3fe3b0d226b271d648c166058009e35a","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/gateway-integration/README.md","rule":"IP002","scanner":"full-path"},{"id":"280e68458572f3bbe16144ea7209ef9ad191dbba6db28c4891236dc5f4e39573","object":"b38b7bf1c7920ae9bb6cf549094ec9c0876fae9f","path":"docs/business/gateway-integration/README.md","rule":"IP002","scanner":"full-path"},{"id":"093002530c9947bc9d121f1cdbc8da183fc14c8c0e2ed0287bebd9d40077c629","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"docs/business/gateway-integration/canvases/ocla-soll-architektur.canvas.tsx","rule":"IP002","scanner":"full-path"},{"id":"cb9e98c326a7ab0b1fca3c09a9e3389201f3a0320b2501b7a7b4a8a823ec9739","object":"a7b517adfa78d60948e575afcafd8da058cb5d7f","path":"docs/business/gateway-integration/canvases/ocla-soll-architektur.canvas.tsx","rule":"IP002","scanner":"full-path"},{"id":"8d7bbe613a91f2206e52568cee81017931f62d89ea24ae03133e5a91bca90932","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/gateway-integration/canvases/ocla-soll-architektur.canvas.tsx","rule":"IP002","scanner":"full-path"},{"id":"ff7e209fb1d512918f7d99fadeb403c97370a8a0f093c92b1ba84f2b791a430a","object":"fd64ef9b8757abfe845088d7d7d3ea357f5f4d82","path":"docs/business/gateway-integration/canvases/ocla-soll-architektur.canvas.tsx","rule":"IP002","scanner":"full-path"},{"id":"7de6a83818be87f4d780ac6e62b07606aa24998afaeb2ec217e5c513c0b17a26","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"docs/business/gateway-integration/documentation-completion-audit.md","rule":"IP002","scanner":"full-path"},{"id":"760f5ee648d2530ada06f0bbdc9be3320c6ddb7d2f8aec02dc83b998dd5bc3b0","object":"5368a58a9e5c80ddec8e53650ca3c0ed03ea6b30","path":"docs/business/gateway-integration/documentation-completion-audit.md","rule":"IP002","scanner":"full-path"},{"id":"12759875d5ba6174cabba69edb0ae649b9d3bc17312ebab3a811284d017c70a1","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/gateway-integration/documentation-completion-audit.md","rule":"IP002","scanner":"full-path"},{"id":"addf22b644596245a88120e5406f9c641f665e3796a4c5476b24f65da5e16730","object":"b38b7bf1c7920ae9bb6cf549094ec9c0876fae9f","path":"docs/business/gateway-integration/documentation-completion-audit.md","rule":"IP002","scanner":"full-path"},{"id":"2d3a7a47f572240d32b1df9061d03e588d090973512f71c0db7815ce093ab646","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"docs/business/gateway-integration/plan.md","rule":"IP002","scanner":"full-path"},{"id":"88d31015cb7dc5b0fac0c16cc5fa0b64e2931fdfcf0fcb7a19b1dc9da1a3cf6b","object":"5368a58a9e5c80ddec8e53650ca3c0ed03ea6b30","path":"docs/business/gateway-integration/plan.md","rule":"IP002","scanner":"full-path"},{"id":"9246ffc9b52f0d373381681b6fe44f022d7af892ea54011eccb09ff6737752bc","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/gateway-integration/plan.md","rule":"IP002","scanner":"full-path"},{"id":"c44c6d54281b8e042ca64de5afcc81dfa61957508a14663f6b7c7e10b0f546e8","object":"b38b7bf1c7920ae9bb6cf549094ec9c0876fae9f","path":"docs/business/gateway-integration/plan.md","rule":"IP002","scanner":"full-path"},{"id":"5ac0e0164e6c7084ded9999c17f6a4f6e2577ac02649e1fbd45b0f06b8e1ae99","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"docs/business/gateway-integration/requirements-traceability.md","rule":"IP002","scanner":"full-path"},{"id":"dc13380e6fb18c206fe054614d537d65051da13c1a7718a4f55ef6e12532e4af","object":"33716302028755a2059d3b30e6d68760de04d72d","path":"docs/business/gateway-integration/requirements-traceability.md","rule":"IP002","scanner":"full-path"},{"id":"dd9ff67daec5a662d952fb5290e9c1ce68233b8f5d4f655987f41a5aba73c37f","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/gateway-integration/requirements-traceability.md","rule":"IP002","scanner":"full-path"},{"id":"4260db481dd22bfeba7f722f24a1fe722ea5b5eb2d5d470b9dcfab5392cc4089","object":"af0030f183ac3ac42d7703a4953ea260b5ae2e6d","path":"docs/business/gateway-integration/requirements-traceability.md","rule":"IP002","scanner":"full-path"},{"id":"f7057adea0428b8bd63dd99ad0f332053dde1b20a35e1b74ab219b203bf51e90","object":"c3f55a9fdedc5670157535fda61730efec16e180","path":"docs/business/gateway-integration/requirements-traceability.md","rule":"IP002","scanner":"full-path"},{"id":"a78ebba9f053062163d82ea8c6016e780f535c9c7ad051e6b1131217a8b9db3c","object":"da6ba2578bae1ed15d1d13d59f677093447d4e4a","path":"docs/business/gateway-integration/requirements-traceability.md","rule":"IP002","scanner":"full-path"},{"id":"3be7f023eca238c0f8327f95162e0ee036f79e72af1e16fce70497a349cf1642","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"docs/business/gateway-integration/tasks.md","rule":"IP002","scanner":"full-path"},{"id":"1d13c1af0ae92db4c8c9947e876ce3ae7f8c8c61a820d8ea32db49805a15d9a3","object":"5368a58a9e5c80ddec8e53650ca3c0ed03ea6b30","path":"docs/business/gateway-integration/tasks.md","rule":"IP002","scanner":"full-path"},{"id":"83ba92ecd8ae7a279ca5c10aa6278f5702cfffe2037492ec7a36ad8cdd5137f5","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"docs/business/gateway-integration/tasks.md","rule":"IP002","scanner":"full-path"},{"id":"5a50e9e8734aafc0fc823843261531fe032e9f6f7963c4981c207eb9530f4eff","object":"b38b7bf1c7920ae9bb6cf549094ec9c0876fae9f","path":"docs/business/gateway-integration/tasks.md","rule":"IP002","scanner":"full-path"},{"id":"cf8e55df02479215adf706c15fac5c5c0e36a145b1d112c4be1a5209535c5153","object":"0bad5a3d2f4965979307f4c306721ae5a7a3bdba","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"7c40bc09316b38f24097d4f6e7e3967480670abeef611c387f374e3908fd5d28","object":"1e6d156fc79fcc291df645083014585ba2ea505a","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"44b59fa2a18d7fdfcce3909bce24145ee021bc736a74613f6a5e7aabb9654b59","object":"2552026359f57812a1b7097a6995437c8dff0f55","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"fd7e7127c6ed73d2881c8d6636fe3498244e296432d534623cfd367a438c9414","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"82e8335798c8de6167a4d68907889d553f377179cfd10052b28ee7288d41d6ec","object":"33716302028755a2059d3b30e6d68760de04d72d","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"b5886f2c73e9a255fd1a45fd0791141ce1ad363adfaba797fd7e853b66a70ece","object":"5881d5511d0316eab31e4ec0bbe1d55b6dcd4887","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"1b933b9bc79813ea3d3987c568bf316002e9cdf98da642337e828dc3b9945412","object":"659388edf6bd78e645fac7676aa8547d9466e37f","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"cda6f3a6990cb723773fd64834339dd207813f4d95f9a158e7c37742fb0f8c6b","object":"68b498cb15c7df9514d0ff88a29d007df4d78e14","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"51ab7d14b39fcc9ac647a7bfc04c04fe45f40f06d43d752c1c53dee123e68c12","object":"781b2c4d25bb458545278d8b74f0f654f9b80072","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"43708200341a8edbad2df62e0ae144ccb9c28c0b7bcfd3b591fefb11ce524869","object":"868a751801699feb94875fa2f427fc5ed17981c0","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"38c057cf2a9a27016667c0f3e2e6e22bd680c39abc0fef7f8af8a353470269c7","object":"a1f1b9017e3ff7368b20dbad6677539770c9a387","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"d80234c382b922944d1f0064a2fb615d6fe5642125b19f816f6cb0706f8cdc2e","object":"a7f4da98c0b9507e40081edde80556c5ffa2965d","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"1bcf75e45d4f24d4bbddb2a37c8d414565f4391184e1a9bba68ea3acc7b963ea","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"0331a0dc2c4bf8b6742614a22629ca2d133c6fed977fce979ae5691af2bfa03a","object":"af0030f183ac3ac42d7703a4953ea260b5ae2e6d","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"5d4736ae6532817dc02b4258432cba6e59cdc4e5f89d13cc6eedc3e9eec59c3a","object":"c2d0c345198fd1b41d68ab1ea3b7fb9eba08cc38","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"b1b273790cae4fbbd7f2a1c4d2ec9e1378d508f334ada8619010017baa778dc9","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"5e52c66c0048d9046a30daa936511301453ceb1ce3af54f45d0fba84e0ff4cdc","object":"c67e609db5adf224f5bb06f52755b3e1be042347","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"bac60500cc9f0c43d0c843d1395a72e03a16925e1e5d7cf53e3e304b16b5537b","object":"cb93a4bfa0cdbf0594afe3b0e18f4c840e52d067","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"fe43c7af6fefba58e7180686e373f15cb7aead61fabd8a7f78d40c6828dff7ef","object":"d782c03d0a3a3846fbe9023ba7405dcb56c410de","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"430322690a9b9ca2265a902e1a132d6374e294e6a35f55aaac681c23ca2606df","object":"f75e5fee43a82e214876a364072e1e191fe077d3","path":"memory-bank/activeContext.md","rule":"IP003","scanner":"full-path"},{"id":"fcc342966e0b4eadc6d4f8cc6c68cf6d6bbbb337458ddb76cac81ca5cc359639","object":"2552026359f57812a1b7097a6995437c8dff0f55","path":"memory-bank/cockpit-audit.md","rule":"IP003","scanner":"full-path"},{"id":"d4c619635f704974495fb2161d0d6ba5e594e57afa74018ff170e795dea3ee16","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"memory-bank/cockpit-audit.md","rule":"IP003","scanner":"full-path"},{"id":"036f2b707cb553efd20c3d7d017cd83ca9a3cebee01cfe312165ebe8d31af5f6","object":"868a751801699feb94875fa2f427fc5ed17981c0","path":"memory-bank/cockpit-audit.md","rule":"IP003","scanner":"full-path"},{"id":"d911b354c76d253649a378a558ba176d5397c360d8f17bba1ca4cbb90bccdacf","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/cockpit-audit.md","rule":"IP003","scanner":"full-path"},{"id":"928d6394a036f6f11dc09eb2a3fcf24e4888655693bc4d58795ea4f97159a58b","object":"c67e609db5adf224f5bb06f52755b3e1be042347","path":"memory-bank/cockpit-audit.md","rule":"IP003","scanner":"full-path"},{"id":"17533f4094d83ecf75bb6ee3eba70f8c8a6c46716770da448effdbccecf1f700","object":"cb93a4bfa0cdbf0594afe3b0e18f4c840e52d067","path":"memory-bank/cockpit-audit.md","rule":"IP003","scanner":"full-path"},{"id":"5512c84fafd7cc0651bd26055696b2e6a33bae73d6ac59b80f49cd057307e723","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"memory-bank/decisions.md","rule":"IP003","scanner":"full-path"},{"id":"92019521f86b1ccb51821b2a6416735ba4681c47e492f521deae1c23203a4f0c","object":"68b498cb15c7df9514d0ff88a29d007df4d78e14","path":"memory-bank/decisions.md","rule":"IP003","scanner":"full-path"},{"id":"49f865091165f24b7aee9bf86458f960a3360ea5569a3211841f3f087fb33e71","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/decisions.md","rule":"IP003","scanner":"full-path"},{"id":"88ec061235926bbc6dc7831707e80efffee83d324fba083e6ef5b3d3bf3f0436","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/decisions.md","rule":"IP003","scanner":"full-path"},{"id":"43b67acfb700a85a49fbd91ed8c3ac1ca071c71838a254d3e33aa4a7b23b98c8","object":"0bad5a3d2f4965979307f4c306721ae5a7a3bdba","path":"memory-bank/deployment.md","rule":"IP003","scanner":"full-path"},{"id":"e276e65a874866b79fdff54204edec2a11c661a8e22d3b9969518a3dbd1ad769","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"memory-bank/deployment.md","rule":"IP003","scanner":"full-path"},{"id":"d8e8cafd9ea16a530aad65fc42cc8b7fb963e2453a94a0a0eceafbb40afb0c98","object":"68b498cb15c7df9514d0ff88a29d007df4d78e14","path":"memory-bank/deployment.md","rule":"IP003","scanner":"full-path"},{"id":"7b5fe4366d8ecac1f54d00d526940196d13bb6f0c1b1a536ba77a38cdd9780ed","object":"a1f1b9017e3ff7368b20dbad6677539770c9a387","path":"memory-bank/deployment.md","rule":"IP003","scanner":"full-path"},{"id":"af9b8db78afb67aaa6815ca225667f912460d462aa9347282b1f768406a81d0a","object":"a7f4da98c0b9507e40081edde80556c5ffa2965d","path":"memory-bank/deployment.md","rule":"IP003","scanner":"full-path"},{"id":"e4d0a5c507e30f3385d0be5df2f238f3cf89c7bbfe2eee596aa12256d1568658","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/deployment.md","rule":"IP003","scanner":"full-path"},{"id":"a150b0a5996e0d61da0f6eb89c4993253ff48fd938ac39da9f97e62a88e6aa1f","object":"c2d0c345198fd1b41d68ab1ea3b7fb9eba08cc38","path":"memory-bank/deployment.md","rule":"IP003","scanner":"full-path"},{"id":"78283a25b6a824edc39c78cbde94eb33e46825ac6d2d35f3088493d066785c89","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/deployment.md","rule":"IP003","scanner":"full-path"},{"id":"3cb1e6c7f3edead80d95a73bb9c9f4fea222b2946cf14b96a9f89089fcda0f0a","object":"0bad5a3d2f4965979307f4c306721ae5a7a3bdba","path":"memory-bank/productContext.md","rule":"IP003","scanner":"full-path"},{"id":"a72cb906a04c7247b94fec4d21110d3877d9d144f07901e0dd43d8114e2d9f5e","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"memory-bank/productContext.md","rule":"IP003","scanner":"full-path"},{"id":"b497c93a0ce8bf21f2ce52dbdcf825c6a6ebc8ae0fac0db47a4ff324cd2b16dd","object":"659388edf6bd78e645fac7676aa8547d9466e37f","path":"memory-bank/productContext.md","rule":"IP003","scanner":"full-path"},{"id":"47c150fe8e56e96c8ff7a6325e49f7b78d6a56d8cc5ee99d56f310624a33cb8e","object":"68b498cb15c7df9514d0ff88a29d007df4d78e14","path":"memory-bank/productContext.md","rule":"IP003","scanner":"full-path"},{"id":"0ad168d326d99d95b9d78f0575e5ce207a3068b6a5c1248cbf16d98e2f260bbb","object":"781b2c4d25bb458545278d8b74f0f654f9b80072","path":"memory-bank/productContext.md","rule":"IP003","scanner":"full-path"},{"id":"7d70aeec853d22c139e0a1485eb8da8b292ea24dbe6882cf6e2df94c145c49b0","object":"a1f1b9017e3ff7368b20dbad6677539770c9a387","path":"memory-bank/productContext.md","rule":"IP003","scanner":"full-path"},{"id":"fdbceab52b3e595e5d20995c082be5c2322686833d63ed4aeb0f95a69ac01fc9","object":"a7f4da98c0b9507e40081edde80556c5ffa2965d","path":"memory-bank/productContext.md","rule":"IP003","scanner":"full-path"},{"id":"bedfc5817cb8879a4002ad084fa1fb2525877aa41573b67f49f7c320fb44121a","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/productContext.md","rule":"IP003","scanner":"full-path"},{"id":"9b8b7f4dcb1cee378f663c2f14bed66de44d98fd5bd33179a6c65f92687cc290","object":"c2d0c345198fd1b41d68ab1ea3b7fb9eba08cc38","path":"memory-bank/productContext.md","rule":"IP003","scanner":"full-path"},{"id":"e9b5d107f1a42ca6873ba2b23a7697d58747e710df5f7e95ee1a522c3067e735","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/productContext.md","rule":"IP003","scanner":"full-path"},{"id":"90c9a3bd6708d0487e999094486e34f9dc5228e6a47c7d6ab9491c25a684b299","object":"0bad5a3d2f4965979307f4c306721ae5a7a3bdba","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"eeade5ea0777bd78451efceb012f3e31c8ba18166f0845bfb3f2114d7bbb0d6a","object":"1e6d156fc79fcc291df645083014585ba2ea505a","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"288bf07189f541d096203d51fae022e4e5130c107c6aa833059d2d5bb27d4db5","object":"2552026359f57812a1b7097a6995437c8dff0f55","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"7ffedd0adf70549fa5cee1b8953453fd77da3f31a0cf9ac55e1b6886fdbc2c8b","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"0bdc81acc8957edddf2bfc5147f8f93ffa02ae90913bcb5332fd30ff6431bef8","object":"33716302028755a2059d3b30e6d68760de04d72d","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"19b09fc748f31cdf5735552bb8dabe705ead86d3aeeea01b0b0433c8c604413e","object":"43f3c1e3620bbb8f7f8808ad01555f6689cf6618","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"5faf61829f2b70078c40f0de4f790b6ad2c6b1f2880d51caf4e197a84350ebd6","object":"5881d5511d0316eab31e4ec0bbe1d55b6dcd4887","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"608a517bab174b2066d144ddfab5adfc8e73445deb663e485ead52fe0683f37a","object":"659388edf6bd78e645fac7676aa8547d9466e37f","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"a0d7248691ffd861552c39eb53e678b75ed4d76ea1c83555835c803fa39bb5fc","object":"68b498cb15c7df9514d0ff88a29d007df4d78e14","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"b5b8fde460c3beac3a185069ccf59eb42e9b6665784316d3d0d0afcf407c9499","object":"781b2c4d25bb458545278d8b74f0f654f9b80072","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"8bee983acbf4bb0064039012f01256769487f56d9aafae9ae84778598071577b","object":"868a751801699feb94875fa2f427fc5ed17981c0","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"2f2acb259e7871e2617314538933a15ad18f086b92c4afdd9e3a98ba3d35d433","object":"97e697294e8a1f58f8be27a840cd66ef2a0a8370","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"0764f07a52faa9f3ee361b26c1c4752e14d76058672785e5ff1f4680f6de9e80","object":"a1f1b9017e3ff7368b20dbad6677539770c9a387","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"088d3202c186f8875171f945194e64d06e9eda52c643c09fe69afc8198fe462e","object":"a7f4da98c0b9507e40081edde80556c5ffa2965d","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"eb4f77bed7d05107a9c47ed0df6a9c691fbc627d0f7c03e9f4eb4fcda0fdeb9c","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"ed32d55325ed89641d614124fb336b38a0dd121fffbf1c6bd12c2bf5728371c2","object":"af0030f183ac3ac42d7703a4953ea260b5ae2e6d","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"bf823cc5d200f7c2582b0ab3532d16855a97802905468f88259103658d75a9b6","object":"c2d0c345198fd1b41d68ab1ea3b7fb9eba08cc38","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"c7f0e0d4045a33e145714f753fcc75bc5ded3adf403fef996bbd8a0513e973fc","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"69ea7f3d3881ed130489a5936e6beafebb65890d3884746527759880e0886313","object":"c67e609db5adf224f5bb06f52755b3e1be042347","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"6921fa4b002ea577d637c3615d1cb3c481bfa8576fb0f54fa28919c35c58075f","object":"cb93a4bfa0cdbf0594afe3b0e18f4c840e52d067","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"206d7a44ba58c0bda53e8aa2e64e0548a3376032f2e31dccf10a457b717967d3","object":"d782c03d0a3a3846fbe9023ba7405dcb56c410de","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"579fb745edb197080ae3b6cbbe326eb0340f5f730c8d79183ba8f1199b298817","object":"f75e5fee43a82e214876a364072e1e191fe077d3","path":"memory-bank/progress.md","rule":"IP003","scanner":"full-path"},{"id":"3595635572489be8b1c0e2e37e52c1959cc301b22c1aac66c9eecf93f85f6b14","object":"0bad5a3d2f4965979307f4c306721ae5a7a3bdba","path":"memory-bank/projectbrief.md","rule":"IP003","scanner":"full-path"},{"id":"8f3f2e1e792c1093ec45ca84b5cdce3a91e01d65760c9e1021127857e3d46e1a","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"memory-bank/projectbrief.md","rule":"IP003","scanner":"full-path"},{"id":"bb9923285fdd4c99ec111409cf6f2f02a39f64abc5dc7942a7b00bcedbe4aad4","object":"659388edf6bd78e645fac7676aa8547d9466e37f","path":"memory-bank/projectbrief.md","rule":"IP003","scanner":"full-path"},{"id":"ccd536a43d99a2222633ca09b8e17a531cbb0b52f52c30b295b9689e2d622fe6","object":"68b498cb15c7df9514d0ff88a29d007df4d78e14","path":"memory-bank/projectbrief.md","rule":"IP003","scanner":"full-path"},{"id":"a190dac2578cadc46eeed73910ba82735360cd7d1d074ea5bbd8287b0ed3cbed","object":"781b2c4d25bb458545278d8b74f0f654f9b80072","path":"memory-bank/projectbrief.md","rule":"IP003","scanner":"full-path"},{"id":"98d63d984ef892cc7a8d9c81a7903671da0c3d429446906d1a005d85b6623df9","object":"a1f1b9017e3ff7368b20dbad6677539770c9a387","path":"memory-bank/projectbrief.md","rule":"IP003","scanner":"full-path"},{"id":"96d9fce8ae803c1e57ed38dadc6750e199d29bea5845eb3fef3fe798128aeb0f","object":"a7f4da98c0b9507e40081edde80556c5ffa2965d","path":"memory-bank/projectbrief.md","rule":"IP003","scanner":"full-path"},{"id":"b68c20b65d8ae704390c738b3ab547b4c1253ed10d50477cc758819123abf9ba","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/projectbrief.md","rule":"IP003","scanner":"full-path"},{"id":"06a067f16baaeafd8f69f00464f206cc13fa39c4f7e3c1523e9a37c519879955","object":"c2d0c345198fd1b41d68ab1ea3b7fb9eba08cc38","path":"memory-bank/projectbrief.md","rule":"IP003","scanner":"full-path"},{"id":"01a1df86e09431a2b04b0c01c4d9a89579e100f347dd4e56606cf984d4fc2c17","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/projectbrief.md","rule":"IP003","scanner":"full-path"},{"id":"2bf6fe0730c4429b43d96ff5697ceaa922531d7e8794ae524ea750d0533d8867","object":"0bad5a3d2f4965979307f4c306721ae5a7a3bdba","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"7b361a9e56e505ee2a7911073315066a3ac1546af27a922b92320bb131f9e9b2","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"332030e11fff6466b6c396df46949413e3466fb9fce72c4bbc6d693975a3942b","object":"36fec5adf9e0973df0302ff992539a74e9acee57","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"c82316f4fc4475419c674456a5c3a10b3cc90e523bb849be459b8f89c7bb8261","object":"62e3df3bf28bb97c99336007b45392ec5aaef377","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"1156ddbfe9acc1ff1a372f2760433b950ddd1d74bfda4db77bfd46276128ebf4","object":"66775905790bea4261977e788524d5c8914cf777","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"1e9db1c68cee1165349eebb7fb2bbb96735d00d650fd38bdf67a3e6e4ae4a9a3","object":"68b498cb15c7df9514d0ff88a29d007df4d78e14","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"c2a38a89d89047142d76d1692171429cd05ee94d5f017002eaabbc8b9f10ba59","object":"7d873020ce65a462cb53181534389b870e2ce936","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"0975d4fe27a41b701dfa50277451b7288b25f64b76f22c8ab9f346fb6fd4e41b","object":"807fb714b1718cac00e2fe0f1e42f16b48855ac5","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"ed636a69f432a89d6651409a92640d2b559d23f30da3c676b02c27e33ee7d298","object":"992bab6ef2c3c92304222abf1046f4a01b6b34c5","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"14e101e663e27fd92982887d83a16e1ce7f24ff9d16254d43b18cde057c1f3ea","object":"a1f1b9017e3ff7368b20dbad6677539770c9a387","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"2a35d35bee950e0830884a40d2c26972226eb2488ca678a00be4afd0e190783b","object":"a7f4da98c0b9507e40081edde80556c5ffa2965d","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"6cc592c2a1f629e1921fdc40f58ea99dfb4dbb55ee3e2d21ba69ee798a6e5d6d","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"795d1b728cc0d15f24da6892277dbddf3c2d53efd163f4ac640f35363ccb9972","object":"c2d0c345198fd1b41d68ab1ea3b7fb9eba08cc38","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"a1c97e374fa509e2580fd0131b8a79e1f80e10e15a784111d96563b34e5391e0","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"8565ba68c2b8ffbee91c644ba5c802814b113dd7300d39f3288f2858422e43a4","object":"e514f755717aab782ecb9295503ac900e5742991","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"0c172a089fcb4ac9d39aaa2d91cefdead02f3129969bb7edb8598159636a817d","object":"edcf55eb0744a50cb77fede85d33c8197df9073b","path":"memory-bank/release-checklist.md","rule":"IP003","scanner":"full-path"},{"id":"04953cad48c2c8326ccd4e21292b99f55dcd89e55a7a8d2ecdaf3eda2396fa3d","object":"0bad5a3d2f4965979307f4c306721ae5a7a3bdba","path":"memory-bank/systemPatterns.md","rule":"IP003","scanner":"full-path"},{"id":"8fae8942fa41c5a953c61263a6b35303ec3e3ede7811e50a9637b92b69a8470e","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"memory-bank/systemPatterns.md","rule":"IP003","scanner":"full-path"},{"id":"21b85b39b13d0024a70bd2e2aecc949b0e772c4259fd393d026595c887bbbad5","object":"659388edf6bd78e645fac7676aa8547d9466e37f","path":"memory-bank/systemPatterns.md","rule":"IP003","scanner":"full-path"},{"id":"e75a93c449ea7cdbedd4a24c2189cf84c769d95e1b78b71ad2b66dd7ceb2e029","object":"68b498cb15c7df9514d0ff88a29d007df4d78e14","path":"memory-bank/systemPatterns.md","rule":"IP003","scanner":"full-path"},{"id":"171cd1e2caeef5e615a1e25b27058dbb1aa3d728c453c8a45441a26722969f44","object":"781b2c4d25bb458545278d8b74f0f654f9b80072","path":"memory-bank/systemPatterns.md","rule":"IP003","scanner":"full-path"},{"id":"84d47d76218d3a76722fe5c014bb8a3d55438eafd13f037541dd0294728d2141","object":"a1f1b9017e3ff7368b20dbad6677539770c9a387","path":"memory-bank/systemPatterns.md","rule":"IP003","scanner":"full-path"},{"id":"c21ff1388ea039a4dc09dd6a5c738072cb0c5929d47d8a72f0acbfb64bd66987","object":"a7f4da98c0b9507e40081edde80556c5ffa2965d","path":"memory-bank/systemPatterns.md","rule":"IP003","scanner":"full-path"},{"id":"a4c9cae2c1d6d197a462633c8061dd1455def9b92abae53d90a60373898f16b2","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/systemPatterns.md","rule":"IP003","scanner":"full-path"},{"id":"c6297f8baedee3cc44825dd7b8dfa6e309d9b8213bd661bbbe7ba653f46168ec","object":"c2d0c345198fd1b41d68ab1ea3b7fb9eba08cc38","path":"memory-bank/systemPatterns.md","rule":"IP003","scanner":"full-path"},{"id":"7e2c6fdf0b07f711eaef6dcbce804d6e014e8793e068aa53e8cb116eaa559556","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/systemPatterns.md","rule":"IP003","scanner":"full-path"},{"id":"1cd52d87430ba5bfb70bea8476dc59adf708d17fea1c8e0b0e765c9480f557cb","object":"0bad5a3d2f4965979307f4c306721ae5a7a3bdba","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"c7f79e86fca3fae9df4b2864c566506d386f766704450ed5cef815172f03bc5b","object":"2853a7021a8a64b7b92a57f455757a4a93c4eda4","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"949c52f92d2c982118a4041cbd3ff654e7ad450858d363b24628b904674e1575","object":"43f3c1e3620bbb8f7f8808ad01555f6689cf6618","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"67091e4841acfb7937070de3c7e6fb7593c6528bf247a1123b1f3e3ede0eef0b","object":"659388edf6bd78e645fac7676aa8547d9466e37f","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"ddeb194287867fae9d6e66c805c79313af4b2f884d35f083ba89291ba3f2b70b","object":"68b498cb15c7df9514d0ff88a29d007df4d78e14","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"270136bc013f94b0ffece6001519b08300387ab9cf329f36a0bb122c2a375d0f","object":"781b2c4d25bb458545278d8b74f0f654f9b80072","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"95f9f20c4af64ca01cab71de2eb442c8268f3a269c359841d5ffe657c6d7b837","object":"97e697294e8a1f58f8be27a840cd66ef2a0a8370","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"f6b4440838923dfc6b9c9d63ad5ff0011eafa9980294e5e2153677c1a5a0ba3d","object":"a1f1b9017e3ff7368b20dbad6677539770c9a387","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"07e821d85289ed03b56c8ad7b52ff0a5b1b584e494b7474ad231984271259fdc","object":"a7f4da98c0b9507e40081edde80556c5ffa2965d","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"89ffb6bc878581c1656fda6ba0959b1288bfcae1aab2fa40987d5f8ba0a76652","object":"adc56b24126bf104162c065f13404d2ec993683e","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"6c8beb52d0b550f82fc9cf29a4a4aa04d9d3d28f74452e187dec373308c120fd","object":"c2d0c345198fd1b41d68ab1ea3b7fb9eba08cc38","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"c420dc4b01c68c4c869dc52c5f084ce156ba93c12e492d5468a43ac9ddd57642","object":"c3bc08f0870c742734a28ada379de21495724450","path":"memory-bank/techContext.md","rule":"IP003","scanner":"full-path"},{"id":"6048efdb327810427e6a32996d753861b1ecd2d5714e63fd3f0267dc9636d047","object":"13e3e7635355059de19683ec9137326d33ad9f26","path":"server.md","rule":"IP004","scanner":"full-path"},{"id":"404b84c26fb1e4d1a554ea886f98f68d401cb22ca81b334d1524bc5daf114aca","object":"99a219004cd93e98a32bf9f386d44f4807ff3222","path":"rust/src/core/billing/stripe_invoice.rs","rule":"IP006","scanner":"full-path"},{"id":"c50728012631067f6bc1cd544b67dbbef17fcd02ec056900e69ff69691aec7ca","object":"a8b4e4a6c5a0236529a2b2a3f05e85bcb086099f","path":"rust/src/core/billing/stripe_invoice.rs","rule":"IP006","scanner":"full-path"},{"id":"13ec943d4ed5beb07d208e72fa03d71d94b584ede11e152bb57bf033e12fa4f8","object":"d2ab293db68108b796a7107302a80ead9f11b2bd","path":"rust/src/core/billing/stripe_invoice.rs","rule":"IP006","scanner":"full-path"},{"id":"5f151eb69027dcbc68a1686d1ba0fc15d66a941786308feeca59d58d74928b2e","object":"fd65cd5cc7007c16c7cf07f0929a0cd5450d9c5f","path":"rust/src/core/billing/stripe_invoice.rs","rule":"IP006","scanner":"full-path"},{"id":"149e6e08701d5338b2653ebdf29c2706093cfe441cca5cb2de9d844964cd7275","object":"13e3e7635355059de19683ec9137326d33ad9f26","path":"server.md","rule":"SEC001","scanner":"full-secret"}],"policy_sha256":"789f38f3cc1967029fa5b61e0c621ad5d77fd881d6c109f865ebba1bb65f8e43","scanner_versions":["commit-path/v2","diff-pickaxe/v3","public-tree/v3"],"schema_version":"leanctx.full-history-evidence/v1"} diff --git a/security/history-policy-v1.json b/security/history-policy-v1.json index 7214fecd69..f7b23c382a 100644 --- a/security/history-policy-v1.json +++ b/security/history-policy-v1.json @@ -4,7 +4,7 @@ "max_commits": 20000, "max_objects": 300000, "max_findings": 5000, - "command_timeout_seconds": 120, + "command_timeout_seconds": 300, "full_audit_timeout_seconds": 1800 }, "forbidden_paths": [ @@ -35,7 +35,65 @@ ], "secret_rule": { "id": "SEC001", - "pickaxe_regex": "AKIA|ghp_|gho_|ghs_|ghu_|ghr_|sk_live_|PRIVATE KEY-----|postgres://[^\\s]+:[^@\\s]+@|postgresql://[^\\s]+:[^@\\s]+@|mysql://[^\\s]+:[^@\\s]+@" + "rationale": "Two stages. pickaxe_regex is a POSIX ERE git evaluates natively to narrow candidates (git log -S --pickaxe-regex, git grep -E); it is a line-level superset of credential_patterns and deliberately interval-free, because bounded repetitions make git's POSIX matcher several times slower over full history. credential_patterns are Python regexes over the whole blob and decide: real credential shapes only, never bare prefixes. PEM blocks need base64 key material after the BEGIN line. Database URLs need a literal password of at least min_length characters that is neither a placeholder ($VAR, {var}, , [var], %s, masked ***) nor a documented local development default. AWS documentation keys ending in EXAMPLE are not credentials. A match holding an ascending run of synthetic_run_length digits or letters is a hand-made fixture. reviewed_blobs exempts individually reviewed content by git blob ID only; any edit is scanned again.", + "pickaxe_regex": "gh[pousr]_[A-Za-z0-9]|github_pat_|A[KS]IA[0-9A-Z]|[rs]k_live_[0-9A-Za-z]|PRIVATE KEY-----|(postgres|postgresql|mysql|mariadb)[+a-z0-9]*://[^@[:space:]]+@", + "credential_patterns": [ + { + "id": "github-token", + "regex": "\\bgh[pousr]_[A-Za-z0-9]{36,}\\b" + }, + { + "id": "github-fine-grained-token", + "regex": "\\bgithub_pat_[A-Za-z0-9_]{22,}" + }, + { + "id": "aws-access-key-id", + "regex": "\\b(?:AKIA|ASIA)(?![0-9A-Z]{9}EXAMPLE\\b)[0-9A-Z]{16}\\b" + }, + { + "id": "stripe-live-key", + "regex": "\\b(?:sk|rk)_live_[0-9A-Za-z]{24,}\\b" + }, + { + "id": "pem-private-key", + "regex": "-----BEGIN (?:[A-Z0-9]+ )*PRIVATE KEY-----(?:\\\\r)?(?:\\\\n|\\r?\\n)(?:[ \\t\\\"'+,]*[A-Za-z-]+:[^\\r\\n]*?(?:\\\\r)?(?:\\\\n|\\r?\\n))*(?:[ \\t\\\"'+,]*(?:\\\\r)?(?:\\\\n|\\r?\\n))?[ \\t\\\"'+,]*[A-Za-z0-9+/]{40,}" + }, + { + "id": "database-url-password", + "regex": "\\b(?:postgres|postgresql|mysql|mariadb)(?:\\+[a-z0-9]+)?://[^\\s:@/'\\\"`]+:(?P[^\\s@/'\\\"`]+)@" + } + ], + "password_policy": { + "min_length": 8, + "placeholder_prefixes": [ + "$", + "{", + "<", + "[", + "%" + ], + "placeholder_markers": [ + "${", + "{{", + "$(", + "***", + "%s" + ], + "dev_default_passwords": [ + "changeme", + "password", + "leanctx-dev", + "leanctx_e2e", + "localtest" + ] + }, + "synthetic_run_length": 8, + "reviewed_blobs": [ + { + "blob": "9698c59bbf61ff6742c4d9762ea1f452139c01c5", + "reason": "Self-signed loopback TLS test key (certificate CN=localhost, SAN localhost and 127.0.0.1, reviewed 2026-10-17). Read only by HTTPS loopback integration tests; it authenticates nothing outside the test process." + } + ] }, "policy_source_path": "security/history-policy-v1.json", "scanner_source_paths": [ @@ -54,8 +112,8 @@ ], "scanner_source_sha256": { ".github/workflows/security-check.yml": "5afe73f93ce67b5832fb1839c707c5a75a18951cdf015aedca3b6177743e9d83", - "scripts/history-policy-gate.py": "6191eb7e86b7253aef09c9ef9bb5167ba599f91f9e23d43be61452d039511ba8", - "tests/security/test_history_policy_gate.py": "ad6c71cadb5e5896ba926f9633249c571c9449af63605cc0d91c27ccbabfd108", + "scripts/history-policy-gate.py": "d018605b96d155293854985a1627da3bfc18e2721a7640b5530c9889ecfdb899", + "tests/security/test_history_policy_gate.py": "3aac0ee607d6968a9a0e755e2020be2a0fdfb2f44760cb91dba6fbc1aabb2f29", "tests/security/test_security_check_workflow.py": "2d0c9b9a6ceb61c97379290d549bbdcf7812ce17db9794b5d1b067e2202c2844", "rust/src/proxy/anthropic.rs": "02be2417f1eaab0730b4328fee90c91179c46f8ed4c0c2ae2f4737d2331537b7", "rust/src/proxy/anthropic_tests.rs": "d8e6572b778d48b2a158c2caf1ea9807ae03621b3215f31f3a2cde078b2a8c53", @@ -66,8 +124,8 @@ "rust/src/proxy/openai_responses_ws.rs": "968b11785cc3fb3229b2dbd0c7e8339654f9b15e9af0c8a2cbe8215c35bea284" }, "baseline": { - "commit": "bff280bfc8eba6959854fafcbf104b5745d794c3", + "commit": "b37ee3be11f2525cd785348d3e43ccdbb590fe94", "report": "security/evidence/full-history-baseline-v1.json", - "report_sha256": "f2698fc347bd51b756b3ecbde00231e12953beb5a16db64ffd40fd9df5e2f3e6" + "report_sha256": "29fb4b0997f3f45cd80091dd6d365a3097644d7dae6dc1a41c88303a6572501e" } } diff --git a/tests/security/test_history_policy_gate.py b/tests/security/test_history_policy_gate.py index 8dd599c0f6..091c521c20 100644 --- a/tests/security/test_history_policy_gate.py +++ b/tests/security/test_history_policy_gate.py @@ -12,6 +12,17 @@ SPEC = importlib.util.spec_from_file_location("history_gate", ROOT / "scripts/history-policy-gate.py") GATE = importlib.util.module_from_spec(SPEC) SPEC.loader.exec_module(GATE) +REPO_SECRET_RULE = json.loads((ROOT / "security/history-policy-v1.json").read_text())["secret_rule"] + +# Fake credentials are assembled at runtime so this file never holds a literal +# that a scanner (this gate, push protection, the CI pattern scan) would match. +MARKER = "DONOTPRINTTHISVALUE" +STRIPE_LIVE = "sk" + "_live_" + MARKER + "Q1w2E3r4T5" + + +def fake_stripe(tag): + # No ascending runs: those mark a fixture as synthetic (synthetic_run_length). + return "sk" + "_live_" + tag + "Q1w2E3r4T5y6U7i8O9p0A1s2" class HistoryPolicyGateTests(unittest.TestCase): @@ -72,9 +83,9 @@ def commit(self, message): def write_policy(self, commit, digest, report="baseline.json"): policy = { "schema_version": "leanctx.history-policy/v1", - "limits": {"max_commits": 50, "max_objects": 500, "max_findings": 20, "command_timeout_seconds": 10}, + "limits": {"max_commits": 50, "max_objects": 500, "max_findings": 100, "command_timeout_seconds": 10}, "forbidden_paths": [{"id": "IP001", "prefix": "private/"}], - "secret_rule": {"id": "SEC001", "pickaxe_regex": "sk_" + "live_|PRIVATE " + "KEY-----"}, + "secret_rule": REPO_SECRET_RULE, "policy_source_path": "policy.json", "scanner_source_paths": ["policy.json", "scanner.py"], "scanner_source_sha256": {"scanner.py": hashlib.sha256((self.repo / "scanner.py").read_bytes()).hexdigest()}, @@ -86,7 +97,7 @@ def policy(self): return GATE.load_policy(self.policy_path) def test_full_audit_is_bounded_and_redacted(self): - secret = "sk_" + "live_DO_NOT_PRINT_THIS_VALUE" + secret = STRIPE_LIVE (self.repo / "leak.txt").write_text(secret + "\n") (self.repo / "private").mkdir() (self.repo / "private/data.txt").write_text("internal\n") @@ -105,12 +116,12 @@ def test_clean_current_and_delta_pass(self): self.assertEqual(report["findings"], []) def test_current_and_delta_secret_fail_closed(self): - (self.repo / "leak.txt").write_text("sk_" + "live_DO_NOT_PRINT_THIS_VALUE\n") + (self.repo / "leak.txt").write_text(STRIPE_LIVE + "\n") self.commit("secret delta") report = GATE.gate(self.repo, self.policy()) scanners = {item["scanner"] for item in report["findings"]} self.assertEqual(scanners, {"current-secret", "delta-secret"}) - self.assertNotIn(b"DO_NOT_PRINT_THIS_VALUE", GATE.canonical(report)) + self.assertNotIn(MARKER.encode(), GATE.canonical(report)) def test_current_and_delta_private_path_fail_closed(self): (self.repo / "private").mkdir() @@ -151,7 +162,7 @@ def test_present_non_ancestor_baseline_is_accepted(self): def test_pr_base_current_findings_are_inherited(self): self.git("checkout", "-b", "main") - (self.repo / "leak.txt").write_text("sk_" + "live_BASE_EXAMPLE\n") + (self.repo / "leak.txt").write_text(fake_stripe("BASE") + "\n") self.commit("base branch fixture") self.git("update-ref", "refs/remotes/origin/main", "main") self.git("checkout", "-b", "feature") @@ -257,12 +268,12 @@ def _rebaseline_current_tree(self): def test_edit_baselined_secret_path_still_passes(self): """Content churn on a path already known at baseline must not fail the gate.""" (self.repo / "docs").mkdir(exist_ok=True) - (self.repo / "docs/readme.md").write_text("token = sk_" + "live_BASELINE_EXAMPLE\n") + (self.repo / "docs/readme.md").write_text("token = " + fake_stripe("BASELINE") + "\n") self.commit("baseline secret example") self._rebaseline_current_tree() # Edit same file (new blob) while keeping a matching pattern. (self.repo / "docs/readme.md").write_text( - "# note\ntoken = sk_" + "live_BASELINE_EXAMPLE\nmore\n" + "# note\ntoken = " + fake_stripe("BASELINE") + "\nmore\n" ) self.commit("docs edit keeping secret-like example") report = GATE.gate(self.repo, self.policy()) @@ -271,7 +282,7 @@ def test_edit_baselined_secret_path_still_passes(self): def test_remove_baselined_secret_passes(self): """Removing a baselined secret-like example must not fail via delta pickaxe.""" (self.repo / "docs").mkdir(exist_ok=True) - (self.repo / "docs/readme.md").write_text("token = sk_" + "live_BASELINE_EXAMPLE\n") + (self.repo / "docs/readme.md").write_text("token = " + fake_stripe("BASELINE") + "\n") self.commit("baseline secret example") self._rebaseline_current_tree() (self.repo / "docs/readme.md").write_text("token = \n") @@ -279,6 +290,136 @@ def test_remove_baselined_secret_passes(self): report = GATE.gate(self.repo, self.policy()) self.assertEqual(report["findings"], []) + def test_every_credential_shape_fails_current_and_delta(self): + for name, text in POSITIVE_FIXTURES.items(): + (self.repo / f"{name}.txt").write_text(text) + self.commit("credential fixtures") + findings = GATE.gate(self.repo, self.policy())["findings"] + for name in POSITIVE_FIXTURES: + scanners = {item["scanner"] for item in findings if item["path"] == f"{name}.txt"} + self.assertEqual(scanners, {"current-secret", "delta-secret"}, name) + self.assertNotIn(MARKER.encode(), GATE.canonical(findings)) + + def test_false_positive_classes_pass_gate_and_full_audit(self): + for name, text in NEGATIVE_FIXTURES.items(): + (self.repo / f"{name}.txt").write_text(text) + self.commit("detectors, tests and warning docs") + self.assertEqual(GATE.gate(self.repo, self.policy())["findings"], []) + secrets = [item for item in GATE.full_audit(self.repo, self.policy())["findings"] if item["rule"] == "SEC001"] + self.assertEqual(secrets, []) + + def test_full_audit_reports_introduction_not_removal(self): + (self.repo / "leak.txt").write_text(fake_stripe("INTRO") + "\n") + self.commit("introduce") + introduced = self.git("rev-parse", "HEAD").strip() + (self.repo / "leak.txt").write_text("token = \n") + self.commit("remove") + secrets = [item for item in GATE.full_audit(self.repo, self.policy())["findings"] if item["rule"] == "SEC001"] + self.assertEqual([(item["path"], item["object"]) for item in secrets], [("leak.txt", introduced)]) + + def test_reviewed_blob_exemption_is_bound_to_exact_content(self): + key = BEGIN.format("") + "\n" + B64 + "\n" + END + "\n" + (self.repo / "fixtures").mkdir() + (self.repo / "fixtures/loopback-key.pem").write_text(key) + self.commit("reviewed self-signed fixture") + blob = self.git("rev-parse", "HEAD:fixtures/loopback-key.pem").strip() + policy = self.policy() + self.assertEqual({item["path"] for item in GATE.current_tree_scan(self.repo, policy)}, {"fixtures/loopback-key.pem"}) + policy["secret_rule"] = dict(policy["secret_rule"], reviewed_blobs=[{"blob": blob, "reason": "self-signed loopback test key"}]) + self.assertEqual(GATE.current_tree_scan(self.repo, policy), []) + self.assertEqual([item for item in GATE.full_audit(self.repo, policy)["findings"] if item["rule"] == "SEC001"], []) + # Any edit is a new blob: the exemption no longer applies. The BEGIN line + # is untouched, so the pickaxe candidate count does not change; the + # current-tree scan is the stage that re-reports it. + (self.repo / "fixtures/loopback-key.pem").write_text(key + B64 + "\n") + self.commit("edit reviewed fixture") + self.assertEqual({item["path"] for item in GATE.current_tree_scan(self.repo, policy)}, {"fixtures/loopback-key.pem"}) + + def test_secret_rule_contract_is_strict(self): + for mutate in ( + lambda rule: rule.pop("credential_patterns"), + lambda rule: rule.update(credential_patterns=[]), + lambda rule: rule["credential_patterns"].append({"id": "broken", "regex": "("}), + lambda rule: rule["credential_patterns"].append({"id": "named", "regex": "(?Px)"}), + lambda rule: rule["password_policy"].update(min_length=0), + lambda rule: rule["password_policy"]["dev_default_passwords"].append("UPPER"), + lambda rule: rule.update(extra="field"), + lambda rule: rule.update(synthetic_run_length=3), + lambda rule: rule.update(reviewed_blobs=[{"blob": "not-a-blob-id", "reason": "x"}]), + lambda rule: rule.update(reviewed_blobs=[{"blob": "a" * 40, "reason": " "}]), + ): + value = json.loads(self.policy_path.read_text()) + mutate(value["secret_rule"]) + self.policy_path.write_bytes(GATE.canonical(value)) + with self.assertRaises(GATE.GateError): + GATE.load_policy(self.policy_path) + + +def _fixture_values(): + alnum36 = "A1b2C3d4" * 4 + "E5f6" + b64 = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC" + "x7Kp" * 3 + "Ab" + begin = "-----BEGIN " + "{}PRIVATE KEY-----" + end = "-----END " + "PRIVATE KEY-----" + scheme = "postgres" + "://" + return alnum36, b64, begin, end, scheme + + +ALNUM36, B64, BEGIN, END, PG = _fixture_values() + +POSITIVE_FIXTURES = { + "github-classic": "token = " + "gh" + "p_" + ALNUM36 + "\n", + "github-oauth": "gh" + "o_" + ALNUM36 + "\n", + "github-server": "gh" + "s_" + ALNUM36 + "\n", + "github-user": "gh" + "u_" + ALNUM36 + "\n", + "github-refresh": "gh" + "r_" + ALNUM36 + "\n", + "github-fine-grained": "github" + "_pat_" + "11AQ7XK2M0" + "Zr5Tq8Wn3Lp4" + "_" + "Zx9" * 20 + "\n", + "aws-access-key": "aws_access_key_id = " + "AK" + "IA" + "Z7QW3RTY5UIOP2LK" + "\n", + "aws-session-key": "AS" + "IA" + "Q4WE8RTY2UIO6PLK" + "\n", + "stripe-secret": "STRIPE_KEY=" + fake_stripe(MARKER) + "\n", + "stripe-restricted": "rk" + "_live_" + "Q1w2E3r4T5y6U7i8O9p0A1s2D3f4" + "\n", + "pem-pkcs8": BEGIN.format("") + "\n" + B64 + "\n" + B64 + "\n" + END + "\n", + "pem-rsa-encrypted": BEGIN.format("RSA ") + "\nProc-Type: 4,ENCRYPTED\nDEK-Info: AES-128-CBC,0A1B2C3D\n\n" + B64 + "\n", + "pem-openssh-indented": "key: |\n " + BEGIN.format("OPENSSH ") + "\n b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAAB\n", + "pem-json-escaped": '{"key": "' + BEGIN.format("EC ") + "\\n" + B64 + "\\n" + END + '"}\n', + "db-postgres": "DATABASE_URL=" + PG + "app:Zq8vN2kLm4Rt@db.prod.internal:5432/app\n", + "db-postgresql-driver": "postgresql" + "+psycopg2://svc:Hk3mP9qL2wXv@10.0.0.5/db\n", + "db-mysql": "my" + "sql://root:7dF4gH2jK9lQ@mysql.internal:3306/app\n", +} + +NEGATIVE_FIXTURES = { + "detector-prefixes": "PREFIXES = ['" + "gh" + "p_', '" + "gh" + "o_', '" + "github" + "_pat_', '" + "AK" + "IA', '" + "sk" + "_live_']\n", + "detector-short-values": "assert redact('" + "gh" + "p_abc') and redact('" + "AK" + "IA1234') and redact('" + "sk" + "_live_abc')\n", + "warning-doc": "Never commit " + "sk" + "_live_" + " keys. Use test keys in CI; " + "gh" + "p_" + " tokens belong in secrets.\n", + "aws-documentation-example": "aws_access_key_id = " + "AK" + "IA" + "IOSFODNN7" + "EXAMPLE\n", + "pem-detector": 'if line.startswith("' + BEGIN.format("RSA ") + '"):\n return True\n', + "pem-doc": "A key starts with `" + BEGIN.format("") + "` and ends with `" + END + "`.\n", + "pem-placeholder": BEGIN.format("") + "\n\n" + END + "\n", + "pem-bare-suffix": "matches 'PRIVATE " + "KEY-----' markers\n", + "db-env-placeholder": "url: " + PG + "leanctx_ent:${LEANCTX_DB_PASSWORD}@db:5432/app\n", + "db-format-placeholder": 'f"' + PG + '{role}:{password}@127.0.0.1:{port}/db"\n', + "db-angle-placeholder": PG + "leanctx_engine:@db:5432/app\n", + "db-bracket-placeholder": PG + "app:[REDACTED]@db:5432/app\n", + "db-masked": PG + "app:********@db:5432/app\n", + "db-short-literal": PG + "leanctx:leanctx@localhost:5432/leanctx\n" + PG + "u:p@db.example.com:5432\n", + "db-dev-default": PG + "leanctx:leanctx-dev@localhost:5432/leanctx\n", + "synthetic-sequence-token": 'classify("key = ' + "gh" + "p_" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "0123456789" + '")\n', + "synthetic-sequence-aws": "AK" + "IA" + "ABCDEFGHIJKLMNOP" + "\n", +} + + +class CredentialPatternTests(unittest.TestCase): + def test_positive_fixtures_match_precise_and_candidate_stage(self): + # The ERE is interval-free; only its POSIX class needs a Python spelling. + self.assertNotRegex(REPO_SECRET_RULE["pickaxe_regex"], r"\{\d") + candidate = GATE.re.compile(REPO_SECRET_RULE["pickaxe_regex"].replace("[:space:]", r"\s")) + for name, text in POSITIVE_FIXTURES.items(): + self.assertGreaterEqual(GATE.credential_count(text, REPO_SECRET_RULE), 1, name) + self.assertTrue(candidate.search(text), name) + + def test_negative_fixtures_never_match(self): + for name, text in NEGATIVE_FIXTURES.items(): + self.assertEqual(GATE.credential_count(text, REPO_SECRET_RULE), 0, name) + if __name__ == "__main__": unittest.main()