97 lines
3.7 KiB
Markdown
97 lines
3.7 KiB
Markdown
---
|
|
gsd_state_version: 1.0
|
|
milestone: v1.0
|
|
milestone_name: Directory Support
|
|
status: unknown
|
|
last_updated: "2026-02-26T21:07:08.371Z"
|
|
progress:
|
|
total_phases: 10
|
|
completed_phases: 10
|
|
total_plans: 15
|
|
completed_plans: 15
|
|
---
|
|
|
|
# Project State
|
|
|
|
## Project Reference
|
|
|
|
See: .planning/PROJECT.md (updated 2026-02-25)
|
|
|
|
**Core value:** Archive impossible to unpack without knowing the format -- standard tools (7z, tar, unzip, binwalk) cannot recognize or extract contents
|
|
**Current focus:** Phase 12 COMPLETE -- All key input methods functional
|
|
|
|
## Current Position
|
|
|
|
Phase: 12 of 12 (User Key Input) -- COMPLETE
|
|
Plan: 2 of 2 -- COMPLETE
|
|
Status: Phase 12 complete, all three key input methods (--key, --key-file, --password) functional
|
|
Last activity: 2026-02-26 -- Phase 12 Plan 02 executed (Argon2id KDF + salt format)
|
|
|
|
Progress: [####################] 100% (15/15 plans complete)
|
|
|
|
## Performance Metrics
|
|
|
|
**Velocity:**
|
|
- Total plans completed: 15
|
|
- Average duration: 3.7 min
|
|
- Total execution time: 0.9 hours
|
|
|
|
| Phase | Plan | Duration | Tasks | Files |
|
|
|-------|------|----------|-------|-------|
|
|
| 07-01 | Format Spec Update | 8 min | 2 | 1 |
|
|
| 08-01 | Rust Directory Archiver | 6 min | 3 | 4 |
|
|
| 09-01 | Kotlin Decoder Update | 2 min | 2 | 2 |
|
|
| 12-01 | CLI Key Input | 5 min | 2 | 8 |
|
|
| 12-02 | Argon2id KDF + Salt | 5 min | 2 | 6 |
|
|
|
|
## Accumulated Context
|
|
|
|
### Decisions
|
|
|
|
Decisions are logged in PROJECT.md Key Decisions table.
|
|
Recent decisions affecting current work:
|
|
|
|
- v1.0: IV stored only in TOC, not duplicated in data blocks
|
|
- v1.0: Manual binary serialization with to_le_bytes/from_le_bytes (no serde/bincode)
|
|
- v1.0: Filename-only entry names -- v1.1 changes this to relative paths with `/` separator
|
|
- v1.0: Always enable all 3 obfuscation features (no flags)
|
|
- v1.0: Two-pass TOC serialization for correct data_offsets with encrypted TOC size
|
|
- v1.1: No backward compatibility with v1.0 archives (format version bump)
|
|
- v1.1: Only mode bits (no uid/gid, no timestamps, no symlinks)
|
|
- v1.1: entry_type and permissions fields placed AFTER name, BEFORE original_size in TOC entry
|
|
- v1.1: Directory entries use zero-filled crypto fields (uniform entry structure)
|
|
- v1.1: Entry size formula: 104 + name_length (was 101)
|
|
- v1.1: DFS preorder with sorted children for deterministic parent-before-child ordering
|
|
- v1.1: Extracted crypto pipeline into process_file() helper for reuse
|
|
- v1.1: Directory entries skip data_offset computation (offset=0, no ciphertext)
|
|
- v1.1: Permissions stored as lower 12 bits of mode_t (0o7777 mask)
|
|
- v1.1: Kotlin decoder uses Java File API owner/everyone permission model (no group-level granularity)
|
|
- v1.1: Directory entries in Kotlin decoder skip crypto pipeline entirely, use mkdirs()
|
|
- v1.1: Permission application order: everyone flags first, then owner-only overrides
|
|
- v1.2: KeyArgs as top-level clap flatten (--key before subcommand)
|
|
- v1.2: inspect accepts optional key: without key shows header only, with key shows full TOC
|
|
- v1.2: LEGACY_KEY kept as #[cfg(test)] for golden test vectors
|
|
- v1.2: All archive functions parameterized by explicit key (no global state)
|
|
- v1.2: Two-phase key resolution: resolve_key_for_pack() generates salt, resolve_key_for_unpack() reads salt from archive
|
|
- v1.2: Salt stored as 16 plaintext bytes between header and TOC, signaled by flags bit 4 (0x10)
|
|
- v1.2: Argon2id with default parameters for password-based key derivation
|
|
- v1.2: Pack prompts password twice (confirmation), unpack prompts once
|
|
|
|
### Pending Todos
|
|
|
|
None yet.
|
|
|
|
### Roadmap Evolution
|
|
|
|
- Phase 12 added: User-specified encryption key (--password, --key, --key-file)
|
|
|
|
### Blockers/Concerns
|
|
|
|
None.
|
|
|
|
## Session Continuity
|
|
|
|
Last session: 2026-02-26
|
|
Stopped at: Completed 12-02-PLAN.md -- Phase 12 complete, all key input methods functional
|
|
Resume file: None
|