LexiWorld Juniorfor solo & small firms
🌍
Pricing Sign in EN FR
← Home

Privacy: what Junior holds, and how to erase it

Not reviewed by counsel.

This page was written from Junior's own source code, not from a template, and it has NOT been reviewed by a lawyer for Junior. It describes what the software does. It is not a certification of compliance with Quebec's Law 25, the GDPR, or any other regime, and nothing here is legal advice.

The short version

Every store on this deployment

This list is not typed by hand. Junior parses its own source for every SQLite database any part of it can open, and every one found has to be classified below before this page will render at all β€” there is no way for a store to be simply absent. There are 44 of them: 6 are deleted when you delete a matter, 32 are kept and each one says why, and 6 hold nothing about a person and say what they hold instead. Several of the kept ones have no delete control inside Junior at all, and those rows say so in the same words.

β€œDocument content” is the column that matters most: nearly all of these hold no part of your client's papers, and the ones that can are named. β€œClass” is the promise: what happens to this store when you use the delete control.

StoreClassWhat it holds about you Document contentWhat happens to it
Matters, filed reviews and the deadline register
matters.db
ERASABLE The matter's title, client name, jurisdiction and parties; for each analysis filed to it, the findings including every passage the analysis quoted out of your document, verbatim; for each dated obligation, up to 500 characters copied from the clause; and the activity log, including recorded gaps. verbatim passages from your document Delete the matter β€” from its page, or from this one.
Reviewer invitations and the access audit
sharing.db
ERASABLE Who you invited to read a matter, when the link was opened and how often, when it was withdrawn and why, and any comment a reviewer left. The invitation link itself is never stored β€” only a hash of it. no document content As the person who INVITED: withdraw an invitation at any time from the matter page, and deleting the matter deletes the invitations AND their audit trail with it. As the person who was invited: these rows belong to the lawyer whose matter it is, and you cannot delete them here.
Watched citations and their alerts
citation_watch.db
ERASABLE Authorities you asked Junior to keep an eye on, the matter they came from, a short context line, and any alert raised against them. no document content Stop watching an authority from the Watch page. Deleting a matter deletes everything watched for it.
Time entries
timekeeping.db
ERASABLE One row per piece of work Junior saw you do: the matter, a description, the date, and the minutes YOU entered. The description of a research entry contains the first 120 characters of the question you asked. the opening of a question you typed Deleting a matter deletes the time entries filed against it, including ones you have discarded from your timesheet. Export first if you need them. An entry attached to NO matter has no delete control today β€” those are the ones logged before you filed the work anywhere.
Precedent bank
precedents.db
ERASABLE Wording you chose to save, as you saved it, plus a count of the client-identifying items the scan flagged in it. text you saved deliberately Delete any precedent from the Precedents page.
Personal playbooks
playbooks.db
ERASABLE Your own process: a title, a note, and an ordered list of steps. A declined suggestion is recorded as a sequence of step names, with no matter and no matter text. no document content Delete any playbook, or any step, from its page.
Follow-up threads on a paid case
case_threads.db
RETAINED Your email, what the case was for, a label for the document, how many follow-ups you have used, and a SHA-256 fingerprint of the document text. The text itself is never written here. a hash only β€” never the text Kept. A thread is the receipt for follow-up questions you have already paid for; deleting it would revoke what you bought. It holds a hash, not your document.
Payments and checkouts
payments.db
RETAINED What you were asked to pay and what was confirmed: amount, currency, product, our reference and the provider's, and whether it has been spent. No card details reach Junior. no document content Kept. This is the financial record of a sale β€” the evidence behind an invoice, a refund and a tax return β€” and it is also the only proof of what you are entitled to.
Usage and the free first case
plans.db
RETAINED One row per case you ran, whether it was billed, and the amount; plus a single row recording that you have claimed the free first case. no document content Kept. The charges are a financial record. The free-case claim is deliberately not erasable: deleting it would hand back a free case every time, which turns the erasure control into a way of taking the product for nothing.
Practitioner attestation
practitioner_attestation.db
RETAINED Each time you declared that you are a qualified practitioner: the role, bar or order, licence number and jurisdiction you gave, the exact wording you agreed to, and the IP address and browser that sent it. no document content Kept, and append-only. It is a professional declaration about who you said you were when the product was unlocked. There is NO control inside Junior to withdraw it today: the function exists in the store and no page calls it, so a withdrawal has to be asked for directly. Withdrawing would in any case append a row rather than delete one β€” an attestation is evidence of what you declared at the time.
Daily brief delivery
brief_sends.db
RETAINED One row per day a brief was emailed to you: the date and how many items it carried. Not the contents. no document content Kept. It is the record that stops the same brief being sent to you twice in one day.
Email sign-in codes
local_auth.db
RETAINED A HASH of each sign-in code sent to your address, when it expires and whether it was used, plus one timestamp per failed attempt. The code itself is never stored. no document content Kept. It is the rate limit that stops someone else guessing their way into your mailbox-based sign-in.
Per-call record of every analysis you ran
usage_governor.db
RETAINED One row EVERY TIME Junior sends anything to the model on your behalf: your email, which product, which model, how many tokens went in and out, what it cost, the HTTP status, a fixed label naming which part of the code made the call, and when. Plus one row holding your plan tier and this month's running spend. no document content Kept, and this is the one that most deserves an explanation. It is not an analytics table: `usage_log` IS the spend ledger. usage_governor._current_month_spend() sums this month's rows to decide whether your next call is inside your budget, so deleting them would reset your monthly spend to zero and hand back paid budget on demand β€” the same objection as the free-case claim above. It is also the cost evidence behind what you were charged. What it records is that a call happened, what it cost, and a fixed label for the code that made it β€” never what you asked or what came back. There is no column for either, and no caller passes any part of your question into the one free-text field there is. Nothing sweeps it on a schedule.
Prepaid credit, top-ups and auto-recharge
usage_meter.db
RETAINED Credit and token balances held against your address, when they expire, and your auto-recharge settings including the payment-method reference held at the provider. no document content Kept. It is a balance you paid for; deleting it would destroy the record of credit you are owed.
Bug reports and feedback you sent
feedback.db
RETAINED Anything you typed into the feedback widget, the page you were on, your email, your browser string, any JavaScript errors the page had collected, and the path of any screenshot or attachment you sent. possibly, inside free text nobody scoped Kept, and there is no delete control for it inside Junior. A report is the record of a defect and of who can be told it is fixed.
It also leaves this container. This database is COPIED OUT of the container. feedback_aggregate.py runs `docker cp` against it to build Manera's internal review queue, so a report you sent also exists on Manera's own machine, and deleting the copy here would not reach that one.
Platform incident log, one file per service
_anomalies.db
RETAINED On this deployment the file is lexiworld_anomalies.db β€” the name is built from the service id at runtime, which is why no line of source spells it. One row per fault the platform raised β€” a failed payment lookup, an unreachable billing gate, a rejected agreement. The `detail` field is free text written by whichever check fired, and several of those checks put the URL they were calling into it, which can contain your email address. possibly, inside free text nobody scoped Kept. It is the operational record of things going wrong, and there is no delete control for it in Junior.
It also leaves this container. Incidents do not stay here. mesh_sentinel.broadcast_anomaly posts the same `detail` text over HTTP to the other Manera services in the mesh β€” Dr. Manera and Bidit among them β€” so an incident that named your address has been sent to them as well.
Backup copy of the incident log
backup_all_mesh_anomalies.db
RETAINED Whatever the incident log above held when the copy was taken. possibly, inside free text nobody scoped Kept. A copy is exactly the thing a delete control does not reach, which is why it is named here instead.
Behavioural sensor on the LexiWorld workspace
user_sensations.db
RETAINED Page views, clicks, rage clicks, scroll depth and how long you stayed, recorded against a session identifier and a hash of the signed-in address, with the path of the page. It is first-party β€” nothing is sent to an analytics company β€” and it is injected into the /workspace pages, not Junior's. no document content Kept. There is no delete control for it inside Junior.
Terms you accepted or refused
agreements.db
RETAINED Which document you accepted, its exact version and hash, when, from which IP address and browser, your locale and the country the request came from β€” and the same again for a refusal, with the reason. no document content Kept, for the same reason as the practitioner attestation: it is evidence of what you agreed to and when. Deleting it would delete the proof that consent was ever asked for.
Waiting list for products not yet open
waitlist.db
RETAINED The address you left, which product, when, your IP address, your browser string, the page that referred you and any note. no document content Kept. There is no unsubscribe control wired to this store inside Junior; ask and it will be removed by hand.
Cross-product assistant memory
personal_assistants.db
RETAINED An assistant per product per address, the messages exchanged with it, facts it has recorded ABOUT YOU with a confidence score and which product supplied them, and the briefings it generated. possibly, inside free text nobody scoped Kept. There is no delete control for it inside Junior. This one is worth a second look if you use more than one Manera product: it is the store designed to carry what one of them learned into another.
Log of mail sent to you
mail_log.db
RETAINED For each message Junior sent: from, to, the subject line, which service sent it, whether it was delivered and the error if it was not. Not the body. no document content Kept. It is the record of whether a sign-in code or a brief actually reached you, which is the first thing anyone needs when it did not.
LexiWorld workspace store (reference law, and more)
lexiworld.db
RETAINED Mostly reference material β€” jurisdictions, statutes, cases, employment rules. It ALSO carries `contracts`, whose `content_text` column holds a document's FULL TEXT when the workspace half of the site saves one, an `audit_trail` keyed to the acting address, and batch and subscription rows keyed to a customer. Junior's own per-case flow does not write here; the /workspace pages on the same domain do. the full text of a document, if you used the workspace upload Kept. There is no delete control for it inside Junior.
API keys for the machine-callable products
api_keys.db
RETAINED An address, a LABEL you chose, and the SHA-256 HASH of an API key β€” never the key itself, which exists in plaintext only once, at the moment it is issued. Also when the key was created, when it was last used, and whether it was revoked. no document content Kept, and the honest reason is that a key is a credential, not a record about you: revoking it is the control that matters, and revocation is immediate. Only the hash is stored, so what remains after revocation cannot be used to call anything.
Onboarding progress
onboarding.db
RETAINED Which step of a product's setup you reached, whether you finished or skipped it, and the answers you gave. no document content Kept. There is no delete control for it inside Junior.
Support tickets
support_tickets.db
RETAINED A ticket's subject and body, your address, who it was assigned to, every message on it and its audit trail. possibly, inside free text nobody scoped Kept. A support history is the record of what was asked for and what was promised.
Satisfaction survey answers
nps_responses.db
RETAINED Your score, the reason you typed, a follow-up address if you left one, what triggered the survey, and your IP. no document content Kept. There is no delete control for it inside Junior.
Guided-signup sessions
concierge.db
RETAINED A signup session keyed to your address: what was found out about your firm, the answers you gave, the workspace it created, and any colleagues you invited. no document content Kept. There is no delete control for it inside Junior.
Queued automated email
email_queue.db
RETAINED Messages waiting to be sent to you: your address, which template, the values that will be filled into it, and how many attempts have been made. no document content Kept. There is no delete control for it inside Junior.
Queued email for another Manera product
manera_trading.db
RETAINED The same queue shape as above, belonging to a different Manera product. Junior names the file because email_automation reads trial state from it; Junior does not write your rows into it. no document content Kept by whichever Manera product owns it, under the retention rules of that product. Junior has no control over this file and does not claim one.
Daily model-cost ledger
cost_ledger.db
RETAINED Per-call cost with a `customer` field, used to stop the fleet spending past a daily budget. no document content Kept, for the same reason as the spend ledger above: it is the brake, and a brake you can erase is not one.
Manera billing database, read but not written by Junior
billing.db
RETAINED Your subscription and entitlement records, held by Manera's billing service. Junior READS it to work out which plan you are on and writes nothing to it. no document content Kept by the billing service. A subscription record is a financial record.
Inter-service event bus
event_bus.db
RETAINED Events one Manera service publishes for another, each with a free-text JSON payload. What is in a payload depends on the event, and some of them carry an address. possibly, inside free text nobody scoped Kept. There is no delete control for it inside Junior.
Signals sent to and from other Manera services
mesh_signals.db
RETAINED What was sent where, and the free-text payload that went with it. Same caveat as the event bus. possibly, inside free text nobody scoped Kept. There is no delete control for it inside Junior.
Which alert was already sent to which address
intel_alerts.db
RETAINED A recipient address against the item it was alerted about, so the same alert is not sent twice. no document content Kept. Deleting it would start the duplicate alerts again.
Self-healing event log
healing_log.db
RETAINED Faults the platform noticed and what it did about them, with a free-text `details` field written by whichever check fired. possibly, inside free text nobody scoped Kept. There is no delete control for it inside Junior.
Self-healing pattern memory
healing_memory.db
RETAINED Error signatures the platform has seen before and the action that fixed them. possibly, inside free text nobody scoped Kept. There is no delete control for it inside Junior.
Timestamped copies of a store
*.db.bak-*
RETAINED Whatever the store held at the moment the copy was taken. This deployment has one: a copy of the LexiWorld workspace store. possibly, inside free text nobody scoped Kept until somebody removes it by hand. This is the honest limit of every erasure claim on this page: deleting a row deletes the row, not a copy of the file it was in.
Revenue/cost circuit-breaker state
circuit_breaker_state.db
NOT PERSONAL Whether the fleet's spending brake is tripped, when it tripped and the ratios that tripped it.
Why this is not personal data: Two tables, and every column is a mode, a timestamp or a money total for the whole business. There is no per-person column and no free-text field a request could reach.
no document content
Disk-space alerter state
disk_alerter_state.db
NOT PERSONAL One row per mount point: how full it was, when it last alerted.
Why this is not personal data: Three columns β€” a mount name, a level and a timestamp. Nothing about a person can be written into any of them.
no document content
Process-health alerter state
pm2_health_state.db
NOT PERSONAL Restart counts per process, and alert fingerprints.
Why this is not personal data: A process name, restart counters and timestamps. The fingerprint is a hash of an alert about a process.
no document content
Alert de-duplication
mesh_alerter_dedupe.db
NOT PERSONAL A fingerprint per alert already emailed, and when.
Why this is not personal data: One table: a hash and a timestamp. The alert TEXT is not stored here β€” only a fingerprint of it β€” so there is nothing to read back.
no document content
Signal state (what the fleet is currently told to do)
mesh_signal_state.db
NOT PERSONAL The active operating instruction β€” pause, throttle β€” with its reason and expiry.
Why this is not personal data: A kind, an action, a reason string written by the fleet about itself, and an expiry. Nothing in the write path can put a user's data into it.
no document content
Ingested public news
news.db
NOT PERSONAL Public articles: source, title, by-line, summary, full text.
Why this is not personal data: Published material, fetched from public feeds. The `author` column is a journalist's by-line on an article that was already public β€” it is not anything about YOU, and no user input reaches this store.
no document content

