Ashish 06 17 26#560
Merged
Merged
Conversation
Use the empty main area — That's a lot of wasted space. You could show a welcome/quick-start panel there with shortcuts like "Open Project", "New Project", recent projects list, or a brief project summary when one is loaded. 2. Make the window resizable — It's currently set to setResizable(false). Resizable windows are generally better UX, especially if you add content to the main area. 3. Add the version number to the title or status bar (e.g. v10.8.4) — helpful for support/debugging.
Replaces the simple welcome panel with a 4-step workflow guide: Project → Data → Process → Review. Steps update dynamically based on project state (green checkmark for complete, blue for current, gray for future). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Separate the combined Inventory/Stage/Process step into distinct Inventory and Stage steps, each wired to its own action. Update getCurrentStep() to detect progress via the inventory file and staging dir in addition to inputs and results. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Hook refreshStepper() into each stage's completion point so the stepper circles advance live: synchronously after inventoryProject(), and from the setDone() callbacks of StagingProgressUI and ProcessProgressUI. Stepper clicks were already wired to their actions. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Commit 11aebb0 accidentally duplicated the --convert-to/inputFile argument, producing a malformed soffice command that hangs LibreOffice for the full process timeout. Restore the single known-good conversion command. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A shared default LibreOffice profile (from a GUI instance, the startup system check, or a concurrent/prior run) causes headless --convert-to to hang on the profile lock. Give each invocation its own -env:UserInstallation profile under the per-file temp dir, so conversions never collide — verified converting an HTML file to PDF. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Saved web pages (e.g. a forum archive with 121 external references) made soffice's headless HTML->PDF import fetch remote images, CSS, and dead ad/tracking servers, hanging for the full process timeout. Before rendering HTML, strip every external reference with jsoup: remove script/link/base/iframe/object/embed tags, drop remote src/href/background/poster/srcset attributes, and neutralize remote url(...) in inline and embedded CSS. The renderer then never makes outbound network calls -- required for forensic soundness (no phoning home / tracking pixels) and it eliminates the hang. Verified end-to-end: the forum page that previously hung now sanitizes to zero fetchable remote references and soffice converts it to PDF in seconds. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Process.destroy() only signals the parent. Wrapper launchers like the soffice script spawn a child (soffice.bin) that was left orphaned and still running after a timeout, accumulating stuck processes. On timeout, forcibly destroy the captured descendant handles and the parent, then reap. Verified: a wrapper that spawns child workers leaves zero survivors after the timeout kill. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The final stepper step now calls openReviewUI() (the "Go to review" action that opens the review web UI), matching user expectation, instead of openOutputFolder() which only opened the output files. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The review web app is the freeeedui webapp (context /freeeedui), but the default Review endpoint was http://localhost:8080/ — Tomcat's root splash page, not the review app. Point the default (and the settings-UI example) at http://localhost:8080/freeeedui. Also enable Tomcat startup in start_dev_services.sh so the review web app actually runs alongside Solr and Tika in development. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Implements phase 1 of #549 (registration + feedback button): - Soft-required registration dialog on launch (Name/Company/Email). Re-prompts each launch until the user registers or clicks "Don't ask again". Never hard-blocks startup. This is identification, not licensing - the open-source core stays free and unlocks nothing. - Help > "Send Feedback / Request Support" dialog. - Both use the user's own email client via mailto: (UtilUI.openMailClient), so nothing is transmitted until the user presses Send. No case data or document content is ever included. - Settings keys + accessors for user identity and registration status; Version/OS auto-appended to messages. Support address: mark@scaia.ai. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replaces the soft, skippable registration prompt with a required free activation gate that blocks the app until the user activates. The goal is unchanged - stay in touch with users - but a hard gate ensures we actually reach everyone, while keeping registration free for all editions. Flow: - On launch, the user enters Name / Company / Email and an optional "Tell us a few words about your project", then clicks "Request Activation Key" (opens their mail client to mark@scaia.ai via mailto:). - We reply with their free per-user key; they paste it and click Activate. - The key is verified entirely offline (HMAC-SHA256 of the normalized email) so no backend is needed. Closing the dialog quits the app. Details: - Activation: offline key engine + a main() that generates a key for an email (used when replying to users). - UserRegistrationDialog: reworked into the modal activation gate, with the optional project field persisted and included in the registration email. - Settings/ParameterProcessing: user-project and user-activation-key storage; isActivated() re-validates the stored key against the stored email. - FreeEedUI: gate runs before the main UI; quitting exits. The key costs nothing and unlocks the same software for everyone - it only guarantees an email handshake. Issue #549 updated to reflect this direction. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
SUPPORT_EMAIL now lists mike@sicuroanalytics.com and mark@scaia.ai, so the mailto: opens with both owners in the To field for every registration request and feedback message. This is the vendor inbox only - each user still registers with their own email, which remains their identity for any paid add-ons. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Convenience wrapper around org.freeeed.services.Activation for replying to registration emails: ./genkey.sh <email> [<email> ...] prints each user's free activation key. Auto-locates the compiled classes or the runnable jar. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The previous symmetric HMAC scheme shipped its secret in the open-source repo, so anyone could mint keys. Switch to Ed25519: the app now embeds only the PUBLIC key and verifies a key offline; it can no longer create one. The private signing key and the generator live solely in the private AI Advisor repo (scripts/freeeed_activation.py) and never ship here. - Activation: verify-only via java.security Ed25519 (JDK 17 runtime; generic JCA API so it still compiles at source level 11). Removed the secret, the HMAC minting, and main(). - Removed genkey.sh from the open-source repo (its capability moved to AI Advisor). Keys are now Ed25519 signatures over the normalized email (URL-safe base64), pasted by the user. Keys remain free and unlock nothing - they only prove an email handshake. Existing keys are reissued under the new keypair. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Completes the previous commit (which only removed genkey.sh): replace the symmetric HMAC + embedded secret with offline Ed25519 verification using only the public key. The app can verify an activation key but can no longer mint one; the private signing key lives solely in the AI Advisor repo. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
docs/strategy/FreeEed-2027-Vision.md: the 2027 vision - data understanding as the product, expanding from eDiscovery into investigations, government/FOIA disclosure, and AI data readiness, with human-in-the-loop AI and the open / transparent / affordable / practical product principles. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The "Inventory inputs" step walked every input directory regardless of the Active checkbox, so the Staged inventory counted files from unselected custodians (e.g. 129 files when only one of three custodians was active). - FreeEedMain.runInventoryInput: skip directories whose Active flag is not "y" (this is the bug behind the reported symptom). - ActionStaging: the stage-in-place branch also ignored Active - fixed; and the file-count used for the progress total now respects Active too. - ProjectUI.collectProjectInputs: clear the cached catalog when inputs or the Active selection change, so a stale inventory can't show unselected data. Verified: with one of three custodians active, the catalog now reports that custodian's files only (6) instead of all (129). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Abstracted, court-ready ESI production specification for #551: Bates numbering, single-page Group IV TIFF, multipage text, native handling, .DAT/.OPT load files, Exhibit A/B metadata field tables, family/dedup/redaction rules, and volume/delivery layout. Written in FreeEed's own terms, referencing a public GPO-authenticated court order rather than embedding the case PDF. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The README daily-build links were version-pinned (e.g. ...-10.8.4-SNAPSHOT.zip), so they had to be edited on every bump and drifted between branches. Switch them to stable 'latest' URLs, and have release_freeeed_complete.sh also publish each daily artifact under a 'latest' alias: freeeed_complete_pack-latest.zip, FreeEed-latest-Windows.exe, FreeEed-latest-Linux.run (+ macOS dmg). README links now never need updating. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Build unencrypted zips and drop the ZIP_PASS requirement. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Frame the portable offline Viewer as an embodiment of the vision; AI Case Chat runs on a local model with no outbound calls (forensic soundness). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Added free tier data limitation.