From 40a6df0c77a693269e2df769bfad07d9af35635c Mon Sep 17 00:00:00 2001 From: HAKAMIQ <167469500+HAKAMIQ@users.noreply.github.com> Date: Sun, 2 Aug 2026 15:09:04 +0300 Subject: [PATCH] docs: keep only essential end-user documentation --- CHANGES.md | 96 --------- CONTRIBUTING.md | 89 -------- README.md | 147 ++++++++----- RELEASE_NOTES.md | 54 ++--- SOURCE-MANIFEST.sha256 | 260 ----------------------- SOURCE_FILES.txt | 259 ---------------------- docs/CLI.md | 223 ------------------- docs/HARDENING_IMPLEMENTATION_REPORT.md | 145 ------------- docs/NATIVE_BUILD.md | 58 ----- docs/README.md | 24 --- docs/SECURITY_HARDENING.md | 57 ----- docs/archive/CHANGELOG_FIX_NOTES.md | 167 --------------- docs/archive/R1_ARCHITECTURE_REPAIR.md | 38 ---- docs/archive/R3C_RELEASE_HARDENING.md | 43 ---- docs/archive/R3D_BENCHMARK_TRUTH.md | 86 -------- docs/archive/R3E_REAL_CORPUS_EVIDENCE.md | 93 -------- docs/archive/RELEASE_0_5_0_SCORECARD.md | 5 - docs/archive/RELEASE_SCORECARD.md | 48 ----- docs/release/RELEASE_0_6_0_GATE.md | 34 --- 19 files changed, 116 insertions(+), 1810 deletions(-) delete mode 100644 CHANGES.md delete mode 100644 CONTRIBUTING.md delete mode 100644 SOURCE-MANIFEST.sha256 delete mode 100644 SOURCE_FILES.txt delete mode 100644 docs/CLI.md delete mode 100644 docs/HARDENING_IMPLEMENTATION_REPORT.md delete mode 100644 docs/NATIVE_BUILD.md delete mode 100644 docs/README.md delete mode 100644 docs/SECURITY_HARDENING.md delete mode 100644 docs/archive/CHANGELOG_FIX_NOTES.md delete mode 100644 docs/archive/R1_ARCHITECTURE_REPAIR.md delete mode 100644 docs/archive/R3C_RELEASE_HARDENING.md delete mode 100644 docs/archive/R3D_BENCHMARK_TRUTH.md delete mode 100644 docs/archive/R3E_REAL_CORPUS_EVIDENCE.md delete mode 100644 docs/archive/RELEASE_0_5_0_SCORECARD.md delete mode 100644 docs/archive/RELEASE_SCORECARD.md delete mode 100644 docs/release/RELEASE_0_6_0_GATE.md diff --git a/CHANGES.md b/CHANGES.md deleted file mode 100644 index de1d9e4..0000000 --- a/CHANGES.md +++ /dev/null @@ -1,96 +0,0 @@ -# Changes - -## 2026-08-02 — v7 published smoke gate repair - -- Update the published CLI help smoke to the current verify contract: `csokit verify `. -- Build and stage `CsoKit.Native.dll` inside the standalone published EXE smoke directory before `native-info` and codec checks. -- Add the published EXE smoke to `Verify-Hardening.ps1` so the main merge gate covers it automatically. -- Add source guards preventing regression of the help contract, native staging, or main-gate integration. - -## Release gate filename-policy alignment - -- Move release and round-trip artifacts into isolated working directories. -- Use short fixed output names (`smoke.cso`, `out.cso`, and `back.iso`) that comply with the 2–10 Unicode text-element policy. -- Add a shared PowerShell output-name guard and enforce its presence from `Verify-Hardening.ps1`. -- Scan literal `.cso` and `.iso` names in release scripts so future policy regressions fail before build and publish. - -## 0.6.0 - -CsoKit 0.6.0 adds the Windows desktop app, improves the CLI release path, and hardens ISO/CSO verification. This release is mainly about making the tool easier to use without weakening the repair and verification rules. - -### Added - -- WPF desktop app for common ISO/CSO workflows. -- Official release gate script for local release validation. -- Raw ISO deep verification through the block-container verifier. -- CLI and Core tests for Raw ISO verification behavior. -- Arabic and English plain-text report separation. -- Better repair diagnostics for rebuild-only, corruption repair, and redump-required cases. -- 0.6.0 release gate notes under docs/release. - -### Fixed - -- Raw ISO deep verify no longer reports UnsupportedContainer when the input can be read as an ISO. -- Raw ISO verification now checks sector alignment before doing a full deep read. -- ISO diagnostics stay separate from CSO-only concepts such as headers, index tables, and sentinels. -- WPF operation names are clearer: Compress to CSO, Decompress to ISO, Verify, and Repair. -- Arabic UI status and operation labels are separated from English text. -- Output-change UI sizing was adjusted to avoid clipped labels. - -### Changed - -- Release metadata was bumped to 0.6.0 across Core, CLI, App, CMake, and native version output. -- The official release gate is portable by default. -- Real ISO smoke testing is optional instead of requiring a developer-specific game path. -- Public release validation no longer depends on a local corpus path. - -### Release gate - -Before publishing 0.6.0, the release gate must pass: - -- Release build. -- Release test run. -- Published CLI package. -- Published WPF App package. -- SHA256 manifest generation. -- Optional real ISO smoke when a local game image is available. - -That is enough for the public release. Deeper benchmark and forensic notes live under docs/archive. -## Security and architecture hardening - -- Restrict production native-library loading to the application directory; gate repository artifact probing behind `CSOKIT_NATIVE_DEV_SEARCH` and support an optional SHA-256 constraint. -- Require native ABI 2 before every native codec path. -- Propagate cancellation through deep verification, repair, CLI `Ctrl+C`, WPF Stop, and final output promotion. -- Add a centralized, bounded compression-worker policy and checked queue sizing. -- Add `CsoKit.Application`, typed operation metrics/detail lines, and a central container-reader factory. -- Split WPF operation execution and report generation out of the main ViewModel file and add WPF-facing tests. -- Build Native before tests in CI and require real native compression/decompression round trips. -- Centralize managed/native/release versioning in the root `VERSION` file. - -### Hardening review follow-up - -- Fix CLI thread-option definite assignment so Debug builds do not fail with CS0165. -- Qualify the WPF base class as `System.Windows.Application` to avoid the Application namespace collision. -- Remove the CLI project reference to Core and route compression, decompression, repair, and verification use cases through Application results and DTOs. -- Make typed operation detail records the source of rendered text and remove the legacy free-text detail parser. -- Add architecture source guards to the hardening verification gate. - -## 2026-08-02 hardening v3 correction - -- Fix WPF compilation after ViewModel/report extraction by adding explicit namespace imports and safe worker-count parsing. -- Use compressible native round-trip fixtures and separately verify fail-closed handling of native `OUTPUT_TOO_SMALL` candidates. -## 2026-08-02 output file-name length policy - -- Require user-visible output base names to contain 2 to 10 characters, excluding the extension. -- Truncate long automatically suggested names and pad one-character names without changing the extension. -- Keep collision suffixes inside the same ten-character limit, for example `Game-2.cso`. -- Apply the same validation to CLI and WPF through the Application boundary. -- Add Arabic and English validation messages and boundary tests, including Unicode text elements. - -## 2026-08-02 output-name CLI failure handling - -- Handle output-name validation failures before requiring operation DTOs in `compress`, `decompress`, and `repair`. -- Preserve structured text errors and stable `CannotWriteOutput` exit codes for one-character and eleven-character output names. -- Emit JSON failure envelopes even when early validation returns no operation data; metrics are `null` in that case. -- Keep typed DTOs mandatory for successful operations, where missing data remains an internal contract failure. -- Add dedicated text and JSON tests for the lower and upper file-name boundaries across all three commands. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index e87ec5c..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,89 +0,0 @@ -# Contributor Guide - -These notes are for contributors and maintainers. If you only want to use the tool, start with [README.md](README.md). For command-line details, see [docs/CLI.md](docs/CLI.md). - -## Ground rules - -Do not commit build output, release ZIPs, game images, local corpus files, bin or obj folders, or temporary repair output. - -Run the right gate before changing compression, repair, verification, packaging, or release logic. Quick checks are fine while iterating, but do not ship from a quick check alone. - -Do not recreate an existing release tag unless you are intentionally replacing that release. Usually, you do not want that. - -## Roundtrip gate - -Run this before touching compression. It does a full ISO to CSO to ISO cycle and compares SHA256 — a good way to catch regressions before they ship. - - .\scripts\Run-RoundtripGate.ps1 -InputIso "D:\Games\PSP\game.iso" - -Add `-KeepArtifacts` only when something failed and you want to inspect the generated files. - -## Profile matrix - -This is the compression-profile sanity check. It runs roundtrips for the selected profiles and catches behavior drift between game-safe, compat, fast, and smallest. - - .\scripts\Run-ProfileRoundtripMatrix.ps1 -InputIso "D:\Games\PSP\game.iso" - -To narrow the run: - - .\scripts\Run-ProfileRoundtripMatrix.ps1 -InputIso "D:\Games\PSP\game.iso" -Profiles game-safe,smallest,fast - -Use `-KeepArtifacts` when you need the intermediate CSO or restored ISO. Most of the time, you will not. - -## Release gate - -Run this before release-oriented commits. It covers restore, build, tests, command smoke checks, and the real ISO gates when an input ISO is provided. - - .\scripts\Run-ReleaseGate.ps1 -InputIso "D:\Games\PSP\game.iso" - -No game image handy? - - .\scripts\Run-ReleaseGate.ps1 -SkipRealIsoGates - -That is fine for a quick pass. Not enough for final release confidence. - -## Published EXE smoke - -This tests the published executable instead of `dotnet run`. Useful when the code works locally but packaging or runtime layout might be wrong. - - .\scripts\Run-PublishedExeSmoke.ps1 -InputIso "D:\Games\PSP\game.iso" - -Use `-SkipRealIsoGates` for a fast packaging smoke. - -## Final release gate - -The final gate is the heavier one. Run it after the normal release gate and published EXE smoke are stable. - - .\scripts\Run-FinalReleaseGate.ps1 -InputIso "D:\Games\PSP\game.iso" - -For local script work, you can allow a dirty tree and skip package creation: - - .\scripts\Run-FinalReleaseGate.ps1 -InputIso "D:\Games\PSP\game.iso" -AllowDirty -SkipReleasePackage - -Quick non-ISO check: - - .\scripts\Run-FinalReleaseGate.ps1 -SkipRealIsoGates -SkipReleasePackage - -For a real final pass, keep the tree clean. Simple. - -## Official release gate - -Before publishing an official release, start here: - - .\scripts\Run-OfficialReleaseGate.ps1 -Version 0.6.0 -Runtime win-x64 - -If you have a real PSP ISO available, add the optional corpus smoke: - - .\scripts\Run-OfficialReleaseGate.ps1 -Version 0.6.0 -Runtime win-x64 -InputIso "D:\Games\PSP\game.iso" - -For a future release, replace `0.6.0` with the version you are publishing. - -If NuGet vulnerability metadata times out with `NU1900`, retry later. If you must validate while the audit feed is unavailable, use `-SkipNuGetAudit` and mention that in the release notes or gate summary. -## Native development search - -Normal releases load `CsoKit.Native.dll` only beside the application executable. Local -repository artifact probing is disabled by default. Developers may opt in with -`CSOKIT_NATIVE_DEV_SEARCH=1`; set `CSOKIT_NATIVE_SHA256` when testing a specific build. - -The release version comes from the root `VERSION` file. Update that file once; managed -project metadata, CMake native constants, and release scripts consume it. diff --git a/README.md b/README.md index 821b92e..82b96a1 100644 --- a/README.md +++ b/README.md @@ -1,72 +1,116 @@ # CsoKit -CsoKit is a Windows x64 toolkit for PSP ISO and CSO files. Use the desktop app for normal work, or the CLI when you want scripting and exact control. +CsoKit is a Windows x64 command-line tool for PSP ISO and compressed disc images. -## Download +It supports detection, inspection, verification, compression, decompression, and conservative rebuilding of readable containers. -Grab the latest Windows x64 package from the [Releases page](https://github.com/HAKAMIQ/CsoKit/releases/latest): +## Installation - csokit-*-win-x64.zip +1. Download the latest Windows x64 ZIP from: + https://github.com/HAKAMIQ/CsoKit/releases/latest +2. Extract the complete ZIP into one folder. +3. Keep `csokit.exe` and `CsoKit.Native.dll` together. +4. No installer is required. -Extract it anywhere. Keep `CsoKit.Native.dll` next to the executables. +## First check -## Quick start + .\csokit.exe --version + .\csokit.exe native-info + .\csokit.exe --help -Desktop app: +`native-info` should report that the native backend and codecs are available. - .\CsoKit.App.exe +## Detect the input format -CLI help: + .\csokit.exe detect ".\game.iso" + .\csokit.exe detect ".\game.cso" - .\csokit.exe --help +## Inspect a compressed image -Version: + .\csokit.exe info ".\game.cso" - .\csokit.exe --version +## Analyze a PSP ISO -## Common commands + .\csokit.exe analyze ".\game.iso" --psp -Show CSO information: +This checks the PSP ISO structure without changing the file. - .\csokit.exe info ".\game.cso" +## Verify a compressed image -Verify a CSO file: +Basic verification: .\csokit.exe verify ".\game.cso" -Deep-verify and calculate SHA256: +Deep verification with SHA-256: .\csokit.exe verify ".\game.cso" --deep --sha256 -Detect an input format: +Verification supports CSO, ZSO, and DAX where indicated by the command help. - .\csokit.exe detect ".\game.iso" +## Compress ISO to CSO -Analyze a PSP ISO: +Recommended: - .\csokit.exe analyze ".\game.iso" --psp + .\csokit.exe compress ".\game.iso" --profile game-safe -Compress ISO to CSO: +Choose the output file: - .\csokit.exe compress ".\game.iso" + .\csokit.exe compress ".\game.iso" -o ".\game.cso" --profile game-safe -Use the fast profile: +Faster compression: .\csokit.exe compress ".\game.iso" --profile fast -Decompress CSO to ISO: +Estimate size without creating a file: + + .\csokit.exe compress ".\game.iso" --measure + +## Decompress CSO to ISO - .\csokit.exe decompress ".\game.cso" + .\csokit.exe decompress ".\game.cso" -o ".\game.iso" -Repair or normalize readable input into CSO1: +## Repair or normalize .\csokit.exe repair ".\game.cso" -o ".\fixed.cso" --profile game-safe --deep-verify -Profiles: `game-safe` default, `compat`, `fast`, `smallest`, `archive-smallest`. +Repair rebuilds readable data into CSO1. It cannot recreate missing or unreadable source data. + +## Compression profiles + +| Profile | Purpose | +| --- | --- | +| `game-safe` | Recommended default | +| `compat` | Compatibility-focused | +| `fast` | Faster compression | +| `smallest` | More compression trials | +| `archive-smallest` | Size-focused experimental profile | + +Use `game-safe` unless you have a specific reason to choose another profile. + +## Output names + +The output base name must contain 2 to 10 Unicode characters. The extension is not counted. + +Valid: + + game.cso + game-2.cso + back.iso + +Invalid: + + x.cso + verylongname.cso + +## Existing files + +CsoKit does not overwrite an output file unless `--force` is supplied. + + .\csokit.exe decompress ".\game.cso" -o ".\game.iso" --force -Output base names must be 2 to 10 characters; `.cso` and `.iso` extensions are not counted. Automatically suggested names follow this limit. +## JSON output -Full CLI reference: [docs/CLI.md](docs/CLI.md). + .\csokit.exe verify ".\game.cso" --deep --json ## Exit codes @@ -74,31 +118,34 @@ Full CLI reference: [docs/CLI.md](docs/CLI.md). | ---: | --- | | 0 | Success | | 1 | General failure | -| 2 | Invalid command or missing argument | +| 2 | Invalid command or argument | | 10 | Input file not found | -| 11 | Invalid CSO file header | -| 12 | Unsupported CSO file | -| 13 | Corrupt CSO index table | -| 14 | Output file already exists | -| 15 | Cannot write output file | -| 16 | Not enough disk space | +| 11 | Invalid container header | +| 12 | Unsupported container | +| 13 | Corrupt index | +| 14 | Output already exists | +| 15 | Output cannot be written | +| 16 | Insufficient disk space | | 20 | Decompression failed | | 21 | Compression failed | -| 130 | Operation canceled by user | +| 130 | Operation canceled | -## Limitations +## Safety -CsoKit focuses on PSP ISO/CSO workflows. -ZSO, DAX, and CSO2 are readable input containers; CSO1 is the default output format. -Verification checks file structure, not emulator or device compatibility. +- Keep the original image until the output is verified. +- Use `--deep` before archiving or transferring an output. +- Repair does not invent missing sectors or corrupted blocks. +- Structural verification does not guarantee emulator or device compatibility. +- Do not separate `CsoKit.Native.dll` from `csokit.exe`. -## More documentation +## Release ZIP contents -- [CLI reference](docs/CLI.md) -- [Contributor scripts and release gates](CONTRIBUTING.md) -## Architecture and safety + csokit.exe + CsoKit.Native.dll + README.md + RELEASE_NOTES.md + LICENSE.txt + THIRD_PARTY_NOTICES.md + SHA256SUMS.txt -The repository is split into `CsoKit.Core`, `CsoKit.Application`, CLI, and WPF adapters. -Production native loading is limited to the application directory and requires ABI 2. -Compression workers are bounded, and cancellation is propagated through verification, -repair, and final output promotion. See `docs/SECURITY_HARDENING.md`. +Use `SHA256SUMS.txt` to verify that release files were not modified. diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 13362c0..1643d60 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,46 +1,30 @@ # CsoKit 0.6.0 -Windows x64 release focused on PSP ISO/CSO workflows, WPF usability, and release-grade verification. +Windows x64 release for PSP ISO and compressed disc-image workflows. -## What's new +## Main functions -- Added WPF desktop app release path for Windows. -- Added localized plain-text reports for Arabic and English. -- Added deep forensic CSO verification details. -- Added Raw ISO deep verification through the block-container verifier. -- Added repair diagnostics for rebuild-only, corruption repair, and redump-required cases. -- Improved progress feedback, report opening, output naming, and language switching. -- Added the official release gate script. - -## Supported workflows - -- Detect supported container and image formats. +- Detect and inspect supported containers. - Analyze PSP ISO structure. -- Verify CSO and Raw ISO. -- Compress ISO to CSO. -- Decompress CSO to ISO. -- Rebuild readable ISO/CSO input into normalized CSO1. -- Repair readable input when the source data is still recoverable. - -## Release gate - -Official portable gate: - - .\scripts\Run-OfficialReleaseGate.ps1 -Version 0.6.0 -Runtime win-x64 - -Optional local real-corpus smoke: - - .\scripts\Run-OfficialReleaseGate.ps1 -Version 0.6.0 -Runtime win-x64 -InputIso "D:\Games\PSP\game.iso" +- Verify CSO, ZSO, and DAX input. +- Compress ISO into CSO1. +- Decompress CSO into ISO. +- Rebuild readable input into verified CSO1 output. +- Produce JSON output for automation. -The public release gate does not require a developer-specific game path. Use `-InputIso` only when you have a local PSP ISO available for extra smoke testing. +## Installation -If NuGet vulnerability metadata times out with `NU1900`, retry later. If you must validate while the audit feed is unavailable, use `-SkipNuGetAudit` and mention that in the gate summary. +Extract the complete release ZIP and keep `csokit.exe` beside `CsoKit.Native.dll`. -## Assets +Run: -The official GitHub release provides: + .\csokit.exe native-info + .\csokit.exe --help - csokit-0.6.0-win-x64.zip - SHA256SUMS.txt +## Important -Download from the GitHub Releases page. \ No newline at end of file +- `game-safe` is the recommended compression profile. +- Output base names must contain 2 to 10 Unicode characters. +- Existing output is not overwritten without `--force`. +- Repair cannot reconstruct unreadable source data. +- Verification checks structure, not emulator compatibility. diff --git a/SOURCE-MANIFEST.sha256 b/SOURCE-MANIFEST.sha256 deleted file mode 100644 index 4fd6429..0000000 --- a/SOURCE-MANIFEST.sha256 +++ /dev/null @@ -1,260 +0,0 @@ -83c222af1fe6e8a696852842dcc2a333b712d7f8e7a52d253cf1947eb75d0696 .gitattributes -09667751691de0e0984a30ad9c0517c9cf1908f6f7bbcf1d6ada558305eea50f .github/workflows/ci.yml -ec199855c0fbe73a3871363760991467d71f476c7a33f2b3dd51d40871f735c9 .github/workflows/release.yml -694fde6f4a55f0ae724f83e981e929db32e1ece1a813b0e5edadf87bd6fead21 .gitignore -d56402cce282880005ac828a4f54d87b5034a2dadd77106a03ba8b22f433b6ac CHANGES.md -78a9a8ddb6d7710bf28ccce1273e1096d946b3635f676acb5326ac853dcecff9 CONTRIBUTING.md -b589f99ad50c9ad872cfcb8f534218ff9f15795a5d2c8b0bb414980c04975dda CsoKit.slnx -94b8ed7dad0ef87941504b4e36317053b2139426408936c4e2f39530043e741e Directory.Build.props -7837b303799c6577bfccd56ea2de547203d4fbf5e63395edd66f66c59cb32921 LICENSE.txt -a47978a5202685045e70d851e01bfdfc7c650f70ef900c2e792e1e351ef030ce README.md -e76f95da340776c6b22df4343c6e83d586abc5849e115d2a2210296ed49adb59 RELEASE_NOTES.md -86b8001ad913ef0cc8a24a89ed2a8e8a10f96575d90f5578dbd9125fa98158a5 SOURCE_FILES.txt -46c3a139f30b02d6408101c245fded884db955813e5a3f754e1b6b0bafc57c2c THIRD_PARTY_NOTICES.md -97a5d6e540a6120d09c39ddb667e0e8e2bac7fcc2ffef813b82e08fd60365bce VERSION -13cd8603ecc7b23ba8a1286cf9a188bfd6d97689c8a184ccf142f9a0ae6b115e docs/CLI.md -8a6efb099f97fb79905164eabe3a1c98c4a672a69e908d2c13a54acf9c0dc4df docs/HARDENING_IMPLEMENTATION_REPORT.md -690904fb562259bb92ce72b34ec7f56e445e1c7eff9f56e76bcfaa58b5726538 docs/NATIVE_BUILD.md -6db091f1350664ecfdee5b1d86bbc03da2580d662ace294999c5eb26c92ca73b docs/README.md -4202b423bba113e0314fed1414b633dd2de9e127ac09933bf9c21a77177c5b43 docs/SECURITY_HARDENING.md -2172de5869b1e082a938baeed3c4e57f2de75050925e78b0024816d6bab91bec docs/archive/CHANGELOG_FIX_NOTES.md -9c100eed8816ac61bb49814146c81742a604886bbec103d2bec7962f14ed0c7b docs/archive/R1_ARCHITECTURE_REPAIR.md -e6e778d21267ac800c1c311a75bc47526257dcc1319b7c35f520376c6729e24d docs/archive/R3C_RELEASE_HARDENING.md -ac73bd03c853aaef89fa6d0dd51ffd6b935ef73b17459f3c4280dab4c75ebb93 docs/archive/R3D_BENCHMARK_TRUTH.md -1349344daae36722dd3d04b96062193151b07e31267e3603fe649b1823db28cf docs/archive/R3E_REAL_CORPUS_EVIDENCE.md -622cd19631635bb08684110206aa3dec35083d1baa179883ddd167b5509f3375 docs/archive/RELEASE_0_5_0_SCORECARD.md -5e4c694728b2e055f8c0d80ba812875b6c87d03b02a599015d67b98b24af771d docs/archive/RELEASE_SCORECARD.md -f59002da509cb542250a5783b44747e763632fb63fa1fc7a13a32a407ebfc1e3 docs/release/RELEASE_0_6_0_GATE.md -4b1148a62780adfaf9f7d34f1fd795ffc0299d6bc41cad4057c0acf8b1a460ea native/CsoKit.Native/CMakeLists.txt -c22d0676fba3d95603d2b368ca94444c0b222e745b1fd2d749b85908f6319e18 native/CsoKit.Native/include/csokit_native.h -3f826677044ccac3f240c402e3ab2059ed916d5299ef1dcb78ffbd4b27327db4 native/CsoKit.Native/include/csokit_version.h.in -8da2870fe1221ca70af3920e9abfbb6e35578235bd09341470bc5a0e7f543653 native/CsoKit.Native/src/csokit_native.cpp -675fc1c25ad23d5e14255152262598b591a6e3fc65f0871655f5f6585f120acd native/third_party/zopfli/COPYING -fcf520edfbd8011d0710b3c8bf4db334e5902bd7e217bf4ff406db3d881699b2 native/third_party/zopfli/README -3056afd38dd01c7acb688df7bc365e9e3055cc8d5b548b394c3f5ba6147f7ea5 native/third_party/zopfli/src/zopfli/blocksplitter.c -3db4f4b63fa25f4c135c8438d880a4be9ae7403b40a4ed1a1fd5f461be7dda06 native/third_party/zopfli/src/zopfli/blocksplitter.h -77c7e378af671a2113306a0db5a15630a99b709a4299ba2cb411b0820d2e1c3b native/third_party/zopfli/src/zopfli/cache.c -1c041868ad624b37736b52db0af81562a6c0fdb163f459315ea596e8552770a8 native/third_party/zopfli/src/zopfli/cache.h -4d219194e6b6a6fa76a3583e0bfbff831219515ed589784dea403d1553ae6c1b native/third_party/zopfli/src/zopfli/deflate.c -fa62fff6aab5e047412eb9a46e7972c91a17a9bcd230adddd4ce44df2a00e8b4 native/third_party/zopfli/src/zopfli/deflate.h -8e24e6259ef6fef05953ad9a3471fed9f421dcea8edda2135b4fb9a979b115b9 native/third_party/zopfli/src/zopfli/gzip_container.c -8d687a588f5638965e4881802a30a547601b32ea7cb686218afbfb25ef1f0f42 native/third_party/zopfli/src/zopfli/gzip_container.h -9d6e603c2954826049ff13e13bdf0499fc3d78cff01a6ae0429ccdf23dc00c36 native/third_party/zopfli/src/zopfli/hash.c -51ea819f5e8d64ca6ee4498abc7b57a1053d93fd21df14b8c93a20c9186be4a2 native/third_party/zopfli/src/zopfli/hash.h -e5555b9cdadfd427f4903457ac28452b089db899021bffe66fdc653be793683e native/third_party/zopfli/src/zopfli/katajainen.c -eaf4b6da83c24bc341612f8ccbad2b10287bc1242e2b4a75b950fdaf805e2d69 native/third_party/zopfli/src/zopfli/katajainen.h -dddafaafed3cf36cd046cbe14960606a56a32380dab9084cdc31f70119e9dd29 native/third_party/zopfli/src/zopfli/lz77.c -9d3ac03cfb94c2b1a1eb6d4bf9044dc4f86436f062699828bce8a103fb8ef12c native/third_party/zopfli/src/zopfli/lz77.h -2584b9889f6b8f35e4bdf312548904d64416cac78d21b2ffd24c97b5f13f8b0e native/third_party/zopfli/src/zopfli/squeeze.c -47db13efe62c0876e4ea53004885b96327f40cf0b9c6107a74f9ef94c1e0235a native/third_party/zopfli/src/zopfli/squeeze.h -2ab04edd4c135b46a8255ac766040c37a5f10c3b2f908a255e68db3d7c53056f native/third_party/zopfli/src/zopfli/symbols.h -93c9e603a494a7e7b075dc92b89ebfd6813fb229508a7acc97ebd91ad956d8f2 native/third_party/zopfli/src/zopfli/tree.c -396977e269ee143a0c5fa3393fe002f78a605c525f35a9e4fa5ac2250bfd0a07 native/third_party/zopfli/src/zopfli/tree.h -db1a6fb953b284a5c2df64b8ceda5943ff6059a6d4a83148e6f3ac04bc5e57a5 native/third_party/zopfli/src/zopfli/util.c -72730de4d23c65de01057c8c8167bb90364999a6914c1520c20c4837afa5db73 native/third_party/zopfli/src/zopfli/util.h -72d331a099559eafbc4b49d1aa1101f8dbf228ec89920e63cba49a40ade416c6 native/third_party/zopfli/src/zopfli/zlib_container.c -7744d8afea2acca76c8e9f823c4f8df3c7545ec8c9fbe0ea14b67d35f5f7c52f native/third_party/zopfli/src/zopfli/zlib_container.h -9cff9d2ed11be71b8bc82aed0afd2ed47391609c138ae2bb3dc18730e62ddcb1 native/third_party/zopfli/src/zopfli/zopfli.h -cca1503d387c6723b905149830794bff15cfc7e6e1c0bd3d49f2ce7fda53abc2 native/third_party/zopfli/src/zopfli/zopfli_bin.c -2464d1493e1a9ec503fbac5bde81987b8507d81b34d2e596e128a93204d8486a native/third_party/zopfli/src/zopfli/zopfli_lib.c -84f0ed4f3c3bc5b7a4bd3b428c33c47fff5110bc0b7bbda4ba9df7b2b3ec7156 scripts/Build-Native.ps1 -a35066440e494f9bba232dd743a174e7be5311e591c5533334f4dd7fd5ab2c0d scripts/OutputFileNamePolicy.ps1 -5aaf77a4f69d7786649a108b8719cc80e4e5499354c3752aa5861d6c87b0f47d scripts/Publish-Release.ps1 -d8000002589caa379e607cb91aa6233476322b1bc7ade0032317cb29e0d2081b scripts/Publish-SourcePackage.ps1 -413bc4f68cf8a1420e736183ec93d5a8299571d3dc9b7107c76c3d850bc32e93 scripts/Remove-Utf8Bom.ps1 -721223faf51b16d27d2955acb411f2eebc0d3823f7ae16b8dc6585c9d06403df scripts/Run-BenchmarkTruthLayer.ps1 -e54578882747486bafe17deb80828bf93f828f175b7c6641aca40abddea7d5e6 scripts/Run-FinalReleaseGate.ps1 -3cf088679c34cb06a044cd910a75760cfcdec9c4b5d7507775081683d2273e3f scripts/Run-OfficialReleaseGate.ps1 -9ce98993d496a3cc1006968e14b621ec8ef6097498614ad71a3ceb3413cec7dc scripts/Run-ProfileRoundtripMatrix.ps1 -3fad0591340a947e86481aa883a9ec943f3f273c4d47e1c7386373ed64e62a73 scripts/Run-PublishedExeSmoke.ps1 -11c0a75f4103c119514666e0ff0ffc06b49949fc700a0e422c2e6e12a446cb6d scripts/Run-RealLocalCorpusGate.ps1 -9f047a9c826004c25268c5de7dac82e33aaf132b50f49043abee7520d044df46 scripts/Run-ReleaseGate.ps1 -6eaac31f8d25835ba79eb35b0938f08c4db5b1925aa957b2869be5c3015176ae scripts/Run-RoundtripGate.ps1 -c76b7ebcf8f62071e041f5de7679b958e70f7070bcbd9666d79f72a4597dfda2 scripts/Test-RepoTextEncoding.ps1 -6c8043ce2d818c76118fb4275de9afa625eeab9a9805dc463d03310fe3d45c00 scripts/Verify-Hardening.ps1 -c1a329c768b4757d3960914e46221e22279b0fcac276a818cc34a93e23d35ce7 scripts/Verify-Release.ps1 -2ac7fdf01c304542406356b6c6cdc1a557d84ad844552961866f07962071581d src/CsoKit.App/App.xaml -b34df67641b151d24cd8d103b14ceb9913a08bf96a4c251a5ccd99b7995fd1f9 src/CsoKit.App/App.xaml.cs -8b062933e799689e343c31b5d1e44e7c6587d48ceeb9d899cf66765977993342 src/CsoKit.App/Assets/Icons/advanced_key.png -ffe1f054ea41493518ce258b346d662b929ac363177fd12716b0f61be36540f4 src/CsoKit.App/Assets/Icons/csokit.ico -ad88db1a9acd9867478d21dde0132a9d0e8179c46af6e385093488b7e9f3b904 src/CsoKit.App/Assets/Icons/csokit_32.png -d04ecfc93ff86c44f6fc39e35945e3d8a7648ba8fcd97a2635920df2e88893b3 src/CsoKit.App/Assets/Icons/status_error.png -644faffc659fb1e6778cf5290022fbcde177952c66881848e6380ed91211e878 src/CsoKit.App/Assets/Icons/status_success.png -760dbc493f4dcecbbd55573d095ed9685038aa100715c55aae1306870d44fc43 src/CsoKit.App/CsoKit.App.csproj -b9e950030953a7f673d3d9a538008907d987636c6bf5b05488df9fa5e215864f src/CsoKit.App/Localization/ArabicUiText.cs -4d64f244c859cfb8e3faeea4eccb0dcb42f10e3996e73618e3d578edbb22a8d9 src/CsoKit.App/MainWindow.xaml -b3317763fc6e197f679da2e253e02f6b547c339fbd39d51a1b9de4700361f1f6 src/CsoKit.App/MainWindow.xaml.cs -b322a29589c4a11e41566d62dded83bf684bdb099507643fb923dbe29cffab6f src/CsoKit.App/Models/UiLogEntry.cs -56ad9466818c37b02552143c96bd25c45b3124fd1fa39417e9cab149e619f9ad src/CsoKit.App/Models/UiOperationKind.cs -dfd131c480ba8c39b986be904336d8e61db8cffee70aa56abc00c9e6b44c084b src/CsoKit.App/Models/UiTaskItem.cs -9c645fb2ae2efae5e9c42e213320eeffe370f13f7cabafda83787b1498957965 src/CsoKit.App/Properties/AssemblyInfo.cs -2a111c2dcbb5d4ac516c7cae5c67125104f5a31cdf4047034061d94c63ae394d src/CsoKit.App/Services/OperationReportService.cs -ab0b7b62c282cdf300c592666175ed2eb31499db6c448ab43f0621106fe9c5df src/CsoKit.App/ViewModels/MainWindowViewModel.Operations.cs -02c7e365c2b119feedf39d88276b04887139f7041025ad7bf4a0bd1c523ca108 src/CsoKit.App/ViewModels/MainWindowViewModel.cs -283224e67125a2dccc0d213f0788a76c11c86362db928d9581ab185ca1022a02 src/CsoKit.App/ViewModels/OperationSummaryViewModel.cs -472859d48e02aeac35be04a2c601d2af0a155e81c7d3ac0fc83390c2d47403c6 src/CsoKit.Application/CsoKit.Application.csproj -8b4fa40bfbe0933fddf4ed47a8179f4cef925b6baef720898dadf618597bde09 src/CsoKit.Application/CsoOperationData.cs -dfae0f8c558bafb32fd23f86d87b7cc4b58fdceae6f21b198c80f7bdc0338b5c src/CsoKit.Application/CsoOperationDetail.cs -17a2a190a3381da67ff909dac9c5bb07b461f9d90539528f860451bd4dbc03d8 src/CsoKit.Application/CsoOperationDetailsBuilder.cs -c3161e14ed1689bbe31bfbcd919e35e0dded2ead03a9dc5141df049c73850f19 src/CsoKit.Application/CsoOperationResult.cs -65dc7a9fdc845a59ac02ce86437ca9efe15764460dd35fdbbe4c7de69390c127 src/CsoKit.Application/CsoOperationService.Verification.cs -07eaa67f591ec31ae49dd7dc0a12ce9f26e9905b728be39890aea9246510bbd0 src/CsoKit.Application/CsoOperationService.cs -1b0523322c48e5f4477d2a76fb67d6c6c92ff016ae64d9ac27390fb414c7b430 src/CsoKit.Cli/CliExitCodes.cs -ba85c32a11a8102bed0e483aa9de3389c6e085e8a487342b84e7d8871c3de91c src/CsoKit.Cli/Commands/AnalyzeCommand.cs -4c998fc32006b630da158306d0d6b84dea6b4bd315f63780f9e132214fa6713e src/CsoKit.Cli/Commands/CodecsCommand.cs -ce9da41cc3da46bbac0d229b23d3d07e4200dabdbc9956f5b75c95d47929a9cb src/CsoKit.Cli/Commands/CompressCommand.cs -fed2ece8b83e0dfb4e874f8ee1a25142b1368d536b6f0250f66927408fbb8847 src/CsoKit.Cli/Commands/CsoCommandDispatcher.cs -1369fbee172aa573b612f7ed1c9fc9ddaa366af3201c70e16a657c61f4fcfce6 src/CsoKit.Cli/Commands/CsoCommandError.cs -98e98344dc715d92841e1cc29d1953b1d9e79c19241a3af94813d0f1b71201a9 src/CsoKit.Cli/Commands/CsoCompressJsonContract.cs -70aa3ce63329d2cde0b6520609f22e9700966031778b2313ec1ef9f2e249bb19 src/CsoKit.Cli/Commands/CsoProfileOutput.cs -a1ec171e0b3ebfb57f9ead08aca9023001e01911187a0bff8bcdf133f5368923 src/CsoKit.Cli/Commands/DecompressCommand.cs -063a02a26b9993e848d3c30f770f57ea1855d9a6042fbffdae3725db9f05b149 src/CsoKit.Cli/Commands/DetectCommand.cs -2e5935de82e180933f5f0cf143ca163f9dd47b7a9261d0e707efb7abc873921d src/CsoKit.Cli/Commands/InfoCommand.cs -c3225a65d30cd64167f420ac524c8851839149317c52f5c288b70c3fc78af16b src/CsoKit.Cli/Commands/JsonConsole.cs -2ecf5d87cf25c875b5098869b0babc78b9ccca649fdedc0b8453395ed4cfcef0 src/CsoKit.Cli/Commands/NativeInfoCommand.cs -a0aeb3b5aa497d4689ac5268450cedbc840f523b3596f864345cf951c67ddd66 src/CsoKit.Cli/Commands/RepairCommand.cs -b7ce0b2b7bde5a2d045478a19e4a02121a372fb577682f01bd5277267633b8be src/CsoKit.Cli/Commands/VerifyCommand.cs -abe3404faecd5ed71c64d4178b659b306505a26ca3449abfbcb1e4bd6468204e src/CsoKit.Cli/CsoKit.Cli.csproj -b3561a98166a588119e68ebf756f1689aaf6df9eedfb9a579f152e8ecfd64878 src/CsoKit.Cli/Program.cs -bcaac708370d25a6d0cf182ba90a9be42ff455c5c123ec316d7552171816a66d src/CsoKit.Core/Analysis/PspIsoAnalysisResult.cs -455e3fccfc1d14c7dcea4cb65fb2b2f9420cc8c6757778086e2b8c5375a2f1e0 src/CsoKit.Core/Compression/CsoWorkerPolicy.cs -b15818c8b6d3a03aa6df80ddd35564390888e13cb7ae8c664f9d6359e56ed757 src/CsoKit.Core/Compression/Trials/CodecTrialCandidateResult.cs -32c91e912a4c8aed5063ae248676f26ea71c12cfc8352da20b09d1cfeea295e1 src/CsoKit.Core/Compression/Trials/CodecTrialDecisionMetrics.cs -b8f90b197ec2ef3b45257d66ca0f679158b564741412b0f99ba023354cd7c4e5 src/CsoKit.Core/Compression/Trials/CodecTrialReport.cs -69910633e8953a24a6e52e89729356d10f7d370c1edffa713a5e29bb51fbaf00 src/CsoKit.Core/Compression/Trials/CodecTrialSummary.cs -4e4247f4e0f2638454e9681b09d6f020ab70152fc211017e52b180d7e3a3da3c src/CsoKit.Core/Compression/Trials/CodecTrialSummaryBuilder.cs -9c4f985b1f906eb62e5f34b8e34617bf5193052bfb7a9c805db0a27ad8d6e187 src/CsoKit.Core/CsoKit.Core.csproj -0f5f0341909c4d1b98383a49cdcb801ef56e6cb73a5f5d5c4adc5b4ff4088a41 src/CsoKit.Core/Formats/Containers/BlockContainerReadException.cs -306273e52118207a00d38203a9f0a717236f63cf8e58a60353b82adc1a495d21 src/CsoKit.Core/Formats/Containers/BlockContainerReaderFactory.cs -57808b815dfaa014b1ceebe7a07efa2c86113bb5065a2268fbc0c1579cdfbb5d src/CsoKit.Core/Formats/Containers/ContainerDeepVerifier.cs -440b2fae9bb984c2d91f42d089034121f98e32db723f4f64afaba911c3a961ec src/CsoKit.Core/Formats/Containers/Cso1ContainerReader.cs -84dc142554fc154d0bba3ce7c1fa6237292df42d29edc42a309e0853e346defa src/CsoKit.Core/Formats/Containers/Cso2ContainerReader.cs -a5476b5324b571d4cef4caf749a46c23d077c7d8b2e741512a540d699a9ea9db src/CsoKit.Core/Formats/Containers/CsoLikeContainerReader.cs -0e73a278f5c072edb0a54c07a6a0453ddbc8b80aefd83d9533f70696007c349f src/CsoKit.Core/Formats/Containers/CsoLikeHeaderReader.cs -80d4e2b39ea2f32833c65dfab134abbdc91d848639de0618ae47933e387a64c9 src/CsoKit.Core/Formats/Containers/DaxContainerReader.cs -185fb647a5924253015f3bedf3a9e77071b8ac0f8214e879c744363b83eaeced src/CsoKit.Core/Formats/Containers/IBlockContainerReader.cs -af85b96d796ea951f1fae26a6693993bef7ea1975280beb4110a8a6f1186826c src/CsoKit.Core/Formats/Containers/IsoContainerReader.cs -1e81021bb0a6e0f51b7960031c929dd58e2686dd00451e72618f3cb316cf6650 src/CsoKit.Core/Formats/Containers/Lz4BlockDecoder.cs -d148b35984daf78a240f226e819a91f1aa84862808d40dc58b9e24aa8c82966e src/CsoKit.Core/Formats/Containers/ZsoContainerReader.cs -ae11939aa146b14d00d7b9fad5b8135287e49624eee5c5942176565095c4ea76 src/CsoKit.Core/Formats/Cso/Codecs/CsoCodecKind.cs -ec49a9b011977a3938c1bec1b251ea4eef4edd5bee29a681e4fdb09e1f62d75f src/CsoKit.Core/Formats/Cso/Codecs/CsoCodecTrial.cs -b3b64da7651ff3b2641ec6d0ff08587ad08f7b1cb84b20ddff044389e3d02cb1 src/CsoKit.Core/Formats/Cso/Codecs/CsoCodecTrialResult.cs -ef2977adef292be5d6a9223ddc485f082c6b498285b2e4ee6687b7b4c950a1f9 src/CsoKit.Core/Formats/Cso/Codecs/CsoTrialEngine.cs -96af06be69a30a72512a18e21c07de37179bdc579a10ac557ffc1663a828fdf6 src/CsoKit.Core/Formats/Cso/Codecs/CsoTrialPlan.cs -18e61e3332ad7f3ef012f3972600d59f496b7ba8dd0cc1465a282f35587984b1 src/CsoKit.Core/Formats/Cso/Codecs/CsoTrialPlanner.cs -bc90849095d783b3e085f1859a3d389e8a29391ed0b992989cb8fa794862f2f3 src/CsoKit.Core/Formats/Cso/Codecs/ICsoCodecTrial.cs -bd2b72733a62fe7300a5841c42e3bafe2f0d5e9fe12d39736400659ee76d507e src/CsoKit.Core/Formats/Cso/Codecs/Managed/ManagedDeflateTrial.cs -da5826f50824345f07cc446cdf0e816cdcdb9a4142094c625c478e2d296e0cb2 src/CsoKit.Core/Formats/Cso/Codecs/Native/NativeLibDeflateTrial.cs -f8521541742be6fd4d969f278a351ee30dce850dc1b6e32693520e4e96f5b64e src/CsoKit.Core/Formats/Cso/Codecs/Native/NativeUnavailableTrial.cs -163e1ae0bac9b3575accb5f14717286398f4d31f7657779139b4f322b576efa9 src/CsoKit.Core/Formats/Cso/Codecs/Native/NativeZlibTrial.cs -4ee862858e39c08d0af267e89d161ff6686d259a414b7f35f0e539f7c8b1cd4e src/CsoKit.Core/Formats/Cso/Codecs/Native/NativeZopfliTrial.cs -a0c0bb9a8894923d90d2b490dd6c95079147a231572f6e3b5ca4527f3aa920b6 src/CsoKit.Core/Formats/Cso/CompressionMethod.cs -7d93a116ba441e221251833bb016ed7422793ef0cc11a43075965347a877f659 src/CsoKit.Core/Formats/Cso/Cso1Writer.cs -19e576da97133c6d30b429b431f16aa5ecd4fd25bd6c8cc35749c8a984eb4d78 src/CsoKit.Core/Formats/Cso/CsoBestCandidateSelector.cs -c7325a535e674d0a074e12605e25ac1866d1869ec0b252654a56939c0a03f4d7 src/CsoKit.Core/Formats/Cso/CsoBlockReader.cs -cd11a2e4775f0fd3985ac8873c74f23363d185fb7c792a7771a9e1fdbda8b0bc src/CsoKit.Core/Formats/Cso/CsoCompressOptions.cs -4b13804311f4b502d2d258c59129100e8447874faabc9c827be188eeba1cde51 src/CsoKit.Core/Formats/Cso/CsoCompressProgress.cs -33ac5cdee19aea81487ee99d1c54a75f61eb809a3a952d3812530133686ea49a src/CsoKit.Core/Formats/Cso/CsoCompressResult.cs -79307f6efe0fd073f20f0f87a707eee26d77e541857caf5e8f5acef9f64765ec src/CsoKit.Core/Formats/Cso/CsoCompressionProfile.cs -e6ab1ad1a6bd1301f1495f9091ffdba2f3f02d6324c091e93d7045240c6737ac src/CsoKit.Core/Formats/Cso/CsoCompressionProfilePolicy.cs -b6c9e30c4679614faff5674ae05549842aa2261e33feb1a4cfeba71da1f6b19b src/CsoKit.Core/Formats/Cso/CsoCompressionProfileSettings.cs -fb2d347a55d526f268d2ea208d5bf3dfab70ff3f6eee1f838f2613630f385be0 src/CsoKit.Core/Formats/Cso/CsoCompressionWorker.cs -cee9f2d5068371df605205b789775a9cf5efceb3fffe1b5f15d361a6d775474b src/CsoKit.Core/Formats/Cso/CsoCompressor.cs -d7a6852f72a5d90b8cafc30b8d2d74833426e6905902462c1abec80a52b3b95c src/CsoKit.Core/Formats/Cso/CsoConstants.cs -7629f9f78ecf32f4ca6837986b588ffaaa43dec9724ef3829b4f1eaa58c5d63c src/CsoKit.Core/Formats/Cso/CsoDecompressOptions.cs -8c3719d9bc2d7871cb8d685646c332a6473a4b727dfe6f5e70ee51f78851ea25 src/CsoKit.Core/Formats/Cso/CsoDecompressProgress.cs -5764ed5052e9a81789851ac460abdf1c2a5cb90029045522df143dd7d1c248e5 src/CsoKit.Core/Formats/Cso/CsoDecompressResult.cs -7c122bfa80b9e9903bb3d790db95381083ea9fb769da092f5db2f5b1209481cb src/CsoKit.Core/Formats/Cso/CsoDecompressor.cs -7c2ffba9f7ebe3213a9692b4d49203f3ad87dade5c59e6797affd897a76160d7 src/CsoKit.Core/Formats/Cso/CsoDeepVerifier.cs -0bba1cb45d1e734a259b9cdf2e0c9256bb5f1261eaae5a7e9e95cac0e7938c27 src/CsoKit.Core/Formats/Cso/CsoDeepVerifyIssue.cs -4e863d2c109033322f24c2a85c8aeb9c30319762d8d12fe652f004caf6e242cb src/CsoKit.Core/Formats/Cso/CsoDeepVerifyResult.cs -f41996f8ca403070eba9f94cbc26958f3d518705a6932bb353cd4b8aa34749de src/CsoKit.Core/Formats/Cso/CsoDiskSpacePreflight.cs -fab30644f72a43dcb97036e8c0a942048ac94a6eaada96aaa9768200b8ad94bc src/CsoKit.Core/Formats/Cso/CsoDiskSpacePreflightResult.cs -9a5f196421a989f1de860205e9be353c2158229ccb8505e08af1cc089dc0f022 src/CsoKit.Core/Formats/Cso/CsoFileNamePolicy.cs -07ca87cd07b4692ec35b42eb3c8dd84d67a55b835c40bd0f8dd8e8f193a32103 src/CsoKit.Core/Formats/Cso/CsoHeader.cs -6b2a198ca0dbaca4061366e0245babd2459ed3d72536bb5b51ec7034e432b29e src/CsoKit.Core/Formats/Cso/CsoHeaderReadResult.cs -486bd13b6bd12c957b9a60db3ce8380012d4b38c9b2a0a95e514c08e4b6fab9e src/CsoKit.Core/Formats/Cso/CsoHeaderReader.cs -57ae70ce0b3c24250412acd8bf9b273f38c1c0d59c0425526c19584fc4fdb8c6 src/CsoKit.Core/Formats/Cso/CsoIndexBuilder.cs -56eb03080e24b20c8f08f941d9718e5f8fe2fdb87b6ba5a3dfdf7871bd38568b src/CsoKit.Core/Formats/Cso/CsoIndexEntry.cs -af4452dbd6cf8b04789729b009be7414be3cd3db493aefd9679c85606ee9e75e src/CsoKit.Core/Formats/Cso/CsoIndexReadResult.cs -45729ce84ff621ffd25f4e1d10ac395b26d22d9c16eb28c32be764658a6beaed src/CsoKit.Core/Formats/Cso/CsoIndexReader.cs -9f6e4b5819ebeb8ac63e47c41812f347885e631351ad1647d89076a76d82a844 src/CsoKit.Core/Formats/Cso/CsoIndexShiftPolicy.cs -17eb0920ce1f3b58d8278e5a00868e97b6c5ecd8c9bdc2b413378dc71615a754 src/CsoKit.Core/Formats/Cso/CsoMeasureEstimator.cs -9b3b0e7102005ee3b7f4e8b3bb4f5f65bd476042ce8203717db2dc21fdce0d53 src/CsoKit.Core/Formats/Cso/CsoMeasureOptions.cs -6bbbb685383cf6233591523a5ba22cd817154060701d28c4cb3630ef55ac26a8 src/CsoKit.Core/Formats/Cso/CsoMeasureResult.cs -45a88e1089bcee4dd6c9789f7e0f95fb5b82c80a315fd760c9fd14b13b118928 src/CsoKit.Core/Formats/Cso/CsoOrderedOutputWriter.cs -6b8cb4e0bf2fd1e33ed69797437c301083fe45a000c35bdcb5b5b863f285f3c2 src/CsoKit.Core/Formats/Cso/CsoOutputPathPolicy.cs -9ea452968f2cca0b3ee965a00f6229f30f4f43e577a1f5429678bc7116cabf1a src/CsoKit.Core/Formats/Cso/CsoOutputSafetyPolicy.cs -16b9e88f2dd77632d48f97eba07e4967616db4eb1ba2507f245c05d666eb55bf src/CsoKit.Core/Formats/Cso/CsoOutputSafetyResult.cs -b325b79d1bbc119aee42cf4d75de5188411babd4ad1da5720ddfe1f53f66cdc5 src/CsoKit.Core/Formats/Cso/CsoRepairMode.cs -3d4674df7814bcb6d784c3faad65c247d9222422c71a32ac5ff6b4718f506da9 src/CsoKit.Core/Formats/Cso/CsoRepairOptions.cs -2859f324fc31aa2b2d4eef294a69b8355099b141f46cfee08f183bf537ed46c0 src/CsoKit.Core/Formats/Cso/CsoRepairResult.cs -6bc748311dceaac82313efb60bbe1b2c353bccc5a6309bc9c9e4709bc60db6fa src/CsoKit.Core/Formats/Cso/CsoRepairer.cs -79ec13430681af1d7798797dd312e2dfeea9cc1c48adabd1dccc2af8bebd59a9 src/CsoKit.Core/Formats/Cso/CsoVerificationIssue.cs -950aa387eb2723e0e2391de92785ad3ec564632b19ed6cec09f5389025118592 src/CsoKit.Core/Formats/Cso/CsoVerificationResult.cs -955c4030f4bef6ce9da4c796589c39dbba4d962eb608e9b053084a81aa664f2f src/CsoKit.Core/Formats/Cso/CsoVerifier.cs -a00449ded5a4fa4c58550c1ca4e677ff7acc00ca920cf6d12b3cb99271ebb9a0 src/CsoKit.Core/Formats/Cso/RawDeflateVerifier.cs -16caef1410b1b452e6653660cd11797d17c9127ecbf53fbffe4c23184dc9a62f src/CsoKit.Core/Formats/Cso/SectorJob.cs -cdf66da58ecd5dee15fa46620701608fbca67546c6f107438e27c202589dee2d src/CsoKit.Core/Formats/Cso/SectorResult.cs -a5d21c8c7c81ecb7ade03448d4bc881b7e6e7a8623d1d485620d9a3dec7fac16 src/CsoKit.Core/Formats/DiscImage/DetectedDiscFormat.cs -df171c7440cd3ed360df6ec62ea87f405975ee22003c9808586bafa1c90fb5a6 src/CsoKit.Core/Formats/DiscImage/FormatDetectionResult.cs -ad8c990fe84d1b112925113f144845a27dc9b9295a31beca7e4b0d5f17ef56c3 src/CsoKit.Core/Formats/DiscImage/FormatDetector.cs -bf8c0e532c7969b60ee8d0cdbf1951cc079e33ca0b0b73d58f0d2189d084784c src/CsoKit.Core/Formats/Iso/Iso9660Entry.cs -36e4f4b0ecbbc18562ffd2b8615837925616c94c455a88ed865057e5d8bf9547 src/CsoKit.Core/Formats/Iso/Iso9660Reader.cs -a02ee5f946e44f2ba58a5a94bc5abc8dc21c0ea2d74c63702550bbae7b956129 src/CsoKit.Core/Formats/Iso/IsoAlignmentPolicy.cs -0da1d2490a7c3d820e4c34c61af278ca20b0e06cd9a2b1e31c5d99c3b55b1ced src/CsoKit.Core/Formats/Iso/IsoAlignmentResult.cs -7dfbf95c8d0d37c3e33709f0c0088e4be102b06212baf27d7ace8cfc007ddf1d src/CsoKit.Core/Formats/Iso/PspIsoValidationIssue.cs -d895996a3a3be824c44c23991f2e54b8259aad10dc3ae09cad85aacb76f072d8 src/CsoKit.Core/Formats/Iso/PspIsoValidationResult.cs -ec68ce9e588685935bf9a274e8f36c345e227be9fcbaf256336f82a2b81def91 src/CsoKit.Core/Formats/Iso/PspIsoValidator.cs -59d4502d03cef71dbf35c0c8d217b62245f8384254efba73261c271b71d3b075 src/CsoKit.Core/Formats/Psp/PspDiscIdentity.cs -10647b985a8eea66ff668748e148586e97006a3377b7d5f1fbc1bfc6d683d177 src/CsoKit.Core/Formats/Psp/PspParamSfoReader.cs -557a9eeb2d00117d8755a03713819c3544cf892c2e26ad1e42adf657a3c99b24 src/CsoKit.Core/Native/NativeCsoBackend.cs -a2b727b69c53b8c574b41affb323f2326812c72e712bdaa23cd15ceeadf7e507 src/CsoKit.Core/Native/NativeCsoCapabilities.cs -268ea9a05b8835282092151d3f60a4bac771db98c02438fbef70fccda3719857 src/CsoKit.Core/Native/NativeCsoRawCodec.cs -44b4b3184593571ad3ac7cc7dd02e1dfccc4b611dc6c920e3182d3d9d90d837e src/CsoKit.Core/Native/NativeCsoRuntime.cs -6ac402e6ff19b436121dae1857871319cfdd4a8e15fac888ad70f216648aba19 src/CsoKit.Core/Native/NativeCsoRuntimeInfo.cs -f1d9430e7fcf3b8d7b5e9fb17c5d151158cf58f6a5c6e013a754172aa3ce46e8 src/CsoKit.Core/Properties/AssemblyInfo.cs -7cbdd80a6693c9020c4a1320c99815e81e15b52da28fe2d789f7a9246e51f93a src/CsoKit.Core/Repair/RepairMode.cs -dbd53a726e7e507ec36a5866714d738288d10cc964930fe2d87889c5d5445d62 src/CsoKit.Core/Repair/RepairPlan.cs -7e98c5f21f8d58a50ce56b5083026b47be11b4baef761775e6a00af1a0775d88 src/CsoKit.Core/Repair/StreamingRepairService.cs -36039ae43b113d933e4afeee1bd456856e81beef1895dfefdf5b5ce9e87c7019 tests/CsoKit.App.Tests/CsoKit.App.Tests.csproj -471ebcda1c2b1689ab16a61edaa4f2286cbb2b1a0a11e46da889e0546fbf33a3 tests/CsoKit.App.Tests/OperationReportServiceTests.cs -5b4bad0f388b03886fb13cca7f5c0924bfe96d1477695d2b01525fd23c958457 tests/CsoKit.Tests/Application/CsoOperationFileNamePolicyTests.cs -5867be052449f5e281f71497d67f97c440428c8b7984930c87028798ad097324 tests/CsoKit.Tests/Application/CsoOperationResultTests.cs -043408ec1741516d1fa2c0cf9391f6572e992f2a37817d2315ef80fe1b6907da tests/CsoKit.Tests/Compression/CsoWorkerPolicyTests.cs -01600e6c4b8329114330374abd7e9a0cffd7860e18e545f4d803e7ebafdb18a0 tests/CsoKit.Tests/CsoKit.Tests.csproj -ca86647f4081372cb5fedd3ee3739c12bccd5e5e7b4f097949967d04d335e61c tests/CsoKit.Tests/DisableTestParallelization.cs -dfd64ca21cee7a987f1c0a4b9484f1a52ef70c4ddbde495773536aa540c64848 tests/CsoKit.Tests/Fixtures/ContainerFixtures.cs -47ca9293a7f2c1310817a3b04934be38e3a0594d4b9b7ad6c7efa91237340400 tests/CsoKit.Tests/Formats/CorruptContainerRefusalTests.cs -fb35e979ad8dae9fcad8e1371a4bda1acbcae625f6eb0fdd8191d27306d9006f tests/CsoKit.Tests/Formats/Cso/ContainerDeepVerifierTests.cs -fb3b6569fb422e32b059407b2c4e27298ff0e026e83b88fde4c4361905d31673 tests/CsoKit.Tests/Formats/Cso/CsoCliContractTests.cs -757a2bea714febfc40d6a0298ead8fa5a3832ac7068a49a3f4f55eb77aa65979 tests/CsoKit.Tests/Formats/Cso/CsoCompressJsonContractTests.cs -23a249fbd5cac8150890c8a17e0916b032a2aff53ea6ffadcbfe0bb3504c4cfb tests/CsoKit.Tests/Formats/Cso/CsoCompressionDecisionTests.cs -2a58dc3a35ccfcc0033acac35c9ddfed295f3aaa807eb459d74dbbb44867c411 tests/CsoKit.Tests/Formats/Cso/CsoCompressionProfilePolicyTests.cs -ce89dcc30b708660acdd2fcb848763489429e17f15cbed9dacd618b18b1da6d4 tests/CsoKit.Tests/Formats/Cso/CsoCompressorTests.cs -6dee7e8ec82045bae0c4dee7bde702f813f2df38df893fb9542c87e24af845c0 tests/CsoKit.Tests/Formats/Cso/CsoDecompressorCancellationTests.cs -737daf770a1dd62b49c97a581136c4966d5fcb33d98194d6d13c2d581238c1ed tests/CsoKit.Tests/Formats/Cso/CsoDecompressorTests.cs -7834130ab8b95e8e9ba615bec0f35b66478468341a84b71ad5ad5bac7e182666 tests/CsoKit.Tests/Formats/Cso/CsoDeepVerifierTests.cs -00881a7d6ce134b996272eaa600ef3733e1fd02c5fe62e9299b46baaa142eb7e tests/CsoKit.Tests/Formats/Cso/CsoDiskSpacePreflightTests.cs -13d11e679c9d6414fcc86648c71cb91f64956890ce9074f5891f848fd6e71b6d tests/CsoKit.Tests/Formats/Cso/CsoFileNamePolicyTests.cs -0c61a300b47d02a01d3a1cfea42688c9ad02e34dd29afbb6670a67463bfc52e2 tests/CsoKit.Tests/Formats/Cso/CsoHeaderReaderTests.cs -0fdf4a23ed531618a50f8b44375b069c84139f4c61025b12c11402f3ca5d7157 tests/CsoKit.Tests/Formats/Cso/CsoIndexReaderTests.cs -73a572cbcd9c3c44310984726500ea6f7636878affb5cda8b3bdc65db080f147 tests/CsoKit.Tests/Formats/Cso/CsoIndexShiftPolicyTests.cs -45f2ca31f4e39cf9de95e8159414ce6c75019b5b53d1a1584f716cd70862e44a tests/CsoKit.Tests/Formats/Cso/CsoMeasureEstimatorTests.cs -38e6d0022fb21de071f927cd9af3b7ae30e78c8c8f77f4923089869df2469e9e tests/CsoKit.Tests/Formats/Cso/CsoOutputPathPolicyTests.cs -8d1f8a6755989e794c30a03f8a0e16c6ce1eef3cf2d4c592bca89df813aaffd2 tests/CsoKit.Tests/Formats/Cso/CsoOutputSafetyPolicyTests.cs -145aac24824ade0f6dda03d0af1fc8ea8aa696120f1dd19d4b874b91583ff8ef tests/CsoKit.Tests/Formats/Cso/CsoRepairerTests.cs -9dd9c5838e99786a594a842f4d402e33c7913da746932773f0ac7cfd6405f436 tests/CsoKit.Tests/Formats/Cso/CsoSectorEngineFoundationTests.cs -52959792636d55a5f73f7acf2ccc51f3a6dd256ddd432335bb35b0c27ec079cc tests/CsoKit.Tests/Formats/Cso/CsoTestFileFactory.cs -58e1c239b4a8ec88771eed592c11895ba24eeef7d987ce6317f8010e74b5db49 tests/CsoKit.Tests/Formats/Cso/CsoTrialEngineTests.cs -7e16af7a03dfe8fd7a48cd4f510d510b373ccf144b8edde4314ab4c1dfc9ca15 tests/CsoKit.Tests/Formats/Cso/CsoTrialPlannerTests.cs -81e918e4aa3d91b9406924bb807f39e916f45f40d264d86acf8c03a17c7e7cd2 tests/CsoKit.Tests/Formats/Cso/CsoVerifierTests.cs -7cf886e0db62b65f8fa5f35b3de45c36888da1758430508416613be821a4ab64 tests/CsoKit.Tests/Formats/Cso/DeepVerificationCancellationTests.cs -21a156c9493835f6f38d504e1d9c19933eeefb7e7591163f9c21435f3dcdd44d tests/CsoKit.Tests/Formats/DiscImage/FormatDetectorTests.cs -bf4d9e90e6dcefc3378d22f120503827f54fd562c69d370b7d14179aea5d3662 tests/CsoKit.Tests/Formats/GoldenContainerTests.cs -7e2a87d0277ac7ab06f315fad1669121146c51f95f0a7c041aa27dc7b63ebdac tests/CsoKit.Tests/Formats/Iso/IsoAlignmentPolicyTests.cs -14be7a5250869cd68c5df30118a27335b76f484904a347b14a4939688417a307 tests/CsoKit.Tests/Formats/Iso/PspIsoValidatorTests.cs -df0137f94380f984dda8ae147efc6f0c48eed2b20613baae07009991d7bcc392 tests/CsoKit.Tests/Formats/PspIsoFixtureTests.cs -62d097d1d212ff8e1497a8685a851887640a2cedf771db345d08923dafa6a604 tests/CsoKit.Tests/Formats/RepairGoldenFixtureTests.cs -8bf025bed192f5d81767aa91d591b1ec5f2c27ae617ecaacabf37f7c9c2d759b tests/CsoKit.Tests/Native/NativeCsoRuntimeTests.cs -ba99b4ca112cd18d2dba3ed8d63d80a51a780362745f41e6651f87c458350e0b tests/CsoKit.Tests/Native/NativeLibrarySearchPolicyTests.cs diff --git a/SOURCE_FILES.txt b/SOURCE_FILES.txt deleted file mode 100644 index d1e02e0..0000000 --- a/SOURCE_FILES.txt +++ /dev/null @@ -1,259 +0,0 @@ -.gitattributes -.github/workflows/ci.yml -.github/workflows/release.yml -.gitignore -CHANGES.md -CONTRIBUTING.md -CsoKit.slnx -Directory.Build.props -LICENSE.txt -README.md -RELEASE_NOTES.md -THIRD_PARTY_NOTICES.md -VERSION -docs/CLI.md -docs/HARDENING_IMPLEMENTATION_REPORT.md -docs/NATIVE_BUILD.md -docs/README.md -docs/SECURITY_HARDENING.md -docs/archive/CHANGELOG_FIX_NOTES.md -docs/archive/R1_ARCHITECTURE_REPAIR.md -docs/archive/R3C_RELEASE_HARDENING.md -docs/archive/R3D_BENCHMARK_TRUTH.md -docs/archive/R3E_REAL_CORPUS_EVIDENCE.md -docs/archive/RELEASE_0_5_0_SCORECARD.md -docs/archive/RELEASE_SCORECARD.md -docs/release/RELEASE_0_6_0_GATE.md -native/CsoKit.Native/CMakeLists.txt -native/CsoKit.Native/include/csokit_native.h -native/CsoKit.Native/include/csokit_version.h.in -native/CsoKit.Native/src/csokit_native.cpp -native/third_party/zopfli/COPYING -native/third_party/zopfli/README -native/third_party/zopfli/src/zopfli/blocksplitter.c -native/third_party/zopfli/src/zopfli/blocksplitter.h -native/third_party/zopfli/src/zopfli/cache.c -native/third_party/zopfli/src/zopfli/cache.h -native/third_party/zopfli/src/zopfli/deflate.c -native/third_party/zopfli/src/zopfli/deflate.h -native/third_party/zopfli/src/zopfli/gzip_container.c -native/third_party/zopfli/src/zopfli/gzip_container.h -native/third_party/zopfli/src/zopfli/hash.c -native/third_party/zopfli/src/zopfli/hash.h -native/third_party/zopfli/src/zopfli/katajainen.c -native/third_party/zopfli/src/zopfli/katajainen.h -native/third_party/zopfli/src/zopfli/lz77.c -native/third_party/zopfli/src/zopfli/lz77.h -native/third_party/zopfli/src/zopfli/squeeze.c -native/third_party/zopfli/src/zopfli/squeeze.h -native/third_party/zopfli/src/zopfli/symbols.h -native/third_party/zopfli/src/zopfli/tree.c -native/third_party/zopfli/src/zopfli/tree.h -native/third_party/zopfli/src/zopfli/util.c -native/third_party/zopfli/src/zopfli/util.h -native/third_party/zopfli/src/zopfli/zlib_container.c -native/third_party/zopfli/src/zopfli/zlib_container.h -native/third_party/zopfli/src/zopfli/zopfli.h -native/third_party/zopfli/src/zopfli/zopfli_bin.c -native/third_party/zopfli/src/zopfli/zopfli_lib.c -scripts/Build-Native.ps1 -scripts/OutputFileNamePolicy.ps1 -scripts/Publish-Release.ps1 -scripts/Publish-SourcePackage.ps1 -scripts/Remove-Utf8Bom.ps1 -scripts/Run-BenchmarkTruthLayer.ps1 -scripts/Run-FinalReleaseGate.ps1 -scripts/Run-OfficialReleaseGate.ps1 -scripts/Run-ProfileRoundtripMatrix.ps1 -scripts/Run-PublishedExeSmoke.ps1 -scripts/Run-RealLocalCorpusGate.ps1 -scripts/Run-ReleaseGate.ps1 -scripts/Run-RoundtripGate.ps1 -scripts/Test-RepoTextEncoding.ps1 -scripts/Verify-Hardening.ps1 -scripts/Verify-Release.ps1 -src/CsoKit.App/App.xaml -src/CsoKit.App/App.xaml.cs -src/CsoKit.App/Assets/Icons/advanced_key.png -src/CsoKit.App/Assets/Icons/csokit.ico -src/CsoKit.App/Assets/Icons/csokit_32.png -src/CsoKit.App/Assets/Icons/status_error.png -src/CsoKit.App/Assets/Icons/status_success.png -src/CsoKit.App/CsoKit.App.csproj -src/CsoKit.App/Localization/ArabicUiText.cs -src/CsoKit.App/MainWindow.xaml -src/CsoKit.App/MainWindow.xaml.cs -src/CsoKit.App/Models/UiLogEntry.cs -src/CsoKit.App/Models/UiOperationKind.cs -src/CsoKit.App/Models/UiTaskItem.cs -src/CsoKit.App/Properties/AssemblyInfo.cs -src/CsoKit.App/Services/OperationReportService.cs -src/CsoKit.App/ViewModels/MainWindowViewModel.Operations.cs -src/CsoKit.App/ViewModels/MainWindowViewModel.cs -src/CsoKit.App/ViewModels/OperationSummaryViewModel.cs -src/CsoKit.Application/CsoKit.Application.csproj -src/CsoKit.Application/CsoOperationData.cs -src/CsoKit.Application/CsoOperationDetail.cs -src/CsoKit.Application/CsoOperationDetailsBuilder.cs -src/CsoKit.Application/CsoOperationResult.cs -src/CsoKit.Application/CsoOperationService.Verification.cs -src/CsoKit.Application/CsoOperationService.cs -src/CsoKit.Cli/CliExitCodes.cs -src/CsoKit.Cli/Commands/AnalyzeCommand.cs -src/CsoKit.Cli/Commands/CodecsCommand.cs -src/CsoKit.Cli/Commands/CompressCommand.cs -src/CsoKit.Cli/Commands/CsoCommandDispatcher.cs -src/CsoKit.Cli/Commands/CsoCommandError.cs -src/CsoKit.Cli/Commands/CsoCompressJsonContract.cs -src/CsoKit.Cli/Commands/CsoProfileOutput.cs -src/CsoKit.Cli/Commands/DecompressCommand.cs -src/CsoKit.Cli/Commands/DetectCommand.cs -src/CsoKit.Cli/Commands/InfoCommand.cs -src/CsoKit.Cli/Commands/JsonConsole.cs -src/CsoKit.Cli/Commands/NativeInfoCommand.cs -src/CsoKit.Cli/Commands/RepairCommand.cs -src/CsoKit.Cli/Commands/VerifyCommand.cs -src/CsoKit.Cli/CsoKit.Cli.csproj -src/CsoKit.Cli/Program.cs -src/CsoKit.Core/Analysis/PspIsoAnalysisResult.cs -src/CsoKit.Core/Compression/CsoWorkerPolicy.cs -src/CsoKit.Core/Compression/Trials/CodecTrialCandidateResult.cs -src/CsoKit.Core/Compression/Trials/CodecTrialDecisionMetrics.cs -src/CsoKit.Core/Compression/Trials/CodecTrialReport.cs -src/CsoKit.Core/Compression/Trials/CodecTrialSummary.cs -src/CsoKit.Core/Compression/Trials/CodecTrialSummaryBuilder.cs -src/CsoKit.Core/CsoKit.Core.csproj -src/CsoKit.Core/Formats/Containers/BlockContainerReadException.cs -src/CsoKit.Core/Formats/Containers/BlockContainerReaderFactory.cs -src/CsoKit.Core/Formats/Containers/ContainerDeepVerifier.cs -src/CsoKit.Core/Formats/Containers/Cso1ContainerReader.cs -src/CsoKit.Core/Formats/Containers/Cso2ContainerReader.cs -src/CsoKit.Core/Formats/Containers/CsoLikeContainerReader.cs -src/CsoKit.Core/Formats/Containers/CsoLikeHeaderReader.cs -src/CsoKit.Core/Formats/Containers/DaxContainerReader.cs -src/CsoKit.Core/Formats/Containers/IBlockContainerReader.cs -src/CsoKit.Core/Formats/Containers/IsoContainerReader.cs -src/CsoKit.Core/Formats/Containers/Lz4BlockDecoder.cs -src/CsoKit.Core/Formats/Containers/ZsoContainerReader.cs -src/CsoKit.Core/Formats/Cso/Codecs/CsoCodecKind.cs -src/CsoKit.Core/Formats/Cso/Codecs/CsoCodecTrial.cs -src/CsoKit.Core/Formats/Cso/Codecs/CsoCodecTrialResult.cs -src/CsoKit.Core/Formats/Cso/Codecs/CsoTrialEngine.cs -src/CsoKit.Core/Formats/Cso/Codecs/CsoTrialPlan.cs -src/CsoKit.Core/Formats/Cso/Codecs/CsoTrialPlanner.cs -src/CsoKit.Core/Formats/Cso/Codecs/ICsoCodecTrial.cs -src/CsoKit.Core/Formats/Cso/Codecs/Managed/ManagedDeflateTrial.cs -src/CsoKit.Core/Formats/Cso/Codecs/Native/NativeLibDeflateTrial.cs -src/CsoKit.Core/Formats/Cso/Codecs/Native/NativeUnavailableTrial.cs -src/CsoKit.Core/Formats/Cso/Codecs/Native/NativeZlibTrial.cs -src/CsoKit.Core/Formats/Cso/Codecs/Native/NativeZopfliTrial.cs -src/CsoKit.Core/Formats/Cso/CompressionMethod.cs -src/CsoKit.Core/Formats/Cso/Cso1Writer.cs -src/CsoKit.Core/Formats/Cso/CsoBestCandidateSelector.cs -src/CsoKit.Core/Formats/Cso/CsoBlockReader.cs -src/CsoKit.Core/Formats/Cso/CsoCompressOptions.cs -src/CsoKit.Core/Formats/Cso/CsoCompressProgress.cs -src/CsoKit.Core/Formats/Cso/CsoCompressResult.cs -src/CsoKit.Core/Formats/Cso/CsoCompressionProfile.cs -src/CsoKit.Core/Formats/Cso/CsoCompressionProfilePolicy.cs -src/CsoKit.Core/Formats/Cso/CsoCompressionProfileSettings.cs -src/CsoKit.Core/Formats/Cso/CsoCompressionWorker.cs -src/CsoKit.Core/Formats/Cso/CsoCompressor.cs -src/CsoKit.Core/Formats/Cso/CsoConstants.cs -src/CsoKit.Core/Formats/Cso/CsoDecompressOptions.cs -src/CsoKit.Core/Formats/Cso/CsoDecompressProgress.cs -src/CsoKit.Core/Formats/Cso/CsoDecompressResult.cs -src/CsoKit.Core/Formats/Cso/CsoDecompressor.cs -src/CsoKit.Core/Formats/Cso/CsoDeepVerifier.cs -src/CsoKit.Core/Formats/Cso/CsoDeepVerifyIssue.cs -src/CsoKit.Core/Formats/Cso/CsoDeepVerifyResult.cs -src/CsoKit.Core/Formats/Cso/CsoDiskSpacePreflight.cs -src/CsoKit.Core/Formats/Cso/CsoDiskSpacePreflightResult.cs -src/CsoKit.Core/Formats/Cso/CsoFileNamePolicy.cs -src/CsoKit.Core/Formats/Cso/CsoHeader.cs -src/CsoKit.Core/Formats/Cso/CsoHeaderReadResult.cs -src/CsoKit.Core/Formats/Cso/CsoHeaderReader.cs -src/CsoKit.Core/Formats/Cso/CsoIndexBuilder.cs -src/CsoKit.Core/Formats/Cso/CsoIndexEntry.cs -src/CsoKit.Core/Formats/Cso/CsoIndexReadResult.cs -src/CsoKit.Core/Formats/Cso/CsoIndexReader.cs -src/CsoKit.Core/Formats/Cso/CsoIndexShiftPolicy.cs -src/CsoKit.Core/Formats/Cso/CsoMeasureEstimator.cs -src/CsoKit.Core/Formats/Cso/CsoMeasureOptions.cs -src/CsoKit.Core/Formats/Cso/CsoMeasureResult.cs -src/CsoKit.Core/Formats/Cso/CsoOrderedOutputWriter.cs -src/CsoKit.Core/Formats/Cso/CsoOutputPathPolicy.cs -src/CsoKit.Core/Formats/Cso/CsoOutputSafetyPolicy.cs -src/CsoKit.Core/Formats/Cso/CsoOutputSafetyResult.cs -src/CsoKit.Core/Formats/Cso/CsoRepairMode.cs -src/CsoKit.Core/Formats/Cso/CsoRepairOptions.cs -src/CsoKit.Core/Formats/Cso/CsoRepairResult.cs -src/CsoKit.Core/Formats/Cso/CsoRepairer.cs -src/CsoKit.Core/Formats/Cso/CsoVerificationIssue.cs -src/CsoKit.Core/Formats/Cso/CsoVerificationResult.cs -src/CsoKit.Core/Formats/Cso/CsoVerifier.cs -src/CsoKit.Core/Formats/Cso/RawDeflateVerifier.cs -src/CsoKit.Core/Formats/Cso/SectorJob.cs -src/CsoKit.Core/Formats/Cso/SectorResult.cs -src/CsoKit.Core/Formats/DiscImage/DetectedDiscFormat.cs -src/CsoKit.Core/Formats/DiscImage/FormatDetectionResult.cs -src/CsoKit.Core/Formats/DiscImage/FormatDetector.cs -src/CsoKit.Core/Formats/Iso/Iso9660Entry.cs -src/CsoKit.Core/Formats/Iso/Iso9660Reader.cs -src/CsoKit.Core/Formats/Iso/IsoAlignmentPolicy.cs -src/CsoKit.Core/Formats/Iso/IsoAlignmentResult.cs -src/CsoKit.Core/Formats/Iso/PspIsoValidationIssue.cs -src/CsoKit.Core/Formats/Iso/PspIsoValidationResult.cs -src/CsoKit.Core/Formats/Iso/PspIsoValidator.cs -src/CsoKit.Core/Formats/Psp/PspDiscIdentity.cs -src/CsoKit.Core/Formats/Psp/PspParamSfoReader.cs -src/CsoKit.Core/Native/NativeCsoBackend.cs -src/CsoKit.Core/Native/NativeCsoCapabilities.cs -src/CsoKit.Core/Native/NativeCsoRawCodec.cs -src/CsoKit.Core/Native/NativeCsoRuntime.cs -src/CsoKit.Core/Native/NativeCsoRuntimeInfo.cs -src/CsoKit.Core/Properties/AssemblyInfo.cs -src/CsoKit.Core/Repair/RepairMode.cs -src/CsoKit.Core/Repair/RepairPlan.cs -src/CsoKit.Core/Repair/StreamingRepairService.cs -tests/CsoKit.App.Tests/CsoKit.App.Tests.csproj -tests/CsoKit.App.Tests/OperationReportServiceTests.cs -tests/CsoKit.Tests/Application/CsoOperationFileNamePolicyTests.cs -tests/CsoKit.Tests/Application/CsoOperationResultTests.cs -tests/CsoKit.Tests/Compression/CsoWorkerPolicyTests.cs -tests/CsoKit.Tests/CsoKit.Tests.csproj -tests/CsoKit.Tests/DisableTestParallelization.cs -tests/CsoKit.Tests/Fixtures/ContainerFixtures.cs -tests/CsoKit.Tests/Formats/CorruptContainerRefusalTests.cs -tests/CsoKit.Tests/Formats/Cso/ContainerDeepVerifierTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoCliContractTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoCompressJsonContractTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoCompressionDecisionTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoCompressionProfilePolicyTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoCompressorTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoDecompressorCancellationTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoDecompressorTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoDeepVerifierTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoDiskSpacePreflightTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoFileNamePolicyTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoHeaderReaderTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoIndexReaderTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoIndexShiftPolicyTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoMeasureEstimatorTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoOutputPathPolicyTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoOutputSafetyPolicyTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoRepairerTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoSectorEngineFoundationTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoTestFileFactory.cs -tests/CsoKit.Tests/Formats/Cso/CsoTrialEngineTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoTrialPlannerTests.cs -tests/CsoKit.Tests/Formats/Cso/CsoVerifierTests.cs -tests/CsoKit.Tests/Formats/Cso/DeepVerificationCancellationTests.cs -tests/CsoKit.Tests/Formats/DiscImage/FormatDetectorTests.cs -tests/CsoKit.Tests/Formats/GoldenContainerTests.cs -tests/CsoKit.Tests/Formats/Iso/IsoAlignmentPolicyTests.cs -tests/CsoKit.Tests/Formats/Iso/PspIsoValidatorTests.cs -tests/CsoKit.Tests/Formats/PspIsoFixtureTests.cs -tests/CsoKit.Tests/Formats/RepairGoldenFixtureTests.cs -tests/CsoKit.Tests/Native/NativeCsoRuntimeTests.cs -tests/CsoKit.Tests/Native/NativeLibrarySearchPolicyTests.cs diff --git a/docs/CLI.md b/docs/CLI.md deleted file mode 100644 index cb761a0..0000000 --- a/docs/CLI.md +++ /dev/null @@ -1,223 +0,0 @@ -# CsoKit CLI Reference - -This is the command-line reference for `csokit.exe`. - -The desktop app is the easier path for normal use. The CLI is for scripting, automation, diagnostics, and cases where you want exact control over compression, repair, or verification. - -## Start here - -Print help: - - .\csokit.exe --help - -Check the installed version: - - .\csokit.exe --version - -Check whether the native backend is available: - - .\csokit.exe native-info - -List available codecs: - - .\csokit.exe codecs - -## Inspect a file - -Show CSO metadata: - - .\csokit.exe info ".\game.cso" - -Detect the input format before doing anything else: - - .\csokit.exe detect ".\game.iso" - -JSON is useful when another script needs to read the result: - - .\csokit.exe detect ".\game.cso" --json - -Detected formats include ISO, CSO1, CSO2, ZSO, DAX, and unknown input. - -## Analyze a PSP ISO - -Analyze checks PSP ISO structure without changing the file. - - .\csokit.exe analyze ".\game.iso" --psp - -For scripts: - - .\csokit.exe analyze ".\game.iso" --psp --json - -Run this before compression if you want a quick sanity check. - -## Verify CSO files - -Basic verification checks the container structure: - - .\csokit.exe verify ".\game.cso" - -Deep verification reads compressed blocks and validates more of the file: - - .\csokit.exe verify ".\game.cso" --deep - -Add SHA256 when you need a stable hash for records or comparison: - - .\csokit.exe verify ".\game.cso" --deep --sha256 - -Machine-readable result: - - .\csokit.exe verify ".\game.cso" --deep --sha256 --json - -## Compress ISO to CSO - -Default compression writes a CSO next to the ISO: - - .\csokit.exe compress ".\game.iso" - -Set the output path when you need a specific name: - - .\csokit.exe compress ".\game.iso" -o ".\game.cso" - -Overwrite only when you mean it: - - .\csokit.exe compress ".\game.iso" -o ".\game.cso" --force - -Estimate output size without writing a CSO: - - .\csokit.exe compress ".\game.iso" --measure - -For automation: - - .\csokit.exe compress ".\game.iso" --profile fast --json - -## Profiles - -Available profiles: - - game-safe - compat - fast - smallest - archive-smallest - -`game-safe` is the default. It writes CSO1, keeps the default 2048-byte block size, uses raw Deflate candidates, and deep-verifies the output. - -`fast` is the quick path. - -`smallest` tries harder candidates. It still does not enable Zopfli unless you ask for it. - -`archive-smallest` is for experiments where size matters more than broad compatibility. - -Pick a profile: - - .\csokit.exe compress ".\game.iso" --profile fast - -Shortcut: - - .\csokit.exe compress ".\game.iso" --fast - -Do not combine `--fast` with another explicit profile. Pick one. - -## Compression tuning - -Threads: - - .\csokit.exe compress ".\game.iso" --threads 8 - -Block size: - - .\csokit.exe compress ".\game.iso" --block 16K - -Optional Zopfli trials: - - .\csokit.exe compress ".\game.iso" --zopfli - -Codec winner report: - - .\csokit.exe compress ".\game.iso" --codec-report - -Block size accepts raw bytes, `K`, or `M`. It must be at least 2048 and a power of two. Larger blocks can improve compression, but they may hurt compatibility or random-read behavior. For PSP safety, 2048 is still the sensible default. - -## Decompress CSO to ISO - -Default output goes next to the CSO: - - .\csokit.exe decompress ".\game.cso" - -Choose an output path: - - .\csokit.exe decompress ".\game.cso" -o ".\game.iso" - -Overwrite intentionally: - - .\csokit.exe decompress ".\game.cso" -o ".\game.iso" --force - -## Repair and normalize - -Repair is conservative. It rebuilds readable input into game-safe CSO1, but it does not invent missing data. - - .\csokit.exe repair ".\game.cso" -o ".\fixed.cso" --profile game-safe --deep-verify - -Readable input can include ISO, CSO1, ZSO, DAX, and supported CSO2. Output is CSO1 by default. - -If a compressed block is corrupt or the source is incomplete, the command fails with a diagnosis such as `ReDumpRequired`. Good. A broken game should not become a fake "fixed" file. - -Padding a non-2048-aligned ISO only happens when explicit repair behavior is requested. - -## Output naming - -The output base name must contain 2 to 10 characters; the extension is not counted. If the default output already exists, CsoKit uses a short numbered suffix while preserving the limit: - - game.cso - game-2.cso - game-3.cso - -Long automatic names are shortened to ten characters, and one-character names are padded to two characters. With `-o`, the destination folder must already exist and the same length rule applies. - -## Native backend - -Release packages include: - - CsoKit.Native.dll - -Keep it next to the executables. - -The native backend adds zlib and libdeflate raw-Deflate candidates. Managed Deflate remains the fallback. Zopfli is native-only and opt-in through `--zopfli`. - -Quick check: - - .\csokit.exe native-info - -## JSON output - -Add `--json` when another program needs structured output. - -Examples: - - .\csokit.exe verify ".\game.cso" --json - .\csokit.exe verify ".\game.cso" --deep --sha256 --json - .\csokit.exe compress ".\game.iso" --measure --profile smallest --json - -Compression and measure JSON include `schemaVersion`, `command`, `mode`, `success`, `options`, `metrics`, and `error` when the command fails. - -Profile object example: - - { - "profile": { - "name": "smallest", - "fast": false, - "level": 9 - } - } - -Invalid profile values return a clear argument error. Conflicting profile options use the same contract in JSON mode and a short message in text mode. - -## Checksums - -Release packages include `SHA256SUMS.txt`. - -Use it when you want to confirm the downloaded files are unchanged. - -## Third-party notices - -`THIRD_PARTY_NOTICES.md` lists native compression components and licenses, including Zopfli, zlib, and libdeflate. \ No newline at end of file diff --git a/docs/HARDENING_IMPLEMENTATION_REPORT.md b/docs/HARDENING_IMPLEMENTATION_REPORT.md deleted file mode 100644 index 1fa4750..0000000 --- a/docs/HARDENING_IMPLEMENTATION_REPORT.md +++ /dev/null @@ -1,145 +0,0 @@ -# CsoKit hardening implementation report - -Date: 2026-08-02 -Version source: `VERSION` (`0.6.0`) - -## Scope - -This change set addresses the security and architecture findings covering native DLL loading, cancellation, compression worker bounds, ABI enforcement, native integration tests, application-layer boundaries, WPF decomposition, and centralized versioning. - -## Implemented changes - -### Native boundary - -- Production native resolution is restricted to `AppContext.BaseDirectory`. -- Ancestor and `artifacts` probing requires the explicit `CSOKIT_NATIVE_DEV_SEARCH=1` development switch. -- Failure to find an approved library is fail-closed and does not fall back to the platform DLL search path. -- Optional SHA-256 enforcement is available through `CSOKIT_NATIVE_SHA256`. -- Managed/native ABI compatibility is fixed at ABI 2 and validated before every codec path can become available. - -### Cancellation and final output promotion - -- Cancellation tokens now flow through container deep verification, CSO deep verification, repair, CLI repair, CLI deep verify, and WPF operations. -- Block loops check cancellation between blocks. -- Compression and CSO writing check cancellation immediately before final `File.Move` promotion. -- WPF now exposes an active Stop button while an operation is running. -- `repair` and deep `verify` handle Ctrl+C and return exit code 130. - -### Compression resource policy - -- `CsoWorkerPolicy` centralizes default, configured, and absolute worker limits. -- The hard ceiling is 64 workers; the operational ceiling is processor-scaled or reduced with `CSOKIT_MAX_WORKERS`. -- Core, CLI, and WPF use the same validation. -- Queue capacity uses checked bounded arithmetic. - -### Native CI and published-artifact validation - -- CI builds the native backend before managed tests. -- Native integration tests fail when the DLL or mandatory capabilities are missing. -- Tests exercise zlib, libdeflate, and Zopfli raw-deflate/inflate round trips. -- Release publishing stages the actual DLL beside the published executable and performs a real published CLI ISO → CSO → ISO SHA-256 round trip. - -### Application boundary and WPF decomposition - -- Added `CsoKit.Application` as the use-case boundary between CLI/WPF and Core. -- Centralized container reader creation in `BlockContainerReaderFactory`. -- CLI no longer references `CsoKit.Core` as a project and no longer instantiates compressor, repair, shallow verifier, or deep verifier implementations directly. -- Application results expose typed paths, format, byte metrics, error code, operation DTOs, and structured detail records. -- Typed detail records are now the source of rendered `Details`; the former free-text detail parser was removed. -- WPF no longer parses English result text to recover sizes, savings, or report structure. -- Operation report writing was extracted from the ViewModel. -- MainWindowViewModel operation execution was split into a separate partial file. -- Added a Windows test project for report rendering outside a live WPF window. - -### Version source - -- Added root `VERSION` and `Directory.Build.props`. -- .NET projects read one managed version source. -- CMake reads the same file and generates native version/ABI macros. -- Publish and verification scripts default to the root version instead of duplicated literals. - -## Tests added or strengthened - -- Worker policy minimum, maximum, environment override, and compressor rejection. -- Deep verification cancellation before input and between blocks. -- Production native search policy. -- Mandatory native ABI/capability checks. -- zlib/libdeflate/Zopfli native round trips. -- Typed operation result rendering without reverse-parsing free text. -- Arabic WPF report rendering from structured operation details. - -There are 150 `[Fact]`/`[Theory]` declarations in the source tree after this change. Runtime case counts can be higher because theories expand into multiple cases. - -## Validation performed in the editing environment - -- XML/XAML/CSProj/Solution parsing: PASS. -- GitHub Actions YAML parsing: PASS. -- C# delimiter and lexical structural scan across 168 files: PASS. -- Project and solution reference existence: PASS. -- WPF event handler linkage scan: PASS. -- Stale WPF service symbol scan: PASS. -- Dependency direction scan: PASS. -- `git diff --check`: PASS. -- UI direction attributes: unchanged. - -## Follow-up correction after external build review - -- Fixed `CS0165` in CLI thread parsing by separating integer parsing from worker-policy validation. -- Fixed the WPF namespace collision by deriving `App` explicitly from `System.Windows.Application`. -- Removed the CLI project reference to Core and routed long-running/state-changing commands through Application DTOs. -- Removed `CsoOperationDetailParser`; structured detail records now generate the compatibility text view. -- Added architecture source guards to `Verify-Hardening.ps1`. - - -## Follow-up correction after v2 Windows build review - -- Added the explicit `System.IO` imports required by the WPF report and operation partial files. -- Added the explicit `CsoKit.App.Localization` import required by the split ViewModel partial. -- Separated WPF worker-count parsing from policy validation to eliminate the same definite-assignment failure already fixed in CLI. -- Changed native round-trip fixtures to use deliberately compressible data for every zlib strategy. -- Added a separate native integration theory proving that expansion-prone Huffman-only and RLE candidates are rejected cleanly when the native layer reports `OUTPUT_TOO_SMALL`, with no partial output exposed. - -## Follow-up correction after v4 Windows CLI review - -- Reordered `compress`, `decompress`, and `repair` handling so early validation failures are processed before typed operation data is required. -- Successful operations still require their typed DTO and fail as an internal contract error if it is missing. -- JSON output now preserves the common failure envelope when operation data is absent; command metrics are serialized as `null`. -- Changed the general JSON failure test to use a valid short output name so it continues testing the intended missing-input path. -- Added text and JSON boundary coverage for one-character and eleven-character output names across all three state-changing commands. -- Replaced the repair suffix assertion with `Assert.EndsWith`. - -## Runtime validation limitation - -The editing environment did not contain the .NET SDK or PowerShell and could not download them. Managed builds, WPF compilation, native Windows compilation, and the runtime test suite were therefore not executed independently here. - -Run the following on Windows before merge or release: - -```powershell -.\scripts\Verify-Hardening.ps1 -Configuration Release -``` - -The script performs restore, native build, Debug/Release managed builds, native-backed tests, release publishing, and release verification. - -## Commit suggestion - -`fix(security): harden native loading, cancellation, and application boundaries` -## Output file-name length policy - -- Output base names are validated at the Application boundary and must contain 2 to 10 user-visible characters; the extension is not counted. -- Automatic compression/decompression names are normalized into that range. -- Repair suggestions use a short `-r` suffix and numbered collision suffixes remain within ten characters. -- Input file names are not restricted, so existing game images with long names remain usable. -- Unicode text elements are counted instead of raw UTF-16 code units. - - -## Release-script filename-policy hardening - -The release gates now create artifacts in isolated work directories and use short fixed filenames. `scripts/OutputFileNamePolicy.ps1` counts Unicode text elements using `System.Globalization.StringInfo`, matching the Core filename policy. The main hardening gate verifies that all release scripts load and invoke this guard, and checks literal `.cso`/`.iso` names for the 2–10 rule. - - -## v7 published executable smoke integration - -- Updated the exact help contract expected by `Run-PublishedExeSmoke.ps1` to include CSO, ZSO, and DAX verification inputs. -- The smoke gate now builds the Release native backend and copies `CsoKit.Native.dll` beside the published CLI before `native-info`. -- `Verify-Hardening.ps1` now executes the standalone smoke with real-ISO gates skipped; full real-profile roundtrips remain available through the dedicated invocation. -- Source guards require the current help contract, native build/staging, and main-gate integration. diff --git a/docs/NATIVE_BUILD.md b/docs/NATIVE_BUILD.md deleted file mode 100644 index fcc215c..0000000 --- a/docs/NATIVE_BUILD.md +++ /dev/null @@ -1,58 +0,0 @@ -# Native Build Notes - -CsoKit does not require the native backend to function. - -The managed path stays available for detect, analyze, verify, repair, decompress, and compress. Native code only adds extra raw-Deflate candidates such as zlib, libdeflate, and optional Zopfli. - -If the native DLL is missing, the CLI should say so clearly and keep working. No fake availability. No silent fallback that pretends native compression is active. - -## Build the native backend - -Run this when you want the full release layout or when you are testing native codec behavior: - - .\scripts\Build-Native.ps1 -Configuration Release -Platform x64 - -Then check what the CLI can actually see: - - .\csokit.exe native-info - -The report should be honest about zlib, libdeflate, Zopfli, and anything unavailable. - -## Online dependency resolution - -The first native configure may need network access. CMake can resolve dependencies such as zlib or libdeflate through FetchContent or an equivalent setup. - -If that fails because the machine is offline, do not patch around it by hardcoding success. Use the managed-only path instead. Simple. - -## Managed-only workflow - -This is enough for normal .NET validation when native dependencies are not available: - - dotnet build CsoKit.slnx --no-restore - dotnet test CsoKit.slnx --no-build --no-restore - .\csokit.exe native-info - -Managed Deflate, container decoding, PSP ISO analysis, JSON diagnostics, and repair safety should still work without CsoKit.Native.dll. - -## Release expectation - -Release packages should include: - - CsoKit.Native.dll - -Keep it next to: - - csokit.exe - CsoKit.App.exe - -If native-info says unavailable in a release package, check the published ZIP layout first. Most native problems are packaging problems, not compression bugs. -## Runtime loading policy - -Release builds must place `CsoKit.Native.dll` beside the executable. Production never -searches the current directory or repository `artifacts` paths. Repository probing is a -developer-only opt-in through `CSOKIT_NATIVE_DEV_SEARCH=1`; optionally constrain the -accepted DLL with `CSOKIT_NATIVE_SHA256`. - -The managed runtime rejects any library whose reported ABI is not exactly `2` before a -codec entry point is used. CI and release gates must perform native round-trip tests, not -capability discovery alone. diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index b0fcc40..0000000 --- a/docs/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Documentation - -Start here when the main README is too short. - -## User docs - -- [CLI reference](CLI.md) — commands, profiles, JSON output, repair behavior, and native options. - -## Build and release - -- [Native build notes](NATIVE_BUILD.md) — when the native backend matters, and when managed-only is enough. -- [0.6.0 release gate](release/RELEASE_0_6_0_GATE.md) — release validation notes for v0.6.0. - -## Engineering archive - -Kept for history and audit trail. Most users will not need these. - -- [Detailed fix notes](archive/CHANGELOG_FIX_NOTES.md) -- [Architecture repair notes](archive/R1_ARCHITECTURE_REPAIR.md) -- [R3-C release hardening](archive/R3C_RELEASE_HARDENING.md) -- [Benchmark truth layer](archive/R3D_BENCHMARK_TRUTH.md) -- [Real corpus evidence](archive/R3E_REAL_CORPUS_EVIDENCE.md) -- [0.5.0 scorecard](archive/RELEASE_0_5_0_SCORECARD.md) -- [Release scorecard](archive/RELEASE_SCORECARD.md) \ No newline at end of file diff --git a/docs/SECURITY_HARDENING.md b/docs/SECURITY_HARDENING.md deleted file mode 100644 index 28720e0..0000000 --- a/docs/SECURITY_HARDENING.md +++ /dev/null @@ -1,57 +0,0 @@ -# Security and reliability hardening - -This document records the hardening applied after the 0.6.0 architecture review. - -## Native runtime boundary - -Production resolves the native library only from `AppContext.BaseDirectory`. -Repository `artifacts` directories are ignored unless the developer explicitly sets: - -```text -CSOKIT_NATIVE_DEV_SEARCH=1 -``` - -Development search should be combined with a pinned SHA-256 value: - -```text -CSOKIT_NATIVE_SHA256=<64 hexadecimal characters> -``` - -The managed runtime requires native ABI `2` before any codec call. An absent, invalid, -hash-mismatched, or ABI-incompatible library falls back to the managed backend. - -## Cancellation - -Cancellation now crosses CLI, WPF, compression, repair, and deep-verification layers. -Long block loops check the token between blocks. Writers check cancellation again after -verification and immediately before promoting a temporary file to its final path. - -The WPF Stop action cancels the active operation. The CLI handles `Ctrl+C` for repair -and deep verification and returns exit code `130` for canceled operations. - -## Compression parallelism - -`CsoWorkerPolicy` is the single authority for worker-count validation and queue capacity. -The default is bounded by processor count, the absolute hard limit is 64, and an operator -may lower the effective maximum with `CSOKIT_MAX_WORKERS`. Queue-capacity arithmetic is checked. - -## Application boundary - -`CsoKit.Application` owns the long-running and state-changing use cases shared by CLI and WPF. -The CLI project no longer references Core directly and cannot instantiate the compressor, repairer, -or verification implementations without tripping the hardening gate. Container-reader creation is -centralized in Core. Results expose typed metrics, operation DTOs, and typed detail lines. Rendered -text is derived from those records; WPF no longer parses English result text to recover data. - -## Native release verification - -CI builds the native backend before managed tests and copies it to the test output. -Native integration tests fail when the DLL or ABI is unavailable and perform actual -raw-deflate/inflate round trips. The release publisher repeats a round trip through the -published CLI before producing the SHA-256 manifest and ZIP. - -## Version source - -The product version is stored once in the root `VERSION` file. MSBuild reads it through -`Directory.Build.props`; CMake generates native version constants from the same value; -release scripts use the same file when no explicit version is supplied. diff --git a/docs/archive/CHANGELOG_FIX_NOTES.md b/docs/archive/CHANGELOG_FIX_NOTES.md deleted file mode 100644 index 7b869c3..0000000 --- a/docs/archive/CHANGELOG_FIX_NOTES.md +++ /dev/null @@ -1,167 +0,0 @@ -# CsoKit stability fix notes - -## Release-readiness hardening - -- Add final publish native backend verification to the final release gate. -- Make release workflow tag-only to preserve signed-tag release policy. -- Add independent CsoKit compression benchmark coverage. -- Add 0.5.0 release scorecard with explicit blockers and required evidence. - -## P2-I stable release promotion - -- Promote release defaults and package metadata to the 0.5.0 stable release. -- Update GitHub Actions manual release defaults, release scripts, project versions, README, and release notes. -- Keep compression behavior unchanged. - - - - -## P2-G release notes and finalization - -- Add `RELEASE_NOTES.md` for the 0.5.0 win-x64 stable release. -- Add `scripts/Run-FinalReleaseGate.ps1` to chain release validation, published EXE smoke, release package publishing, release verification, and source package publishing. -- Include `RELEASE_NOTES.md` in the release package and SHA256 manifest. -- Make release verification require release notes and profile help text in the packaged executable. -- Use `RELEASE_NOTES.md` as the GitHub Release notes source. -- Keep compression behavior unchanged. - -## P2-F published EXE smoke - -- Add `scripts/Run-PublishedExeSmoke.ps1` to publish and test the actual `csokit.exe` output. -- Smoke-test help, version, native-info, JSON argument output, measure output, verify, compress, and decompress through the published executable. -- Run real ISO -> CSO -> ISO SHA256 checks for `smallest`, `compat`, and `fast` using the published executable. -- Keep generated smoke artifacts under `artifacts/published-exe-smoke-work` only when `-KeepArtifacts` is supplied. -- Keep compression behavior unchanged. - -This source package applies the stability fixes requested after the CSO readiness review. - - - - -## P2-E release gate consolidation - -- Add `scripts/Run-ReleaseGate.ps1` as a single local gate for pre-release validation. -- Run restore, Debug build, tests, forbidden-term scan, help smoke, and JSON argument smoke from one script. -- Chain the real roundtrip gate and profile roundtrip matrix when an input ISO is supplied. -- Add `-SkipRealIsoGates` for quick non-ISO checks, plus `-KeepArtifacts` and `-Quiet` forwarding for real ISO gates. -- Keep compression behavior unchanged. - - -## P2-D real profile roundtrip matrix - -- Add `scripts/Run-ProfileRoundtripMatrix.ps1` for real ISO -> CSO -> ISO verification across compression profiles. -- Check `smallest`, `compat`, and `fast` by default, with `-Profiles` for targeted profile runs. -- Compare restored ISO SHA256 and byte size against the original ISO for every selected profile. -- Print a final matrix with profile name, CSO size, ratio, restored ISO size, and status. -- Remove successful test artifacts by default and support `-KeepArtifacts` for manual inspection. -- Keep compression behavior unchanged. - -## P2-C profile conflict and CLI contract tests - -- Add CLI contract tests for profile help text, invalid profile values, and `--fast` conflict handling. -- Verify text and JSON argument errors use stable exit code and error fields. -- Allow `--profile fast --fast` while rejecting `--fast` with `compat` or `smallest`. -- Add a profile-name helper so conflict messages can name the resolved public profile. -- Keep compression behavior unchanged. - -## P2-B profile output polish and JSON contract - -- Add a stable JSON contract for compress write and measure output with `schemaVersion`, `options.profile`, `metrics`, and structured error fields. -- Report resolved profile information through a single profile output model: name, fast flag, and logical level. -- Improve invalid profile and conflicting profile argument messages. -- Make help and usage text read supported public profile names from one policy source. -- Add focused tests for profile JSON contract shape and supported profile text. - -## P2-A profiles foundation - -- Add first-class compression profiles for end-user workflows: `compat`, `fast`, and `smallest`. -- Keep `smallest` as the default profile and preserve the current safe CSO behavior. -- Add `--profile ` to compress and measure commands. -- Add `--fast` as a short alias for `--profile fast`. -- Route profile settings through `CsoCompressionWorker`, `CsoCompressor`, and `CsoMeasureEstimator` so write and measure paths use the same compression policy. -- Report profile, fast mode, and logical level in text and JSON output. -- Add focused tests for profile parsing and worker profile settings. - -## P1-E real roundtrip gate - -- Add `scripts/Run-RoundtripGate.ps1` for real ISO -> CSO -> ISO verification. -- Compare original and restored ISO SHA256 hashes after the roundtrip. -- Write uniquely named gate artifacts beside the input ISO and remove them after successful verification by default. -- Add `-KeepArtifacts` for manual inspection of generated CSO and restored ISO. -- Avoid overwriting existing files and avoid automatic output-folder creation in the gate script. - -## P1-D output path policy - -- Add same-folder default output naming for end-user conversion commands. -- Allow `csokit compress ` to write `.cso` beside the source file. -- Allow `csokit decompress ` to write `.iso` beside the source file. -- Avoid automatic output-folder creation. Explicit `-o` paths must point to an existing folder. -- Avoid overwriting existing files when output is auto-named. Existing targets receive ` - CsoKit Converted`, then numbered suffixes. -- Keep `--measure` write-free and output-path-free. - -## P1-C measure layer - -- Add `CsoMeasureEstimator`, `CsoMeasureOptions`, and `CsoMeasureResult` for estimating CSO output size without writing a CSO file. -- Add `csokit compress --measure` for measure-only CLI usage. -- Report original size, estimated CSO size, estimated ratio, saved/growth bytes, total blocks, compressed blocks, stored blocks, profile, fast mode, and level. -- Reuse the same sector compression worker and stored-versus-compressed selector used by the writer path so estimates track current compression behavior. -- Add focused tests to compare measure results with actual compression output. - -## P1-B compression decision split - -- Add `CsoCompressionWorker` to own per-sector raw-deflate candidate creation. -- Add `CsoBestCandidateSelector` to own the stored-versus-compressed decision. -- Keep the current compression behavior unchanged: raw-deflate is selected only when it is smaller than the original sector; otherwise the original sector is stored. -- Add focused tests for candidate selection and worker output decisions. - -## P1-A sector engine foundation - -- Add `CompressionMethod`, `SectorJob`, and `SectorResult` as the first block-pipeline data contracts. -- Add `CsoBlockReader`, `CsoIndexBuilder`, and `CsoOrderedOutputWriter` to split block reading, index construction, and ordered output writing from the compressor loop. -- Keep the current compression behavior unchanged: zlib/raw-deflate path, same store-raw decision, same ordered output flow. -- Clean remaining user-facing unsupported CSO wording to `Unsupported CSO file.` -- Add focused tests for the new sector/index foundation contracts. - -## Fixed - -- Treat legacy CSO header `version = 0` as supported alongside `version = 1`. -- Add `EffectiveHeaderSize` and use it for legacy index reading/verification so unreliable CSO `header_size` does not break valid legacy files. -- Add upper-bound validation for dangerous `block_size` and `index_shift` values. -- Make decompression output temp files unique instead of using `.tmp`, preventing accidental deletion of a user-owned sibling temp file. -- Replace output via `File.Move(..., overwrite: true)` after successful temp write instead of deleting the destination first. -- Make CLI `--version` read `AssemblyInformationalVersion` instead of hardcoding `0.4.0-beta.1`. -- Fix CLI exit-code mapping for `UnsupportedVersion`, `BlockSizeTooLarge`, `InvalidIndexShift`, and additional corrupt-index verification codes. -- Change GitHub Actions artifact upload from `actions/upload-artifact@v7` to `actions/upload-artifact@v6`. -- Add source packaging script that excludes `.git`, `.vs`, `bin`, `obj`, `artifacts`, and `TestResults`. - -## Added tests - -- CSO raw-deflate decompression roundtrip. -- Legacy CSO `version = 0` decompression roundtrip. -- High-bit uncompressed block decompression roundtrip. -- Forced overwrite decompression behavior. -- Existing `.tmp` sibling preservation. -- Legacy/unreliable CSO `header_size` behavior in header and index readers. - -## Validation note - -The editing environment used to prepare this package does not include the .NET SDK, so `dotnet build` / `dotnet test` could not be executed here. Run the normal local gates on Windows before merging: - -```powershell -dotnet restore .\CsoKit.slnx -r win-x64 -p:NuGetAudit=false -dotnet build .\CsoKit.slnx -c Debug --no-restore -p:NuGetAudit=false -dotnet test .\CsoKit.slnx -c Debug --no-build -.\scripts\Publish-Release.ps1 -.\scripts\Verify-Release.ps1 -``` - -## R1 - Architecture repair: native backend policy - -- Treat native backend support as runtime availability, ABI verification, `native-info`, and fallback infrastructure only. -- Reject the unproven native compression performance claim for 0.5.0 after measured native-runtime fast was slower and slightly larger than managed-runtime fast on the real PSP ISO. -- Do not retain native block store hints or any native compression hot-path change in production. -- Keep `CSOKIT_DISABLE_NATIVE` as an explicit diagnostic and benchmark fallback switch. -- Add `docs/R1_ARCHITECTURE_REPAIR.md` and refresh the release scorecard to separate native runtime proof from compression performance claims. - - -- Remove stale external benchmark notes so CsoKit remains fully independent. diff --git a/docs/archive/R1_ARCHITECTURE_REPAIR.md b/docs/archive/R1_ARCHITECTURE_REPAIR.md deleted file mode 100644 index 8f28b1a..0000000 --- a/docs/archive/R1_ARCHITECTURE_REPAIR.md +++ /dev/null @@ -1,38 +0,0 @@ -# R1 Architecture Repair: Native Backend Policy - -> Historical note: this document records the R1 decision before the threaded/native codec phase. Current builds include a bounded threaded compression pipeline, native zlib/libdeflate raw-Deflate candidates, and an explicit optional native Zopfli candidate path. - -R1 resolves the native-backend work as an architecture boundary, not a compression-speed feature. - -## Decision - -The production compression path remains the managed CSO compressor unless native candidates are available and selected safely. The native DLL is release-gated only for runtime availability, ABI compatibility, `native-info`, and fallback behavior. - -## Rationale - -Measured real-ISO evidence did not prove that native participation made compression faster. The managed fast profile was faster and slightly smaller in the manual native-versus-managed proof. Keeping an unproven native hint in the compression hot path would make the release harder to reason about without delivering a measured benefit. - -## Accepted R1 scope - -- Native DLL build and final publish inclusion. -- `native-info` runtime reporting. -- Managed fallback via `CSOKIT_DISABLE_NATIVE` for diagnostics and benchmarks. -- Final release gate verification that the release package loads the native backend. -- Benchmark support for comparing native-runtime and managed-runtime modes. - -## Rejected R1 scope - -- No native compression acceleration claim. -- No native block store hint in the production compression path. -- No threaded compression pipeline. -- No producer/consumer compression engine. -- No change to `smallest`, `compat`, or `fast` profile output policy. - -## Future phase boundary - -Parallel compression, pipelined I/O, and real native acceleration belong in a later phase. That phase must introduce its own gates and prove: - -- Same CSO output validity. -- SHA256 roundtrip correctness. -- Repeatable speed improvement on real ISOs. -- No regression in `smallest`/`compat` size behavior unless explicitly approved. diff --git a/docs/archive/R3C_RELEASE_HARDENING.md b/docs/archive/R3C_RELEASE_HARDENING.md deleted file mode 100644 index 19a4274..0000000 --- a/docs/archive/R3C_RELEASE_HARDENING.md +++ /dev/null @@ -1,43 +0,0 @@ -# CsoKit R3-C Release Hardening - -R3-C turns the R3-B container work into a stricter intake, verify, repair, normalize, and diagnostics pass. The project remains self-contained: no release gate, test, or script depends on external comparison tools. - -## Implemented in R3-C - -- Golden container fixtures for CSO1, CSO2, ZSO, DAX, raw ISO9660, PSP ISO structure, and corrupt refusal cases. -- Streaming container repair path: readable CSO1, CSO2, ZSO, and DAX inputs are normalized to CSO1 without writing a temporary ISO. -- Atomic repair output: the final output path is moved into place only after the temporary CSO output is complete and, for game-safe/deep verify mode, verified. -- PSP ISO identity analysis: `UMD_DATA.BIN` DISC_ID and `PSP_GAME/PARAM.SFO` metadata are read with bounded file reads. -- PARAM.SFO failures are warnings, not crashes. -- Codec trial report model for explicit `--codec-report` diagnostics. -- Unified JSON fields added across the primary CLI output paths. -- Optional real-local corpus gate that uses developer-supplied files and does not copy games into the repository. -- UTF-8 BOM cleanup scripts and text-encoding gate. -- Native build documentation for online/offline expectations. - -## Safety policy - -R3-C keeps the conservative game-safe default. It does not enable unproven codecs by default and does not claim raw compression superiority without project-local measurements. Damaged compressed blocks, truncated payloads, non-monotonic indexes, and impossible decoded sizes must fail with a clear error instead of producing a questionable output. - -## Not proven by R3-C - -R3-C does not prove every game image, every malformed dump, or every emulator-specific edge case. It does not improve FPS, graphics settings, or انتر ريزلوشن. It does not make claims about raw compression leadership against external tools without a repeatable internal benchmark. - -## Recommended local evidence - -Run the normal release gate first: - -```powershell -dotnet build CsoKit.slnx --no-restore -dotnet test CsoKit.slnx --no-build --no-restore -scripts/Run-ReleaseGate.ps1 -SkipRealIsoGates -scripts/Test-RepoTextEncoding.ps1 -``` - -Then run the optional corpus gate against a private local folder: - -```powershell -scripts/Run-RealLocalCorpusGate.ps1 -Root D:\LocalTestCorpus -Configuration Release -``` - -Use `-KeepArtifacts` only when you need to inspect temporary outputs. Do not commit local corpus files or generated artifacts. diff --git a/docs/archive/R3D_BENCHMARK_TRUTH.md b/docs/archive/R3D_BENCHMARK_TRUTH.md deleted file mode 100644 index caeebe6..0000000 --- a/docs/archive/R3D_BENCHMARK_TRUTH.md +++ /dev/null @@ -1,86 +0,0 @@ -# CsoKit R3-D Benchmark Truth - -R3-D adds a local evidence layer for compression and normalization decisions. It does not add external comparison dependencies, does not store a corpus in Git, and does not change the default game-safe CSO1 output target. - -## Engineering decision - -The project already had safe CSO1 output, deep verification, streaming normalization from readable CSO1, CSO2, ZSO, and DAX inputs, and native codec probing. The missing piece was repeatable local measurement. R3-D therefore focuses on bounded diagnostics and local reports instead of adding new output writers. - -## Benchmark Truth Layer - -Use the optional local script with developer-owned files: - -```powershell -scripts/Run-BenchmarkTruthLayer.ps1 -Root D:\LocalCsoCorpus -Profiles game-safe,fast,smallest -Configuration Release -``` - -Or run it against explicit files: - -```powershell -scripts/Run-BenchmarkTruthLayer.ps1 -InputPath D:\Corpus\game.iso,D:\Corpus\old.zso -Profiles game-safe -Configuration Release -``` - -The script writes JSON and Markdown reports to a temp folder by default. It never copies the corpus into the repository. Use `-OutputDirectory ` only when you intentionally want report files in a specific folder. Use `-KeepArtifacts` only when you need to inspect generated CSO/ISO artifacts. - -Each case reports: - -- physical input bytes and logical bytes -- CSO1 output bytes and saved percent against logical bytes -- encode or normalize milliseconds -- output deep-verify milliseconds -- decode milliseconds -- peak working-set bytes sampled from the CLI process -- profile and codec candidates -- selected codec wins and rejected reasons -- input/output logical SHA256 match -- warnings and failures - -## Codec Optimizer - -R3-D keeps game-safe conservative. The game-safe selector still prefers the smallest valid raw-deflate candidate and falls back to stored blocks when compression does not beat stored bytes. - -The fast profile now has a near-tie decision rule: when two valid candidates are very close in size, it may prefer the lower measured or estimated encode/decode cost. This is deliberately scoped to fast intent and is covered by tests. The smallest and archive-smallest profiles still prioritize size. - -Codec trial reports are now bounded: - -- `--codec-report` gathers summary counts for every block. -- `--codec-report-block-limit ` controls how many per-block reports are retained. -- `0` keeps only aggregate evidence, which is what the benchmark script uses for large local corpora. - -## Repair Diagnostics - -Repair/normalize can now emit the same codec report summary as direct ISO compression when requested. This matters because readable CSO1, CSO2, ZSO, and DAX inputs are normalized to CSO1 through the streaming writer. - -## Compatibility Evidence - -Proven in-tree: - -- deterministic fixtures for CSO1, CSO2, ZSO, DAX, raw ISO, and PSP ISO analysis -- corrupt/truncated payload refusal without trusted final output -- streaming repair to CSO1 for readable container fixtures -- deep verify and SHA256 reconstruction for supported readable containers -- bounded codec report summaries -- fast near-tie selector behavior without changing game-safe selection - -Proven only when the local benchmark script is run: - -- compression ratio and timing for a developer-supplied corpus -- profile-specific codec wins and rejected reasons on real files -- local native backend impact -- logical SHA256 roundtrip on those exact files - -Not proven: - -- every game image -- every malformed dump -- emulator-specific performance or graphics behavior -- compression leadership against other software -- new output container compatibility - -Correct support statement: - -CsoKit reads supported readable containers, rejects corruption clearly, normalizes to CSO1 game-safe output by default, verifies output when requested or required by policy, and can produce local benchmark evidence for developer-owned files. -## R3-E clarification - -After R3-E, the benchmark truth layer treats container inputs and ISO inputs differently. CSO1, CSO2, ZSO, and DAX inputs prove game-safe repair/normalization only; non-game-safe profiles on those inputs are reported as skipped because `repair` supports game-safe normalization only. Use raw ISO input when the goal is profile comparison. - diff --git a/docs/archive/R3E_REAL_CORPUS_EVIDENCE.md b/docs/archive/R3E_REAL_CORPUS_EVIDENCE.md deleted file mode 100644 index 240a5e1..0000000 --- a/docs/archive/R3E_REAL_CORPUS_EVIDENCE.md +++ /dev/null @@ -1,93 +0,0 @@ -# CsoKit R3-E Real Corpus Evidence and Deflate Backend Calibration - -R3-E keeps CsoKit scoped to PSP CSO workflows. It does not add Zstandard, LZ4, FLAC, CHD logic, emulator settings, or external executable dependencies. CSO1 remains the safe output target and the game-safe repair/normalization path remains conservative. - -## Benchmark truth corrections - -`Run-BenchmarkTruthLayer.ps1` now separates two different workflows: - -- ISO input: profile comparison is valid. The script runs `compress` for each selected profile, then verifies, decompresses, and compares SHA256. -- CSO/ZSO/DAX/CSO2 input: profile comparison is not valid unless the container is first expanded to ISO. The supported normalization path is `repair --profile game-safe`. Non-game-safe profiles are reported as `SKIP`, not `FAIL`. - -The JSON and Markdown reports now include failure-stage and skip details so a report does not hide the reason a case did not produce trusted output. Relevant fields include: - -- `stage` -- `skipped` -- `skippedReason` -- `failures[].Stage` -- `failures[].Code` -- `failures[].Message` -- `compressedBlocks` -- `storedBlocks` -- `zeroBlocks` - -A skipped case is not evidence of compression failure. It means that the requested benchmark path is not supported by the current CSO workflow. - -## PowerShell compatibility - -The benchmark process launcher no longer depends only on `ProcessStartInfo.ArgumentList`. Windows PowerShell 5.1 can run the script by falling back to a quoted `Arguments` string when `ArgumentList` is unavailable. PowerShell 7 remains supported. - -## Deflate backend calibration boundary - -R3-E does not introduce new CSO1 codecs. The supported CSO1 meaning remains raw Deflate or stored blocks according to existing CSO semantics. - -Allowed backend and decision concepts: - -- zlib/managed Deflate remains the safe baseline. -- native libdeflate remains a raw-Deflate backend candidate when available. -- Zopfli remains explicitly opt-in for slow profiles. -- stored block selection is an internal decision when compressed bytes do not beat stored bytes. -- zero-block detection is telemetry and fast-path evidence only; it is not a CSO codec tag. - -Explicitly not added: - -- no Zstandard inside CSO1 -- no LZ4 inside CSO1 -- no FLAC -- no CHD/CD/DVD/PS3 logic -- no external comparison-tool dependency -- no external executable comparison gate - -## Zero-block evidence - -Compression and repair metrics now report `zeroBlocks`. This count is based on a full scan of the block source bytes, not sampling. It is evidence for corpus analysis and future policy calibration, while preserving the existing CSO1 output semantics. - -## Correct benchmark usage - -For CSO normalization evidence: - -```powershell -scripts/Run-BenchmarkTruthLayer.ps1 ` - -Root "G:\All Console Games\PLAYSTATION Consoles\PlayStation Portable (2004)\1" ` - -Profiles game-safe,fast,smallest ` - -Configuration Release ` - -KeepArtifacts -``` - -Expected behavior: - -- `game-safe` cases run repair/normalize and should PASS when the inputs are readable. -- `fast` and `smallest` cases on CSO/ZSO/DAX/CSO2 inputs are SKIP with a reason. - -For actual profile comparison, use ISO input: - -```powershell -scripts/Run-BenchmarkTruthLayer.ps1 ` - -InputPath D:\Corpus\game.iso ` - -Profiles game-safe,fast,smallest ` - -Configuration Release ` - -KeepArtifacts -``` - -Only ISO input proves profile ratio/time differences. - -## Acceptance statement - -R3-E is successful when: - -- ReleaseGate passes. -- tests pass. -- CSO inputs produce game-safe normalization evidence and non-game-safe profile skips. -- ISO inputs produce real profile comparison evidence. -- no unsupported compression algorithm is introduced into CSO1. -- game-safe defaults remain unchanged unless later corpus evidence proves a safe improvement. diff --git a/docs/archive/RELEASE_0_5_0_SCORECARD.md b/docs/archive/RELEASE_0_5_0_SCORECARD.md deleted file mode 100644 index 43ea654..0000000 --- a/docs/archive/RELEASE_0_5_0_SCORECARD.md +++ /dev/null @@ -1,5 +0,0 @@ -# CsoKit Historical Scorecard - -This historical file is superseded by `docs/RELEASE_SCORECARD.md` for the current R3-C release-hardening state. - -Keep this file only as a compatibility pointer for older references. Current release evidence, limitations, and gates belong in the R3-C scorecard. diff --git a/docs/archive/RELEASE_SCORECARD.md b/docs/archive/RELEASE_SCORECARD.md deleted file mode 100644 index 5e9d4e8..0000000 --- a/docs/archive/RELEASE_SCORECARD.md +++ /dev/null @@ -1,48 +0,0 @@ -# CsoKit Release Scorecard — R3-D - -## Current status - -- Independence: PASS. The repository is self-contained and does not depend on external comparison tools for tests, scripts, or release gates. -- CLI coverage: PASS. Public commands remain `detect`, `analyze`, `verify`, `repair`, `decompress`, `compress`, `codecs`, and `native-info`. -- CSO1 compression safety: PASS with game-safe defaults, deep verification option, atomic output, and stored-block fallback. -- Container intake: PASS for readable CSO1, CSO2, ZSO, and DAX fixtures. -- Repair/normalize: PASS for streaming container repair to CSO1 output without a temporary ISO on the primary container path. -- Corrupt refusal: PASS by tests for truncated or corrupt payloads that must not leave final output. -- PSP ISO analysis: PASS for bounded PARAM.SFO and UMD_DATA.BIN metadata reads with warnings for missing/corrupt metadata. -- JSON diagnostics: PASS for schema versioning, stable command/success/error fields, and bounded codec report summaries. -- Benchmark truth layer: PASS as an optional local script that writes JSON and Markdown reports without storing a corpus in Git. -- Codec optimizer: PASS for bounded reports and fast-profile near-tie cost awareness; game-safe remains conservative. -- Repository hygiene: PASS when `scripts/Test-RepoTextEncoding.ps1` and the forbidden-term scan are clean. -- Native backend clarity: PASS by documentation and honest `native-info` availability reporting. - -## Proven evidence in-tree - -- Synthetic and golden fixtures are deterministic and below 1 MB. -- No copyrighted game data is stored in tests. -- CSO1, CSO2, ZSO, and DAX container readers are exercised with safe byte patterns. -- Repair tests assert streaming mode and no temporary ISO artifact. -- PARAM.SFO tests cover valid, missing, corrupt, and DISC_ID mismatch cases. -- Codec report tests assert aggregate summaries with bounded per-block retention. -- Selector tests assert that fast can prefer a much cheaper near-tie while game-safe still picks the smallest valid candidate. - -## Not proven yet - -- Broad real-world corpus quality requires the optional benchmark truth layer on privately owned files. -- Raw compression ranking is not claimed without a controlled internal benchmark. -- Native dependency availability depends on the local build/runtime environment. -- Very large CSO1 outputs that require shifted indexes remain a deliberate safety refusal. -- Additional output containers remain out of scope for the default path. - -## Final gate checklist - -```powershell -git status --short -# Run the local forbidden external-comparison hook scan before release. -scripts/Test-RepoTextEncoding.ps1 -scripts/Build-Native.ps1 -Configuration Release -Platform x64 -dotnet build CsoKit.slnx --no-restore -dotnet test CsoKit.slnx --no-build --no-restore -scripts/Run-ReleaseGate.ps1 -SkipRealIsoGates -``` - -No push is part of this scorecard. diff --git a/docs/release/RELEASE_0_6_0_GATE.md b/docs/release/RELEASE_0_6_0_GATE.md deleted file mode 100644 index 28b86ed..0000000 --- a/docs/release/RELEASE_0_6_0_GATE.md +++ /dev/null @@ -1,34 +0,0 @@ -# CsoKit 0.6.0 Official Release Gate - -This gate validates the release candidate before publishing GitHub assets. - -Required checks: - -- Version metadata is consistent across Core, CLI, App, and native backend. -- Source tree has no tracked `bin`, `obj`, `.vs`, `artifacts`, `TestResults`, `.tmp`, or `.partial` files. -- Clean, restore, Release build, and test pass. -- CLI and WPF App publish to `win-x64`. -- CLI smoke checks `--version` and `--help`. -- Optional real ISO deep verify smoke validates the RawIso routing fixed in this release. -- Release ZIPs and SHA256 checksum files are produced. - -Recommended command: - -```powershell -.\scripts\Run-OfficialReleaseGate.ps1 -Version 0.6.0 -Runtime win-x64 -InputIso "G:\path\game.iso" -``` - -If NuGet vulnerability metadata times out with `NU1900`, rerun later or use: - -```powershell -.\scripts\Run-OfficialReleaseGate.ps1 -Version 0.6.0 -Runtime win-x64 -InputIso "G:\path\game.iso" -SkipNuGetAudit -``` - -Using `-SkipNuGetAudit` means the release is not security-audited by NuGet vulnerability metadata in that run. - - -## Real-corpus policy - -`Run-OfficialReleaseGate.ps1` does not require a developer-specific game path. The default gate is portable and runs build, tests, publish, CLI smoke, and packaging. - -Use `-InputIso ` only as an optional local real-corpus smoke test. This path must never be documented as a user requirement and should not be uploaded in release summaries.