What you can erase

Signed in, at your data, you can see what is held about you and delete any matter. Deleting a matter removes, in the same action:

The rows are deleted, not flagged. There is no hidden β€œdeleted” column anywhere in these stores. Each delete counts the rows again after removing them and fails loudly rather than reporting a deletion that did not happen β€” and if any store cannot be reached at all, the erasure refuses and deletes nothing, rather than deleting the matter and stranding the rows that pointed at it.

What is kept even when you delete a matter

Named, with the reason. This list is generated from the same classification as the table above, so a store cannot be kept without appearing here.

Stores that hold nothing about a person

Listed anyway, with the justification. A store left off a privacy page because somebody assumed it was harmless is indistinguishable from one left off because nobody looked.

What leaves this container

Two of the stores above are copied to another Manera service by name, by code inside this application. Feedback you send is copied out to Manera's own machine so somebody can read it, and a platform incident β€” whose text can contain your email address, because some checks put the address or the URL they were calling into it β€” is broadcast over HTTP to the other Manera services. Neither is a sale and neither goes to an advertiser; both mean a copy exists that no control on this page reaches. Separately, and it is not a property of any one row below, EVERY database in this container is copied off this machine every night β€” that is the section after this one.

What leaves this machine, every night

Every database in this container is copied off this machine, every night at 03:00 UTC.

