Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
5c34541
Replace external .NET review with maintainer decision
KeyffMS Jul 30, 2026
d919207
Use maintainer decision in .NET notice
KeyffMS Jul 30, 2026
cc5b211
Generate .NET notice from maintainer decision
KeyffMS Jul 30, 2026
5745edc
Validate maintainer-owned release decision
KeyffMS Jul 30, 2026
7c3419b
Validate maintainer decision in release package
KeyffMS Jul 30, 2026
215a20f
Report maintainer release decision
KeyffMS Jul 30, 2026
3657f8e
Add maintainer release review template
KeyffMS Jul 30, 2026
474cf47
Remove external legal sign-off template
KeyffMS Jul 30, 2026
2bed5b6
Replace counsel gate with maintainer risk review
KeyffMS Jul 30, 2026
7b99bf5
Replace external patent opinion with internal risk review
KeyffMS Jul 30, 2026
b55d6ec
Make non-medical scope maintainer-owned
KeyffMS Jul 30, 2026
f2cf695
Record internal trademark risk acceptance
KeyffMS Jul 30, 2026
9837132
Make .NET redistribution review maintainer-owned
KeyffMS Jul 30, 2026
1a3b172
Use maintainer release-risk gate
KeyffMS Jul 30, 2026
fe97a89
Update governance documentation index
KeyffMS Jul 30, 2026
3cda5b2
Describe maintainer-owned release governance
KeyffMS Jul 30, 2026
8b12eeb
Remove external audit from packaging gate
KeyffMS Jul 30, 2026
395704a
Document maintainer .NET review decision
KeyffMS Jul 30, 2026
c10788a
Document maintainer decision in compliance report
KeyffMS Jul 30, 2026
7e6b2c9
Update build guide for maintainer decisions
KeyffMS Jul 30, 2026
1556d89
Record current alpha maintainer risk decision
KeyffMS Jul 30, 2026
97893ac
Fix target framework extraction
KeyffMS Jul 30, 2026
b8c503d
Fix compliance target framework extraction
KeyffMS Jul 30, 2026
568a32c
Keep canonical metadata source explicit
KeyffMS Jul 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 9 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ SightAdapt currently provides:
- a notification-area menu and configuration panel;
- immediate explicit and emergency overlay shutdown;
- schema-versioned JSON settings with migration and atomic persistence;
- automated build, test, architecture, migration, Windows publish and final-archive legal-bundle validation.
- automated build, test, Windows publish and final-archive compliance validation.

New application assignments use Soft Invert, inherit that profile for native popup menus, and use client-area scope by default. Selecting `None` for the application and an explicit menu profile leaves the application unchanged while correcting only its native popup menus.

Expand All @@ -65,19 +65,19 @@ Executable paths, settings, logs and screenshots can contain personal or confide

SightAdapt is general-purpose accessibility and display-personalization software. It is not intended to diagnose, treat, prevent, monitor or clinically alleviate any disease, injury or disability, and it is not a substitute for professional medical or eye-care advice.

`Color correction` and `visual correction` refer to display presentation, not clinical vision correction. The project does not claim clinical effectiveness or target a named medical condition. See the controlled [intended-purpose and medical-device claims policy](docs/legal/INTENDED-PURPOSE-AND-MDR.md).
`Color correction` and `visual correction` refer to display presentation, not clinical vision correction. The project does not claim clinical effectiveness or target a named medical condition. See the controlled [intended-purpose policy](docs/legal/INTENDED-PURPOSE-AND-MDR.md).

## Third-party names and protected content

Third-party product names and trademarks belong to their respective owners and are used only to identify applications selected or configured by the user. SightAdapt is not affiliated with, sponsored by or endorsed by Microsoft or those owners unless an explicit written relationship is identified.

SightAdapt does not circumvent DRM or other access controls. Protected content may remain unavailable, blank or unfilterable. Compatibility statements describe observed technical behavior and do not imply partnership, certification or support from a third party. See [the complete third-party names, affiliation and protected-content policy](docs/legal/THIRD-PARTY-NAMES-AFFILIATION-AND-DRM.md).

