TavernKeeper Scan Report

N0819/Sonder_Engine

Commit 0c3f779 Reviewed

No material or immediate-danger concern was identified in this review.

This advisory report describes what the named tools and review process found at one exact commit. Unknown or unobserved behavior may still exist.

0 immediate danger 0 material 8 low

What this review found

No material or immediate-danger item was identified.

Deterministic technical evidence (3)
  • zizmor reported artipacked · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/ci.yml:77

  • zizmor reported artipacked · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/ci.yml:38

  • zizmor reported artipacked · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/ci.yml:115

Contextual expected matches (4)

JavaScript analysis reported javascript.xray.obfuscated-code

Expected behavior · high confidence

The scanner flagged this settings file for obfuscation, but the code is plain, readable JavaScript that builds the settings menus for the app. There is nothing hidden or disguised here.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.obfuscated-code. The match applies to this repository.

Contextual assessment: The supplied source is readable, well-commented JavaScript implementing UI modals for the Sonder Engine settings interface. It constructs DOM elements via an el() helper, makes GET/PUT calls to local API endpoints (/api/chats/{id}/...), and handles JSON serialization of world, attire, style guide, dialogue, and charter configuration. There is no minification, encoding, eval, string obfuscation, or concealed execution. The scanner's low-confidence obfuscated-code signal at line 1 is a false positive triggered by normal JavaScript patterns; no obfuscation or suspicious behavior is present in the actual data flow.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
Rule
javascript.xray.obfuscated-code
File role
production
Source
static/js/settings.js:1

Gitleaks reported generic-api-key

Expected behavior · high confidence

The scanner flagged the word 'key' in this code, but here 'key' is just a loop variable identifying a character in the game engine, not a password or API key. No credentials are present.

Technical evidence

Scanner reason: Gitleaks matched secret-detection rule generic-api-key. The match applies to this repository.

Contextual assessment: Line 307 contains 'judgments, key, subjects=company - {key}, cap=4),' which is a Python function call inside scene_ledger(). The variable 'key' iterates over character body identifiers in the charter game-state dictionary. It is not a credential, API key, or secret. Gitleaks matched the generic-api-key pattern on the word 'key' appearing as a parameter name, but the actual data flow involves game simulation state (social judgments for characters present in a scene). No secret values are assigned, hardcoded, or exposed.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
gitleaks 8.30.1
Rule
generic-api-key
File role
production
Source
world/charter_log.py:307

Gitleaks reported generic-api-key

Expected behavior · high confidence

The scanner again flagged the word 'key', but this is the same character-identifier loop variable used in the game engine, not a credential. No secrets are present.

Technical evidence

Scanner reason: Gitleaks matched secret-detection rule generic-api-key. The match applies to this repository.

Contextual assessment: Line 309 contains 'commitments, key, parties=company - {key}, cap=4),' another Python function call in scene_ledger() using the same 'key' loop variable that iterates over character body identifiers. The data being passed is game-state commitment information filtered by party membership. There is no credential assignment, hardcoded secret, or sensitive value. The gitleaks generic-api-key match is a false positive triggered by the parameter name 'key' rather than an actual secret value.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
gitleaks 8.30.1
Rule
generic-api-key
File role
production
Source
world/charter_log.py:309

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

The scanner flagged a regular expression as potentially unsafe, but the expression is simple and bounded. It only matches a fixed list of tag names and an optional color name made of letters. There is no risk of it causing performance problems or any other security issue.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex. The match applies to this repository.

Contextual assessment: The flagged regex matches a fixed alternation of literal tag names (i, em, b, strong, u, s, mark, sup, sub, code, font) with an optional quoted color attribute restricted to lowercase letters. There are no nested quantifiers, ambiguous alternations, or backtracking-prone constructs that could cause catastrophic performance. The pattern is used via matchAll on prose text to identify a closed allowlist of emphasis tags, which is proportional to the project's stated purpose of rendering inline emphasis from model output without exposing innerHTML. No unsafe regex behavior is demonstrated.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
static/js/chat.js:234

Related contextual observations

Emphasis-tag allowlist regex is bounded and safe

low risk · high confidence

The regular expression the scanner flagged is straightforward and cannot cause the performance problems the scanner was checking for. It is used to recognize a small, fixed set of formatting tags in story text.

Technical assessment

The regex at line 234 uses a finite alternation of literal strings for tag names and a single character class with a plus quantifier for the optional color attribute. This structure cannot produce exponential backtracking on any input. The surrounding code confirms it is applied only to prose text to extract a closed set of emphasis tags, and all resulting DOM nodes are created via createElement and createTextNode, never innerHTML.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Coverage and limitations

JavaScript coverage

Unresolved JavaScript stages

Tools

Limitations

Technical scan identity