Not two of them β€” all of them, including the matters store with the passages quoted out of your client's document. The whole data volume is archived, encrypted with a passphrase held on the host, and uploaded to Backblaze B2, a third-party storage provider. The archives are kept 14 days on the machine and 30 days at Backblaze B2, then deleted. Which means: a matter you delete today is gone from this application immediately and from every query it answers β€” and a copy of it goes on existing in those archives for up to 30 days afterwards. Nothing on this page reaches them.

This one is not derived. Every other number on this page is read out of the code that applies it; this backup runs in host cron, outside this container, and Junior can neither see it nor perform it nor delete anything out of it. It is an operational statement about how this deployment is run, checked by hand against the host on 7 August 2026, and the four commands that re-check it are written into privacy.py beside these numbers. If the schedule changes and nobody edits that file, this paragraph goes stale and no test in this product can tell you.

How long things are kept

Every period below is read from the code that applies it. The second column is the one worth reading: nothing in Junior deletes anything on a schedule. Some of these numbers are genuinely enforced β€” an expired invitation really does stop working β€” but enforcing a limit and deleting a row are different things, and the column says which one this is.

WhatPeriodDeleted on a schedule? Notes
Follow-up thread on a paid case 30 days
case_threads.THREAD_DAYS
No After this the thread stops answering: every lookup requires expires_at in the future. The ROW is not deleted, and nothing deletes it later. It holds a fingerprint, not your document.
A reviewer's access to one matter 14 days by default, 90 at most
sharing.DEFAULT_EXPIRY_DAYS / MAX_EXPIRY_DAYS
No Enforced on every read of a shared matter, and you can withdraw it sooner. The invitation ROW and its audit survive expiry so that 'who saw this file' stays answerable β€” both go when you delete the matter.
Expired invitation rows 365 days
sharing.cleanup(older_than_days=…)
No NOTHING CALLS THIS. No scheduled job runs it, so this number describes what the function would do if it were ever invoked β€” it is not a period anything performs. Delete the matter to remove these rows now.
Used and expired sign-in codes 7 days
local_auth.cleanup(older_than_days=…)
No NOTHING CALLS THIS either. The stored value is a hash of the code and it stops working at its expiry, but the row stays.
How far ahead the daily brief looks 30 days
brief_mail.WINDOW_DAYS
No A reading window, not a retention period β€” it changes what the email contains, and deletes nothing.
How much of a clause a deadline stores the first 500 characters of each quotation
matters.DEADLINE_SNIPPET_CHARS
No A limit on how much is written, not on how long it is kept. It is kept until you delete the matter.
Everything else, which is every store on this page: Matters, filed reviews and the deadline register, Reviewer invitations and the access audit, Watched citations and their alerts, Time entries, Precedent bank, Personal playbooks, Follow-up threads on a paid case, Payments and checkouts, Usage and the free first case, Practitioner attestation, Daily brief delivery, Email sign-in codes, Per-call record of every analysis you ran, Prepaid credit, top-ups and auto-recharge, Bug reports and feedback you sent, Platform incident log, one file per service, Backup copy of the incident log, Behavioural sensor on the LexiWorld workspace, Terms you accepted or refused, Waiting list for products not yet open, Cross-product assistant memory, Log of mail sent to you, LexiWorld workspace store (reference law, and more), API keys for the machine-callable products, Onboarding progress, Support tickets, Satisfaction survey answers, Guided-signup sessions, Queued automated email, Queued email for another Manera product, Daily model-cost ledger, Manera billing database, read but not written by Junior, Inter-service event bus, Signals sent to and from other Manera services, Which alert was already sent to which address, Self-healing event log, Self-healing pattern memory, Timestamped copies of a store no time limit
no constant, no scheduled job
No Nothing in Junior expires or deletes any of these on a schedule. They are kept until you delete them β€” which you can do for everything marked erasable on this page β€” or, for the records Junior must keep, indefinitely. Several of the kept stores have no delete control inside Junior at all. Junior does not promise you a retention period it has not built.

Copies that have already left

Anything you have already downloaded stays where you put it. The closing memo PDF is generated when you ask for it and is never stored by Junior β€” but the copy on your computer, and any copy you emailed, is outside Junior's reach and deleting a matter here does not touch it. The same is true of a timesheet you exported to CSV, and of the daily brief that was delivered to your mailbox.

Who else sees a document

What this page does not claim

This register lists dated obligations Junior found in documents you filed. It is NOT a docketing or limitation-period system, it does not know about documents you have not filed here, and it does not calculate limitation periods. Keep your own docket. Every entry quotes the clause it came from β€” check the quote.