Skip to content

fix: make sit work (probs)#11

Merged
dbwg2009 merged 2 commits into
dbwg2009:developmentfrom
Syme-6005:main
May 12, 2026
Merged

fix: make sit work (probs)#11
dbwg2009 merged 2 commits into
dbwg2009:developmentfrom
Syme-6005:main

Conversation

@Syme-6005
Copy link
Copy Markdown
Collaborator

@Syme-6005 Syme-6005 commented May 12, 2026

What

-fixed data undeleted when logged out
-fixed 502 gateway error via auth flow correction
-save history() defined
-truncated code line extended corrcetly

Why

no work otherwise

Related to #9

Changes

main.py
cipher.html

Summary by CodeRabbit

Release Notes

  • New Features
    • Complete redesign of SecureVault interface with tabbed navigation (Vault, Messages, History)
    • Vault management: create, edit, view, and delete encrypted items
    • Messages functionality with conversation threading
    • Operation history tracking
    • Integrated cipher tool for encrypt/decrypt operations
    • Enhanced authentication system with login/logout flows
    • Toast notifications for user feedback

Review Change Stack

Syme-6005 added 2 commits May 11, 2026 21:22
-fixed data undeleted when logged out
-fixed 502 gateway error via auth flow correction
-save history() defined
-truncated code line extended corrcetly
@Syme-6005 Syme-6005 requested a review from dbwg2009 as a code owner May 12, 2026 20:41
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 12, 2026

📝 Walkthrough

Walkthrough

This PR replaces the FastAPI backend server in backend/main.py with a complete standalone HTML/CSS/JavaScript single-page application, and expands cipher.html from a basic cipher UI into a full "ASCII Cipher Vault" web client. Both implementations deliver the same encrypted vault, messaging, and history features using client-side cryptography primitives, API integration, and browser-based session management.

Changes

SecureVault Web Application

Layer / File(s) Summary
UI Presentation and Structure
backend/main.py (1–633), cipher.html (6, 47–707)
HTML document structure with inline CSS defines layout, auth overlay, sidebar navigation, panels (cipher/vault/messages/history), modals, and responsive styling for the complete SecureVault application.
Client-Side Cryptography Core
backend/main.py (634–770), cipher.html (709–1134, partial)
PBKDF2-derived key generation, SHA-256 keystream XOR encryption, HMAC-SHA256 authentication tags, and token format salt:ciphertext:tag for encrypting/decrypting vault labels, payloads, messages, and history previews.
Authentication and API Infrastructure
backend/main.py (771–933), cipher.html (709–1134, partial)
Client-side auth hash derivation, CSRF token handling, fetch wrapper (api()), session state (currentUser), login/register/logout flows, and initial /api/auth/me check on page load.
Vault Feature
backend/main.py (943–1087), cipher.html (1135–1241)
Load encrypted vault items, decrypt labels locally with masterPass, render filtered lists, and implement CRUD modals (create, edit, view, delete) with local validation and API integration.
History and Messaging Features
backend/main.py (1091–1259)
History panel loads and decrypts encrypted preview ciphertexts; messaging panel loads conversation threads, looks up recipients, renders message lists, sends encrypted messages, and handles Enter-to-submit keyboard events.
UI Routing and Initialization
backend/main.py (1261–1334)
Panel switching (switchPanel()) controls Vault/Messages/History/Cipher visibility, cipher tool UI for inline encrypt/decrypt, and page initialization with event handlers for auth and default mode setup.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • dbwg2009/XorCrypt#10: Both PRs add authentication, vault UI, vault CRUD operations, and client-side crypto/API functions to cipher.html (e.g., doAuth, switchPanel, vault functions, encryptText/decryptToken).

Suggested labels

bug

Suggested reviewers

  • dbwg2009

Poem

