Skip to content

Commit a542876

Browse files
committed
chore: development v0.2.111 - comprehensive testing complete [auto-commit]
1 parent 1376d0e commit a542876

File tree

12 files changed

+163
-45
lines changed

12 files changed

+163
-45
lines changed

Cargo.lock

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ exclude = [
3939
# Workspace Package Metadata (inherited by all crates)
4040
# ─────────────────────────────────────────────────────────────────────────────
4141
[workspace.package]
42-
version = "0.2.109"
42+
version = "0.2.111"
4343
edition = "2024"
4444
rust-version = "1.85"
4545
license = "MPL-2.0 OR LicenseRef-UFFS-Commercial"
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# CHANGELOG_HEALING - 2026-01-27 10:00
2+
3+
## Summary
4+
Fixed CI pipeline failures after implementing P3 forensic fields for MFT field enhancements.
5+
6+
## Context
7+
Implementing Priority 3 (P3) forensic fields from `docs/architecture/uffs-mft-field-enhancements.md`:
8+
- `is_deleted` - Deleted file records
9+
- `is_corrupt` - Corrupted records
10+
- `is_extension` - Extension records
11+
- `base_frs` - Base FRS for extension records
12+
13+
## Issues Fixed
14+
15+
### 1. Test `test_file_record_size` Failure
16+
**File:** `crates/uffs-mft/src/index.rs`
17+
**What failed:** Test expected `FileRecord` size ≤ 216 bytes, but adding `base_frs: u64` field increased it to 224 bytes.
18+
**Root cause:** The `base_frs` field (8 bytes) was added to `FileRecord` struct for P3 forensic support.
19+
**Fix:** Updated test assertion from 216 to 224 bytes to reflect the new struct size.
20+
21+
### 2. Clippy `doc_markdown` Warnings (4 occurrences)
22+
**Files:** `crates/uffs-mft/src/raw.rs`, `crates/uffs-mft/src/main.rs`
23+
**What failed:** Doc comments referenced field names like `is_deleted`, `is_corrupt`, `is_extension`, `base_frs` without backticks.
24+
**Root cause:** Clippy requires code identifiers in doc comments to be wrapped in backticks.
25+
**Fix:** Wrapped all field names in backticks in doc comments.
26+
27+
### 3. Clippy `struct_excessive_bools` Warning
28+
**File:** `crates/uffs-mft/src/parse.rs`
29+
**What failed:** `ParsedRecord` struct has more than 3 boolean fields.
30+
**Root cause:** P3 forensic fields added `is_deleted`, `is_corrupt`, `is_extension` booleans to the struct.
31+
**Fix:** Added targeted `#[allow(clippy::struct_excessive_bools)]` with justification - these are distinct semantic flags from MFT record parsing, not a state machine.
32+
33+
### 4. Clippy `cognitive_complexity` Warning
34+
**File:** `crates/uffs-mft/src/parse.rs`
35+
**What failed:** `parse_record_forensic` function exceeded complexity threshold.
36+
**Root cause:** Function handles multiple forensic parsing paths with necessary branching.
37+
**Fix:** Added targeted `#[allow(clippy::cognitive_complexity)]` - the complexity is inherent to MFT record parsing requirements.
38+
39+
### 5. Clippy `too_many_lines` Warning
40+
**File:** `crates/uffs-mft/src/index.rs`
41+
**What failed:** `to_dataframe` function exceeded line count threshold.
42+
**Root cause:** Function builds DataFrame with many columns including new forensic fields.
43+
**Fix:** Added targeted `#[allow(clippy::too_many_lines)]` - the function is a single logical unit for DataFrame construction.
44+
45+
### 6. Clippy `undocumented_unsafe_blocks` Warnings (2 occurrences)
46+
**File:** `crates/uffs-mft/src/parse.rs`
47+
**What failed:** Unsafe blocks lacked SAFETY comments.
48+
**Root cause:** Unsafe pointer operations for MFT record parsing were missing documentation.
49+
**Fix:** Added SAFETY comments explaining why each unsafe operation is sound.
50+
51+
### 7. Compilation Error - Missing `NameInfo` Fields
52+
**File:** `crates/uffs-mft/src/reader.rs`
53+
**What failed:** `NameInfo` struct initialization missing `fn_created`, `fn_modified`, `fn_accessed`, `fn_mft_changed` fields.
54+
**Root cause:** P2 added `$FILE_NAME` timestamp fields to `NameInfo` but `to_dataframe` wasn't updated.
55+
**Fix:** Added missing timestamp fields with `None` values in the struct initialization.
56+
57+
### 8. Compilation Error - Missing `StreamInfo` Field
58+
**File:** `crates/uffs-mft/src/reader.rs`
59+
**What failed:** `StreamInfo` struct initialization missing `is_resident` field.
60+
**Root cause:** P2 added `is_resident` field to `StreamInfo` but `to_dataframe` wasn't updated.
61+
**Fix:** Added `is_resident: false` to the struct initialization.
62+
63+
## Verification
64+
-`cargo check -p uffs-mft` - passed
65+
-`cargo clippy --all-targets --all-features -- -D warnings` - passed
66+
-`rust-script scripts/ci-pipeline.rs go -v` - passed (exit code 0)
67+
- ✅ All binaries built successfully (uffs, uffs_mft, uffs_tui, uffs_gui)
68+
- ✅ Cross-platform build for Windows x64 completed
69+
- ✅ Git push to remote successful
70+
71+
## Version
72+
v0.2.109
73+

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Traditional file search tools (including `os.walk`, `FindFirstFile`, etc.) work
2121

2222
**UFFS reads the MFT directly** - once - and queries it in memory using Polars DataFrames. This is like reading the entire phonebook once instead of looking up each name individually.
2323

24-
### Benchmark Results (v0.2.109)
24+
### Benchmark Results (v0.2.111)
2525

2626
| Drive Type | Records | Time | Throughput |
2727
|------------|---------|------|------------|
@@ -33,7 +33,7 @@ Traditional file search tools (including `os.walk`, `FindFirstFile`, etc.) work
3333

3434
| Comparison | Records | Time | Notes |
3535
|------------|---------|------|-------|
36-
| **UFFS v0.2.109** | **18.7 Million** | **~142 seconds** | All disks, fast mode |
36+
| **UFFS v0.2.111** | **18.7 Million** | **~142 seconds** | All disks, fast mode |
3737
| UFFS v0.1.30 | 18.7 Million | ~315 seconds | Baseline |
3838
| Everything | 19 Million | 178 seconds | All disks |
3939
| WizFile | 6.5 Million | 299 seconds | Single HDD |

0 commit comments

Comments
 (0)