## Legal release status
## Release-risk governance

Repository notices, policies, SBOM and package checks are preparation and technical compliance controls; they are not a privileged legal opinion or complete legal clearance.
Repository notices, policies, SBOM and package checks are internal project controls. SightAdapt does not plan external legal, trademark, patent, privacy/DPO or medical-device audits.

The current approved stage is free/open-source alpha development and GitHub distribution. SightAdapt is not approved for production-ready claims, paid licensing, major-store production distribution, enterprise legal warranties/indemnities or complete patent/regulatory-compliance claims until qualified counsel signs off on the exact launch scope and artifact. See [the formal legal review and release gate](docs/legal/LEGAL-RELEASE-GATE.md).
Release and business-risk decisions are made by `KeyffMS / aiteracja.pl` using documented evidence and accepted-risk records. Internal review is not legal advice and the project does not claim legal clearance, patent freedom to operate, trademark availability, non-infringement, MDR approval or professional audit. See [the maintainer release-risk review](docs/legal/LEGAL-RELEASE-GATE.md).

## Build a standalone EXE

Expand Down Expand Up @@ -121,8 +121,10 @@ Create and validate the final archive according to [the binary packaging standar
- [Product identity and brand usage](docs/BRAND.md)
- [Intended purpose and medical-device claims policy](docs/legal/INTENDED-PURPOSE-AND-MDR.md)
- [Third-party names, affiliation and protected-content policy](docs/legal/THIRD-PARTY-NAMES-AFFILIATION-AND-DRM.md)
- [Formal legal review and release gate](docs/legal/LEGAL-RELEASE-GATE.md)
- [Legal sign-off template](docs/legal/LEGAL-SIGNOFF-TEMPLATE.md)
- [Maintainer release-risk review](docs/legal/LEGAL-RELEASE-GATE.md)
- [Maintainer release-review template](docs/legal/MAINTAINER-RELEASE-REVIEW-TEMPLATE.md)
- [Patent-risk review](docs/legal/PATENT-FTO-GATE.md)
- [Internal trademark-risk decision](docs/legal/TRADEMARK-CLEARANCE-2026-07-27.md)
- [Release naming and attribution](docs/RELEASING.md)
- [Binary packaging standard](docs/PACKAGING.md)
- [Complete functionality](docs/FEATURES.md)
Expand Down
133 changes: 38 additions & 95 deletions docs/BUILD.md
Original file line number Diff line number Diff line change
@@ -1,64 +1,49 @@
# Build and package SightAdapt as a standalone EXE

These steps create a self-contained Windows x64 executable and a verified ZIP archive. The published application is started directly as `SightAdapt.exe`; `dotnet run` is not required.
These steps create a self-contained Windows x64 executable and verified ZIP.

## 1. Install prerequisites
## Prerequisites

Use a 64-bit Windows 10 or Windows 11 computer and install the exact SDK selected in `global.json`.
Use Windows 10/11 x64 and the exact SDK pinned in `global.json`.

For the current release candidate:
Current release inputs:

```text
.NET SDK 8.0.423
.NET Runtime 8.0.29
Windows Desktop Runtime 8.0.29
```

Verify the SDK:
Verify:

```powershell
dotnet --version
```

The command must print `8.0.423`. SDK roll-forward is disabled so an unreviewed SDK cannot silently change the release composition.
SDK roll-forward is disabled.

## 2. Clone the repository

```powershell
git clone https://github.com/KeyffMS/SightAdapt.git
cd SightAdapt
```

## 3. Verify release metadata and redistribution review
## 1. Verify release metadata and maintainer decision

```powershell
.\tools\verify-release-metadata.ps1
```

This check verifies the synchronized product, expected SDK/runtime, target framework, RID and publish-mode inputs. It also compares them with `release/dotnet-redistribution-review.json` and verifies the SHA-256 of the reviewed redistribution-notice template. A changed reviewed input cannot proceed until the review record is deliberately updated.
`Directory.Build.props` is the canonical source for product, SDK, runtime, RID, publish-mode and artifact metadata. The check compares it with the project, `global.json`, the reviewed redistribution-template SHA-256 and the maintainer decision in `release/dotnet-redistribution-review.json`. A mismatched configuration or `blocked` decision stops the build.

## 4. Restore dependencies
## 2. Restore and test

```powershell
dotnet restore .\src\SightAdapt\SightAdapt.csproj
dotnet restore .\tests\SightAdapt.Tests\SightAdapt.Tests.csproj
```

The application restore creates the authoritative runtime-pack inventory used by notice generation. The exact-version generator rejects runtime-pack versions that differ from `Directory.Build.props`.

## 5. Run the tests

```powershell
dotnet test .\tests\SightAdapt.Tests\SightAdapt.Tests.csproj `
--configuration Release `
--no-restore
```

All maintained checks must pass before publication.

## 6. Publish a self-contained single-file executable
The application restore graph is the authority for runtime-pack inventory.

The runtime identifier, self-contained mode and single-file setting are defined by `Directory.Build.props` and `SightAdapt.csproj`. The exact runtime patch is selected by the pinned SDK and verified against the restored `project.assets.json` before packaging.
## 3. Publish

```powershell
dotnet publish .\src\SightAdapt\SightAdapt.csproj `
Expand All @@ -67,89 +52,74 @@ dotnet publish .\src\SightAdapt\SightAdapt.csproj `
--output .\artifacts\win-x64
```

The project copies the static repository legal-document baseline into the publish directory. The Microsoft .NET redistribution notice is intentionally not copied as a static file; it is generated after exact-version .NET metadata exists.
The static legal baseline is copied to the publish directory. The Microsoft redistribution notice is generated later from reviewed metadata.

## 7. Generate exact-version .NET notices
## 4. Generate exact-version Microsoft notices

```powershell
.\tools\generate-dotnet-notices.ps1 `
-PublishDirectory .\artifacts\win-x64
```

The generator verifies the runtime packs selected by restore, downloads the matching official Microsoft .NET SDK ZIP, verifies its published SHA-512 hash and replaces the baseline .NET files with exact-version legal material. It writes:
This verifies the restored runtime packs, downloads the matching official SDK ZIP, verifies SHA-512 and writes:

- `THIRD-PARTY-NOTICES.txt`;
- `DOTNET-LICENSE-NOTICE.txt`;
- `DOTNET-NOTICE-METADATA.json`.

The process and update rules are documented in [Exact-version .NET notice generation](legal/DOTNET-NOTICE-GENERATION.md).

## 8. Generate the reviewed Microsoft redistribution notice
## 5. Generate the maintainer-reviewed redistribution notice

```powershell
.\tools\generate-dotnet-redistribution-notice.ps1 `
-PublishDirectory .\artifacts\win-x64
```

This step:

- verifies that the SDK, runtime, target framework, RID and publish mode still match the reviewed configuration;
- verifies the reviewed template SHA-256;
- confirms that exact-version .NET notice metadata was generated first;
- inserts the current product and technical metadata into the reviewed template;
- writes `MICROSOFT-DOTNET-REDISTRIBUTION.txt` without unresolved placeholders.
This verifies the reviewed configuration, template checksum, maintainer decision and exact-version metadata, then writes `MICROSOFT-DOTNET-REDISTRIBUTION.txt`.

A technical configuration or template change fails until `release/dotnet-redistribution-review.json` is updated as a deliberate review action.
No external legal audit is required by the project plan. The generated file remains an internal project notice, not legal advice or clearance.

## 9. Generate the SBOM and license report
## 6. Generate SBOM and license report

```powershell
.\tools\generate-sbom.ps1 `
-PublishDirectory .\artifacts\win-x64
```

This creates `DEPENDENCIES.md`, `SBOM.spdx.json` and `LICENSE-REPORT.json` from the evaluated release inputs and final staged files.
This creates `DEPENDENCIES.md`, `SBOM.spdx.json` and `LICENSE-REPORT.json`.

## 10. Inspect the publish directory
## 7. Inspect the staged directory

At minimum, the directory must contain:
At minimum:

```text
artifacts\win-x64\
├── SightAdapt.exe
├── LICENSE.txt
├── THIRD-PARTY-NOTICES.txt
├── DOTNET-LICENSE-NOTICE.txt
├── DOTNET-NOTICE-METADATA.json
├── MICROSOFT-DOTNET-REDISTRIBUTION.txt
├── THIRD-PARTY-NAMES-AND-DRM-NOTICE.txt
├── DEPENDENCIES.md
├── SBOM.spdx.json
├── LICENSE-REPORT.json
└── PRIVACY.md
SightAdapt.exe
LICENSE.txt
THIRD-PARTY-NOTICES.txt
DOTNET-LICENSE-NOTICE.txt
DOTNET-NOTICE-METADATA.json
MICROSOFT-DOTNET-REDISTRIBUTION.txt
THIRD-PARTY-NAMES-AND-DRM-NOTICE.txt
DEPENDENCIES.md
SBOM.spdx.json
LICENSE-REPORT.json
PRIVACY.md
```

Additional runtime files may be present depending on reviewed publish settings. See [the binary packaging standard](PACKAGING.md).

## 11. Run negative package checks
## 8. Run negative package checks

```powershell
.\tools\test-release-compliance-negative.ps1 `
-PublishDirectory .\artifacts\win-x64
```

The check proves that the validator rejects both a missing legal bundle and a generated redistribution notice with a deliberately stale runtime version.
The validator must reject an incomplete package and a package with stale redistribution metadata.

## 12. Create and verify the final archive

Create the ZIP from the contents of the publish directory so the required files remain at the archive root:
## 9. Create and verify the final archive

```powershell
$archive = '.\artifacts\SightAdapt-0.5.0.50-alpha-win-x64.zip'
$report = '.\artifacts\SightAdapt-0.5.0.50-alpha-win-x64-compliance.json'

Remove-Item $archive -Force -ErrorAction SilentlyContinue
Remove-Item $report -Force -ErrorAction SilentlyContinue
Compress-Archive `
-Path '.\artifacts\win-x64\*' `
-DestinationPath $archive `
Expand All @@ -161,51 +131,24 @@ Compress-Archive `
-ReportPath $report
```

The validation opens the final ZIP, checks the canonical manifest, compares the generated redistribution headers with canonical and reviewed metadata, verifies exact .NET notice metadata, and confirms SBOM/file coverage. Retain the compliance report with the archive.
Retain the compliance report with the archive.

## 13. Start the executable
## 10. Run and inspect the version

```powershell
.\artifacts\win-x64\SightAdapt.exe
```

The application appears in the Windows notification area.

## 14. Verify the built version

While SightAdapt is running:

```powershell
$process = Get-Process SightAdapt

(Get-Item $process.Path).VersionInfo |
Format-List ProductVersion, FileVersion
```

The expected product values and exact .NET release inputs are generated from the sources of truth in `Directory.Build.props`, `global.json`, the redistribution review record and the restore graph.

## Clean rebuild

```powershell
Remove-Item .\artifacts\win-x64 -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item .\artifacts\SightAdapt-*-win-x64.zip -Force -ErrorAction SilentlyContinue
Remove-Item .\artifacts\SightAdapt-*-win-x64-compliance.json -Force -ErrorAction SilentlyContinue

dotnet restore .\src\SightAdapt\SightAdapt.csproj

dotnet publish .\src\SightAdapt\SightAdapt.csproj `
--configuration Release `
--no-restore `
--output .\artifacts\win-x64

.\tools\generate-dotnet-notices.ps1 `
-PublishDirectory .\artifacts\win-x64

.\tools\generate-dotnet-redistribution-notice.ps1 `
-PublishDirectory .\artifacts\win-x64

.\tools\generate-sbom.ps1 `
-PublishDirectory .\artifacts\win-x64
```

An official release must not be published if the reviewed redistribution configuration, exact-version notice generation, stale-notice negative test or final-package validation fails. Production and paid distribution remain blocked while the professional-review status is `not-obtained`.
A release must not be published if metadata review, notice generation, the maintainer decision, negative checks or final-package validation fail.
Loading
Loading