🐰 A vault emerges from the digital night,
Passwords encoded in a crypto light,
From Python walls to browser shields so bright,
Client-side secrets encrypted tight,
XOR keychains dance with HMAC delight! ✨

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Description check ⚠️ Warning PR description lacks required template sections and contains vague, grammatically unclear statements that do not align with the substantial codebase changes shown in raw_summary. Rewrite description following the template: add clear 'What' statement, link issue properly, detail each file change with specific function/feature modifications, and list testing methods performed.
Title check ❓ Inconclusive The title is vague and does not clearly convey the main changes; 'make sit work' is informal and does not meaningfully describe the fixes for logout data handling, auth flow, or history function definition. Revise the title to be specific and clear, such as 'Fix: clear user data on logout and correct auth flow to resolve 502 error' or similar that reflects the key changes.
✅ Passed checks (3 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


Comment @coderabbitai help to get the list of available commands and usage tips.

@dbwg2009 dbwg2009 changed the base branch from main to development May 12, 2026 20:43
@codacy-production
Copy link
Copy Markdown

Not up to standards ⛔

🔴 Issues 1 critical · 1 high

Alerts:
⚠ 2 issues (≤ 0 issues of at least minor severity)

Results:
2 new issues

Category Results
ErrorProne 1 high
Security 1 critical

View in Codacy

🟢 Metrics -199 complexity · 0 duplication

Metric Results
Complexity -199
Duplication 0

View in Codacy

AI Reviewer: first review requested successfully. AI can make mistakes. Always validate suggestions.

Run reviewer

TIP This summary will be updated as you push new changes.

@dbwg2009 dbwg2009 merged commit 9859d9c into dbwg2009:development May 12, 2026
6 of 12 checks passed
@dbwg2009
Copy link
Copy Markdown
Owner

@Syme-6005 Merged to Dev for testing

Copy link
Copy Markdown

@codacy-production codacy-production Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

The PR is currently not up to standards. The primary blocker is that backend/main.py has been completely overwritten with frontend HTML/JavaScript, which will cause the server to fail to start due to syntax errors. Additionally, several core requirements from the redesign remain unaddressed: session cleanup on logout is not implemented, and the authentication preflight request for salt retrieval is missing. There are also critical security concerns regarding the use of custom cryptographic constructions and an encryption logic error that prevents recipients from decrypting messages.

About this PR

  • This PR contains critical regressions. The backend implementation has been deleted in favor of frontend code being placed in .py files. Furthermore, despite the PR objective to fix truncated lines, several files still contain incomplete code segments that will cause execution failures.

Test suggestions

  • Verify that doLogout() clears vault-list, thread-list, and history-list innerHTML.
  • Verify that the login flow performs a POST to /api/auth/preflight before hashing the password.
  • Verify that encrypt/decrypt operations successfully call saveHistory().
  • Verify that the Python backend remains functional after the changes to main.py.
Prompt proposal for missing tests
Consider implementing these tests if applicable:
1. Verify that doLogout() clears vault-list, thread-list, and history-list innerHTML.
2. Verify that the login flow performs a POST to /api/auth/preflight before hashing the password.
3. Verify that encrypt/decrypt operations successfully call saveHistory().
4. Verify that the Python backend remains functional after the changes to main.py.

TIP Improve review quality by adding custom instructions
TIP How was this review? Give us feedback

Comment thread cipher.html
const pinned = document.getElementById("vault-pinned-input").checked;
if(!label) { toast("Label required","error"); return; }
if(!payload) { toast("Payload required","error"); return; }
if(!masterPass) { toast("No master passphrase — re-login
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 HIGH RISK

This line is truncated and will result in a JavaScript syntax error due to missing closing quotes and parentheses. This contradicts the PR's claim of fixing truncated code.

Comment thread backend/main.py

try {
// Encrypt the message
const ciphertext = await encryptText(text, masterPass);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 HIGH RISK

Messages are encrypted using the sender's masterPass. This prevents the recipient from ever decrypting the content. Messaging requires a shared secret or public-key system such as ECDH for key exchange.

Comment thread backend/main.py
return bytesToHex(new Uint8Array(bits));
}

async function keystream(encKey, salt, length) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 HIGH RISK

The keystream function implements a custom stream cipher by XORing data with SHA-256 blocks. Custom cryptographic constructions are prone to security vulnerabilities. Use standard authenticated encryption like AES-GCM provided by the Web Crypto API. Refactor the encryptText and decryptToken functions to use standard AES-GCM via crypto.subtle.encrypt.

Comment thread backend/main.py
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SecureVault — Encrypted Messaging & Storage</title>
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 HIGH RISK

The em-dash (—) is an invalid character in Python source files. Furthermore, the use of HTML tags in a .py file results in a SyntaxError because the Python interpreter cannot parse tags like .

See Issue in Codacy

Comment thread backend/main.py
"createdAt": user["created_at"],
"lastLoginAt": user["last_login_at"],
"iterations": PBKDF2_ITERATIONS,
<!DOCTYPE html>
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 HIGH RISK

This file has been overwritten with frontend HTML code. This is not valid Python and will prevent the backend server from running. This rewrite removes the entire FastAPI-based backend implementation.

Comment thread backend/main.py
await api("POST", "/api/messages", {
recipientId: currentPeerId,
ciphertext,
hint: text.substring(0, 50)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 MEDIUM RISK

The hint field leaks the first 50 characters of the plaintext message. This metadata significantly compromises communication privacy. Suggestion: use a generic hint or the ciphertext itself.

@dbwg2009
Copy link
Copy Markdown
Owner

@Syme-6005 no dice. logs:

cipher-vault  | Traceback (most recent call last):
cipher-vault  |   File "/usr/local/bin/uvicorn", line 8, in <module>
cipher-vault  |     sys.exit(main())
cipher-vault  |              ^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1514, in __call__
cipher-vault  |     return self.main(*args, **kwargs)
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1435, in main
cipher-vault  |     rv = self.invoke(ctx)
cipher-vault  |          ^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1298, in invoke
cipher-vault  |     return ctx.invoke(self.callback, **ctx.params)
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 853, in invoke
cipher-vault  |     return callback(*args, **kwargs)
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/main.py", line 412, in main
cipher-vault  |     run(
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/main.py", line 579, in run
cipher-vault  |     server.run()
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/server.py", line 65, in run
cipher-vault  |     return asyncio.run(self.serve(sockets=sockets))
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/asyncio/runners.py", line 195, in run
cipher-vault  |     return runner.run(main)
cipher-vault  |            ^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/asyncio/runners.py", line 118, in run
cipher-vault  |     return self._loop.run_until_complete(task)
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "uvloop/loop.pyx", line 1518, in uvloop.loop.Loop.run_until_complete
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/server.py", line 69, in serve
cipher-vault  |     await self._serve(sockets)
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/server.py", line 76, in _serve
cipher-vault  |     config.load()
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/config.py", line 434, in load
cipher-vault  |     self.loaded_app = import_from_string(self.app)
cipher-vault  |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/importer.py", line 19, in import_from_string
cipher-vault  |     module = importlib.import_module(module_str)
cipher-vault  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/importlib/__init__.py", line 90, in import_module
cipher-vault  |     return _bootstrap._gcd_import(name[level:], package, level)
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
cipher-vault  |   File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
cipher-vault  |   File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
cipher-vault  |   File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
cipher-vault  |   File "<frozen importlib._bootstrap_external>", line 995, in exec_module
cipher-vault  |   File "<frozen importlib._bootstrap_external>", line 1133, in get_code
cipher-vault  |   File "<frozen importlib._bootstrap_external>", line 1063, in source_to_code
cipher-vault  |   File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
cipher-vault  |   File "/app/backend/main.py", line 6
cipher-vault  |     <title>SecureVault — Encrypted Messaging & Storage</title>
cipher-vault  |                        ^
cipher-vault  | SyntaxError: invalid character '—' (U+2014)
cipher-vault  | Traceback (most recent call last):
cipher-vault  |   File "/usr/local/bin/uvicorn", line 8, in <module>
cipher-vault  |     sys.exit(main())
cipher-vault  |              ^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1514, in __call__
cipher-vault  |     return self.main(*args, **kwargs)
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1435, in main
cipher-vault  |     rv = self.invoke(ctx)
cipher-vault  |          ^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1298, in invoke
cipher-vault  |     return ctx.invoke(self.callback, **ctx.params)
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 853, in invoke
cipher-vault  |     return callback(*args, **kwargs)
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/main.py", line 412, in main
cipher-vault  |     run(
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/main.py", line 579, in run
cipher-vault  |     server.run()
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/server.py", line 65, in run
cipher-vault  |     return asyncio.run(self.serve(sockets=sockets))
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/asyncio/runners.py", line 195, in run
cipher-vault  |     return runner.run(main)
cipher-vault  |            ^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/asyncio/runners.py", line 118, in run
cipher-vault  |     return self._loop.run_until_complete(task)
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "uvloop/loop.pyx", line 1518, in uvloop.loop.Loop.run_until_complete
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/server.py", line 69, in serve
cipher-vault  |     await self._serve(sockets)
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/server.py", line 76, in _serve
cipher-vault  |     config.load()
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/config.py", line 434, in load
cipher-vault  |     self.loaded_app = import_from_string(self.app)
cipher-vault  |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/importer.py", line 19, in import_from_string
cipher-vault  |     module = importlib.import_module(module_str)
cipher-vault  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/importlib/__init__.py", line 90, in import_module
cipher-vault  |     return _bootstrap._gcd_import(name[level:], package, level)
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
cipher-vault  |   File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
cipher-vault  |   File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
cipher-vault  |   File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
cipher-vault  |   File "<frozen importlib._bootstrap_external>", line 995, in exec_module
cipher-vault  |   File "<frozen importlib._bootstrap_external>", line 1133, in get_code
cipher-vault  |   File "<frozen importlib._bootstrap_external>", line 1063, in source_to_code
cipher-vault  |   File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
cipher-vault  |   File "/app/backend/main.py", line 6
cipher-vault  |     <title>SecureVault — Encrypted Messaging & Storage</title>
cipher-vault  |                        ^
cipher-vault  | SyntaxError: invalid character '—' (U+2014)
cipher-vault  | Traceback (most recent call last):
cipher-vault  |   File "/usr/local/bin/uvicorn", line 8, in <module>
cipher-vault  |     sys.exit(main())
cipher-vault  |              ^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1514, in __call__
cipher-vault  |     return self.main(*args, **kwargs)
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1435, in main
cipher-vault  |     rv = self.invoke(ctx)
cipher-vault  |          ^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1298, in invoke
cipher-vault  |     return ctx.invoke(self.callback, **ctx.params)
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/click/core.py", line 853, in invoke
cipher-vault  |     return callback(*args, **kwargs)
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/main.py", line 412, in main
cipher-vault  |     run(
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/main.py", line 579, in run
cipher-vault  |     server.run()
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/server.py", line 65, in run
cipher-vault  |     return asyncio.run(self.serve(sockets=sockets))
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/asyncio/runners.py", line 195, in run
cipher-vault  |     return runner.run(main)
cipher-vault  |            ^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/asyncio/runners.py", line 118, in run
cipher-vault  |     return self._loop.run_until_complete(task)
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "uvloop/loop.pyx", line 1518, in uvloop.loop.Loop.run_until_complete
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/server.py", line 69, in serve
cipher-vault  |     await self._serve(sockets)
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/server.py", line 76, in _serve
cipher-vault  |     config.load()
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/config.py", line 434, in load
cipher-vault  |     self.loaded_app = import_from_string(self.app)
cipher-vault  |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/site-packages/uvicorn/importer.py", line 19, in import_from_string
cipher-vault  |     module = importlib.import_module(module_str)
cipher-vault  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "/usr/local/lib/python3.12/importlib/__init__.py", line 90, in import_module
cipher-vault  |     return _bootstrap._gcd_import(name[level:], package, level)
cipher-vault  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cipher-vault  |   File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
cipher-vault  |   File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
cipher-vault  |   File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
cipher-vault  |   File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
cipher-vault  |   File "<frozen importlib._bootstrap_external>", line 995, in exec_module
cipher-vault  |   File "<frozen importlib._bootstrap_external>", line 1133, in get_code
cipher-vault  |   File "<frozen importlib._bootstrap_external>", line 1063, in source_to_code
cipher-vault  |   File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
cipher-vault  |   File "/app/backend/main.py", line 6
cipher-vault  |     <title>SecureVault — Encrypted Messaging & Storage</title>
cipher-vault  |                        ^
cipher-vault  | SyntaxError: invalid character '—' (U+2014)

dbwg2009 pushed a commit that referenced this pull request May 13, 2026
* update (#10)

* fix: make sit work (probs) (#11)

* fix: restore backend/main.py and define LookupIn model for message lookup

* fix: define GroupCreateIn and GroupJoinIn models for group endpoints

* fix: update GitHub labeler rules for repo structure

* fix: remove unnecessary 'hidden' class from panel elements in cipher.html
dbwg2009 pushed a commit that referenced this pull request May 13, 2026
* update (#10)

* fix: make sit work (probs) (#11)

* fix: restore backend/main.py and define LookupIn model for message lookup

* fix: define GroupCreateIn and GroupJoinIn models for group endpoints

* fix: update GitHub labeler rules for repo structure

* fix: remove unnecessary 'hidden' class from panel elements in cipher.html
@coderabbitai coderabbitai Bot mentioned this pull request May 13, 2026
3 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants