Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ on:
push:
tags:
- "v*"
- "!v*-runtime-green"

permissions:
contents: read
Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,9 @@ desktop.ini
tools/siegfried/windows-x86_64/sf.exe
tools/siegfried/windows-x86_64/default.sig
tools/siegfried/windows-x86_64/tool-manifest.json
/target-alpha6-cli-crash/
/target-alpha6-cli-delta/

/target-alpha6-cli-soak/

/target-alpha6-cli-watch-v3/
67 changes: 8 additions & 59 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,65 +2,14 @@

All notable changes to MailVault Collection Profiler are documented here.

The project follows Semantic Versioning once the public API reaches a stable release. Alpha builds
may change local profiler schemas and command contracts through explicit migrations.

## 0.1.0-alpha.4 — 2026-07-21

- Added exact format identification with pinned Siegfried `1.11.6` and PRONOM `v124`.
- Added versioned PUID assertions, all-match retention, bounded batches, resume checkpoints and format UI/CLI.
- Added verified sidecar acquisition, Tauri resource bundling and third-party notices.
- Added migration `0006_exact_format_identification.sql`.
- Updated English/Persian documentation and sanitized release screenshots.
- Fixed Windows JSON probing and real-batch execution by resolving the verified signature through
`-home` and passing only `default.sig`, avoiding Siegfried 1.11.6's unescaped header path.
- Added Windows regression coverage for the sidecar command contract.


### Added

- Existing workspace inspection, compatibility reporting and explicit open modes.
- Workspace schema 5 with metadata, append-only review events and review projections.
- Pre-migration SQLite backup and retained migration-failure marker.
- Run catalog and completed-run reopening after a full process restart.
- Single review writer with read-only fallback when another process holds the workspace lock.
- Finding review statuses, required-note policy and append-only SHA-256 event chains.
- Review history integrity validation and write-disable fallback after detected tampering.
- Findings categories for requires-attention, informational evidence, reviewed and all findings.
- Sanitized JSON summary and CSV finding exports using non-reversible short tokens.
- CLI commands for workspace inspection, run listing, finding review and sanitized export.
- Desktop start journey for profiling a new archive or opening an existing workspace.
- Integration tests for reopen persistence, lock contention, review history and sanitized exports.

### Changed

- Public application version advanced to `0.1.0-alpha.4`; WiX/MSI version maps to `0.1.0.4`.
- Informational filename/content relationships are separated from warnings requiring attention.
- Quality, CI and release commands use locked Cargo resolution and validate alpha.3 release notes.

### Fixed during release hardening

- Centralized signed-to-unsigned SQLite count conversion for explorer, review and workspace queries.
- Split review-event persistence into transactional preparation, insert and projection helpers.
- Replaced manual guarded division with checked review-completion arithmetic.
- Replaced the oversized CLI dispatcher with command-specific handlers.
- Split workspace inspection/opening into focused compatibility, access and integrity helpers.
- Replaced the flat eight-argument Tauri findings command with a typed request object.
- Kept the desktop findings request contract synchronized with the nested Tauri payload.
- Made the documentation screenshot gate recurse through versioned screenshot directories and require the public alpha.3 images explicitly.

### Validation

- Passed the complete Windows quality gate, including strict Clippy, 36 Rust tests, TypeScript, Vite, native desktop compilation and npm audit with 0 vulnerabilities.
- Completed the full private exact-format run with 13,684/13,684 objects, 13,636 identified, 46 unknown, 0 ambiguous, 0 tool errors, 51 extension mismatches and 64 distinct PUIDs.
- Verified schema 5-to-6 workspace migration, complete byte coverage and unchanged canonical MailVault SHA-256.

### Security and privacy

- Review data stays outside MailVault and original runtime evidence.
- Review notes are excluded from application logs and sanitized exports.
- Existing profiler databases are never created implicitly during reopen.
- Workspace/source overlap is checked after canonicalization.
## 0.1.0-alpha.6 — 2026-07-28

- Unified initial, incremental and rebuild profiling into one crash-resumable pipeline.
- Added full consistent metadata reconciliation on every source revision while reusing successful SHA-256 file-stat and exact-format results.
- Added automatic Siegfried/PRONOM identification before a physical run can succeed.
- Added retryable unavailable/tool-error states, stable collection identity aliases and bounded snapshot retention.
- Added Windows gates for initial/no-change, real delta, force-kill resume, 100-cycle soak and independent rebuild equivalence.
- Workspace schema advanced to 7; public application version is `0.1.0-alpha.6` and MSI version is `0.1.0.6`.

