Initial Commit

This commit is contained in:
2026-05-27 23:29:53 +01:00
commit fbc70f96e6
10000 changed files with 1102152 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
## ADDED Requirements
### Requirement: 7z adapter exposes 7z entries as DriveStorage
The package SHALL export `SevenZipArchiveStorage` implementing the structural `DriveStorage` view. Entry paths inside the archive MUST appear as drive paths with directory separators normalised to `/`.
#### Scenario: Drive lists 7z entries
- **WHEN** a 7z archive containing two entries is wrapped and `drive.list()` is called
- **THEN** both entry paths are returned
### Requirement: LZMA, LZMA2, and BCJ filter support
The adapter SHALL support LZMA and LZMA2 compression codecs and the BCJ, BCJ2, Delta, and ARM/X86/SPARC preprocessor filters as composed in 7z `Folder` records. Unsupported codec IDs MUST raise `SEVENZ_UNSUPPORTED_CODEC`. Unsupported filter chains MUST raise `SEVENZ_BCJ_FILTER_UNSUPPORTED`.
#### Scenario: LZMA2 + BCJ executable decodes
- **WHEN** a 7z archive whose folder chain is LZMA2 → BCJ over an executable entry is read
- **THEN** the decoded bytes match the original executable
#### Scenario: Unknown codec errors clearly
- **WHEN** an archive references a codec ID not implemented by the adapter
- **THEN** the read throws `SEVENZ_UNSUPPORTED_CODEC` with the codec ID in details
### Requirement: Multi-volume support
The adapter SHALL support multi-volume 7z archives using `.7z.001`, `.7z.002`, …, `.7z.NNN` naming. Sibling discovery MUST use the `resolveSibling` callback from `drive-storage-archive-core`. The adapter MUST concatenate volumes in ascending index order before parsing the trailing header.
#### Scenario: Three-volume 7z assembles
- **WHEN** the primary `archive.7z.001` is opened with a `resolveSibling` returning `archive.7z.002` and `archive.7z.003`
- **THEN** all entries are listed and read
#### Scenario: Out-of-order volume rejected
- **WHEN** `resolveSibling` returns volume 1 at index 2 (i.e. mis-ordered)
- **THEN** the adapter throws `ARCHIVE_SPLIT_MISSING_VOLUME` with both expected and received indices
### Requirement: Header encryption and per-entry encryption
The adapter SHALL support reading 7z archives with encrypted headers (`7zAES` over the `EncodedHeader` block) and per-entry-encrypted content. The password hook from `drive-storage-archive-core` MUST be invoked lazily on first decryption need.
#### Scenario: Encrypted-header archive opens
- **WHEN** a 7z archive with encrypted headers is opened with a correct-password hook
- **THEN** entry listing and reading succeed
### Requirement: Read-write with copy-on-write or rewrite
The adapter SHALL support `read-only`, `copy-on-write`, and `rewrite` modes. Writes MUST produce a standards-compliant 7z file readable by reference 7-Zip implementations. Mutations re-encode the affected folder(s) and rewrite the trailing header.
#### Scenario: Round-trip write then read
- **WHEN** an adapter in `copy-on-write` mode writes `inside/n.txt`, flushes, then a new adapter is opened over the flushed bytes
- **THEN** `inside/n.txt` is listed and reads with the original content
### Requirement: Error code registry
The package SHALL register stable codes including `SEVENZ_HEADER_INVALID`, `SEVENZ_UNSUPPORTED_CODEC`, `SEVENZ_BCJ_FILTER_UNSUPPORTED`, `SEVENZ_CRC_MISMATCH`, `SEVENZ_CORRUPT`.
#### Scenario: Bad signature errors
- **WHEN** the host bytes do not begin with `7z\xBC\xAF\x27\x1C`
- **THEN** open throws `SEVENZ_HEADER_INVALID`