## 0.1.0-alpha.2 — 2026-07-19

Expand Down
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ authors:
- name: FireXCore
repository-code: https://github.com/FireXCore/mailvault-collection-profiler
url: https://github.com/FireXCore/mailvault-collection-profiler
version: 0.1.0-alpha.4
version: 0.1.0-alpha.6
date-released: 2026-07-19
license: Apache-2.0
abstract: >-
Expand Down
14 changes: 7 additions & 7 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ members = [
resolver = "3"

[workspace.package]
version = "0.1.0-alpha.4"
version = "0.1.0-alpha.6"
edition = "2024"
rust-version = "1.97.1"
authors = ["FireXCore"]
Expand Down
96 changes: 61 additions & 35 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@

</div>

> **Development pre-release:** `0.1.0-alpha.4` adds exact format identification as a versioned,
> resumable profiler stage. Windows release builds bundle a pinned Siegfried `1.11.6` sidecar and
> PRONOM `v124` signature database. The source archive remains read-only. Installers are unsigned.
> **Final feature pre-release:** `0.1.0-alpha.6` combines continuous incremental profiling,
> same-run crash recovery and automatic exact-format identification. Windows builds bundle pinned
> Siegfried `1.11.6` and PRONOM `v124`. MailVault remains read-only and installers are unsigned.

## What the product does

Expand All @@ -28,11 +28,11 @@ index over that evidence:
```text
MailVault archive (read-only)
→ consistent SQLite snapshot
physical content inventory
exact SHA-256 identity and occurrence history
bounded file-stat verification
exact format identification with PUID evidence
searchable desktop and CLI views
full metadata reconciliation from an immutable snapshot
cumulative SHA-256 identity and occurrence history
selective file-stat verification and retry
automatic exact-format identification with PUID evidence
durable incremental generations and searchable desktop/CLI views
```

The profiler does not download mail, mutate MailVault, execute attachments, perform OCR, expand
Expand All @@ -55,10 +55,10 @@ sample-only data:
| Physical inventory findings | 1,484 |
| Physical inventory warnings / errors | 2 / 0 |

Alpha 3 validated the physical inventory on Windows. Alpha 4 preserves that baseline, adds schema
migration `0006`, and completed a private full-scale exact-format run: 13,684/13,684 objects,
13,636 identified, 46 unknown, 0 ambiguous and 0 tool errors. The canonical MailVault database
SHA-256 remained unchanged.
Alpha 4 completed the Windows quality gate and exact-format run on all 13,684 real objects. Alpha 6
adds schema migration `0007`, continuous generations, update-aware metadata reconciliation, selective
content reuse, same-run recovery and bounded snapshot retention. Publication still requires the Alpha 6
real-runtime acceptance matrix to pass on Windows.

## Implemented capabilities

Expand All @@ -73,7 +73,7 @@ SHA-256 remained unchanged.
- Cursor-paginated inventory, content-object detail and append-only finding review.
- Sanitized summary and finding export without local paths, filenames, addresses or review notes.

### Exact format identification — Alpha 4
### Exact format identification

- One identification job per unique content object, never per duplicate occurrence.
- Pinned Siegfried `1.11.6` executable and PRONOM `v124` signature database.
Expand Down Expand Up @@ -115,23 +115,47 @@ See [Exact format identification](docs/FORMAT_IDENTIFICATION.md),

```text
E:\MailVault-E
E:\MailVault-Profiler-Alpha4
E:\MailVault-Profiler-Evidence-Alpha4
E:\MailVault-Profiler-Alpha6
E:\MailVault-Profiler-Evidence-Alpha6
```

Full instructions: [Windows installation](docs/INSTALLATION_WINDOWS.md).

## CLI workflow

Run the complete initial or incremental pipeline:

```powershell
.\target\release\mailvault-profiler.exe profile `
--archive "E:\MailVault-E" `
--workspace "E:\MailVault-Profiler-Alpha6" `
--siegfried ".\tools\siegfried\windows-x86_64\sf.exe" `
--signature ".\tools\siegfried\windows-x86_64\default.sig" `
--retain-successful-snapshots 2
```

Keep the same workspace current after future MailVault syncs:

```powershell
.\target\release\mailvault-profiler.exe profile `
--archive "E:\MailVault-E" `
--workspace "E:\MailVault-Profiler-Alpha6" `
--watch `
--poll-seconds 300
```

The standalone `formats` commands remain diagnostic tools. The normal `profile` command now runs exact
format identification automatically before the generation can succeed.

Create or reopen the physical inventory first:

```powershell
.\target\release\mailvault-profiler.exe workspace inspect `
--workspace "E:\MailVault-Profiler-Alpha4" `
--workspace "E:\MailVault-Profiler-Alpha6" `
--json

.\target\release\mailvault-profiler.exe runs list `
--workspace "E:\MailVault-Profiler-Alpha4" `
--workspace "E:\MailVault-Profiler-Alpha6" `
--json
```

Expand All @@ -148,7 +172,7 @@ Run exact identification against a completed physical baseline:

```powershell
.\target\release\mailvault-profiler.exe formats identify `
--workspace "E:\MailVault-Profiler-Alpha4" `
--workspace "E:\MailVault-Profiler-Alpha6" `
--run "<physical-profile-run-id>" `
--siegfried ".\tools\siegfried\windows-x86_64\sf.exe" `
--signature ".\tools\siegfried\windows-x86_64\default.sig" `
Expand All @@ -165,12 +189,12 @@ Inspect aggregate and object-level results:

```powershell
.\target\release\mailvault-profiler.exe formats summary `
--workspace "E:\MailVault-Profiler-Alpha4" `
--workspace "E:\MailVault-Profiler-Alpha6" `
--run "<physical-profile-run-id>" `
--json

.\target\release\mailvault-profiler.exe formats list `
--workspace "E:\MailVault-Profiler-Alpha4" `
--workspace "E:\MailVault-Profiler-Alpha6" `
--run "<physical-profile-run-id>" `
--state ambiguous `
--json
Expand All @@ -190,7 +214,7 @@ Requirements:
```powershell
npm ci
.\scripts\install-siegfried.ps1
.\scripts\quality.ps1
.\scripts\quality-alpha6.ps1
npm run tauri:desktop:bundle
```

Expand All @@ -199,22 +223,24 @@ The installer build embeds the verified sidecar resources. Generated `sf.exe`, `

## Validation status

The following checks were completed in the supplied build environment:
The trusted Alpha 4 predecessor passed 36 Rust tests, strict Clippy, TypeScript, Vite, native Tauri and
the full private exact-format run. Alpha 6 static package gates validate version alignment,
documentation/privacy, JSON/TOML and SQLite schema migration.

- TypeScript type-check and Vite production build: passed.
- Tree-sitter parse of all Rust source files: passed.
- Alpha 3 real profiler database migration from schema 5 to 6: passed.
- SQLite `quick_check` and `foreign_key_check` after migration: passed.
- Real baseline counts preserved: 13,684 objects, 22,068 occurrences, 1,484 findings.
- Source Alpha 3 profiler database SHA-256 unchanged after migration test.
- Synthetic exact-format projection against the migrated schema: passed.
Before publishing Alpha 6, run:

A Rust toolchain was not available in the current isolated build environment, so local semantic
`cargo check`, Clippy, unit tests, Tauri compilation and a real Siegfried run were not claimed.
GitHub Windows CI and the release workflow are configured to install the pinned sidecar and run the
full Rust/desktop gates before producing installers.
```powershell
.\scripts\quality-alpha6.ps1 -BuildInstallers
.\scripts\validate-alpha6-real.ps1 ...
.\scripts\validate-alpha6-delta.ps1 ...
.\scripts\validate-alpha6-crash.ps1 ...
.\scripts\validate-alpha6-soak.ps1 -Cycles 100 ...
.\scripts\validate-alpha6-rebuild-equivalence.ps1 ...
```

See [Alpha 4 validation evidence](docs/VALIDATION_0.1.0-alpha.4.md).
See [Alpha 6 validation contract](docs/VALIDATION_0.1.0-alpha.6.md),
[continuous profiling](docs/CONTINUOUS_PROFILING.md) and
[real acceptance runbook](docs/ALPHA6_REAL_ACCEPTANCE_FA.md).

## Documentation

Expand All @@ -231,7 +257,7 @@ See [Alpha 4 validation evidence](docs/VALIDATION_0.1.0-alpha.4.md).
- [Privacy](docs/PRIVACY.md)
- [Real archive baseline](docs/REAL_ARCHIVE_BASELINE.md)
- [Release process](docs/RELEASE_PROCESS.md)
- [Alpha 4 release notes](docs/releases/v0.1.0-alpha.4.md)
- [Alpha 6 release notes](docs/releases/v0.1.0-alpha.6.md)

## Scope intentionally deferred

Expand Down
Loading