Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ jobs:
run: |
dotnet publish src/Reentry.App/Reentry.App.csproj `
-c Release -r win-x64 --self-contained false `
-p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true `
-p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:EnableMsixTooling=true `
-p:DebugType=none -p:DebugSymbols=false `
-p:Version=${{ steps.tag.outputs.base }} `
-p:InformationalVersion=${{ steps.tag.outputs.version }} `
Expand Down Expand Up @@ -189,7 +189,7 @@ jobs:
''
'## Notes'
''
'- The download is **signed** by Funcular Labs via Azure Trusted Signing (Authenticode). If Windows SmartScreen warns on a very new release, the reputation graph builds up quickly for signed installers.'
'- The download is **Authenticode-signed** by Funcular Labs via Azure Trusted Signing. **SmartScreen will often still complain** on a brand-new release (reputation, not an unsigned binary). Choose More info -> Run anyway if you trust the Funcular Labs publisher.
'- Settings and the last-session snapshot live under `%LocalAppData%\Reentry` and never leave your machine.'
'- Windows has no public pending-restore list; the HUD infers restore work from our own last-session snapshot.'
) -join "`n"
Expand Down
66 changes: 33 additions & 33 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
# Changelog

All notable changes to Reentry are documented here. The format follows
[Keep a Changelog](https://keepachangelog.com/), and releases follow [SemVer](https://semver.org/).

# Changelog
All notable changes to Reentry are documented here. The format follows
[Keep a Changelog](https://keepachangelog.com/), and releases follow [SemVer](https://semver.org/).
## [Unreleased]

- Roadmap: honest *Path to fleet later* (silent install, policy, org profile, audit log, company mode, seat hook, ADMX) while public story stays personal HUD.

- HUD: call `AppWindow.SetIcon` on the main, settings, and consent windows (the caption does not pick up `ApplicationIcon`). Replace the 195-byte PNG-in-ICO with a 16/32/48 BMP glyph derived from the existing teal mark.
- HUD: update restore/startup rows in place — `Sync` no longer `Clear()`s bound collections on the 1 Hz tick (that emptied both lists and reset subsection scroll). Footer elapsed still ticks every second.
- HUD: session progress bar plus “N / M settled”, compact single-line rows, and colored status chips (Interactive green, Pending/Starting amber, Failed purple, Hung orange, Disabled gray). Per-row clocks that duplicated the footer are gone.

- Launch on Windows 11 25H2: use the installed WASDK 2.4 runtime instead of the self-contained CoreMessagingXP payload (0xC0000602). Give the tray icon a generated glyph so ForceCreate has an IconSource.

## [0.1.0-alpha1] - 2026-08-20

First scaffold — a Windows startup / session-restore monitor.

### Added
- **`Reentry.Core`** (`net10.0`) — settings and paths (`REENTRY_DATA_DIR`), startup
inventory (Run / RunOnce / Wow6432Node / Startup folders + StartupApproved overlay),
last-session snapshot store, boot classifier (User32 1074 / 6008 / Kernel-Power 41),
tracker state machine (Pending / Starting / Interactive / Failed / Hung / Disabled),
managed-entry sidecar, autostart registration contract.
- **`Reentry.App`** — unpackaged WinUI 3 HUD (always-on-top), settings, first-run
consent, tray icon, single-instance, `RegisterApplicationRestart`, ENDSESSION snapshot.
- **Tests** — xUnit fakes covering inventory+Approved merge, snapshot round-trip,
boot classifier, tracker, managed sort, and settings paths.
- CI + signed release workflows mirroring Aperture (Azure Trusted Signing).

### Notes
- Windows has no public pending-restore list; restore rows are inferred from our
own last-session snapshot. We do not parse Outlook / Chrome / Explorer session files.
- Framework-dependent build; requires the **.NET 10 Desktop Runtime**.
## [0.1.0-alpha1] - 2026-09-10
First public dogfood build of Reentry — a Windows startup / session-restore monitor.
### Added
- **HUD** — always-on-top WinUI surface: inferred last-session restore rows, startup inventory, progress bar, colored status chips, gear to Settings, tray menu.
- **Produce Checklist…** — tray / HUD / Settings export of a local markdown (plus sibling HUD PNG) or plain-text diagnostic. Default filename `reentry-checklist-YYYYMMDD-HHMM.md`. Nothing leaves the machine.
- **Demo screenshot list** — `/demo` or tray toggle fills Contoso-style plus familiar hung suspects (Outlook, Teams, dwm, rasman, Dropbox, …) for redaction-free captures.
- **Start with Windows** — first-run consent, per-user logon registration, Settings Save/Cancel back to the HUD.
- **Core** — settings under `%LocalAppData%\Reentry`, startup inventory (Run / RunOnce / Wow6432Node / Startup folders + StartupApproved), last-session snapshot, boot classifier (User32 1074 / 6008 / Kernel-Power 41), tracker state machine, managed-entry sidecar.
- Roadmap note: personal HUD first; *Path to fleet later* (silent install, policy, audit, company mode) stays aspirational.
### Changed
- Source chip for Application Restart and Recovery reads **Last session** (not `Arr`).
- List rows leave a right gutter so always-on Win11 scrollbars do not cover status chips.
- Folder `publish.ps1` keeps `Reentry.pri` beside the exe (required for WinUI `ms-appx` load).
### Fixed
- Interactive launch always shows the HUD (Settings-only left a headless process).
- Tray icon loads from `reentry.ico` / BitmapImage (System.Drawing.Icon path failed silently).
- Single-instance second launch activates the HUD on the UI thread.
- Caption `AppWindow.SetIcon`; in-place list sync (no 1 Hz Clear pulse).
- WASDK 2.4 on Windows 11 25H2: use installed runtime (`WindowsAppSDKSelfContained=false`).
### Notes
- Windows has no public pending-restore list; restore rows are inferred from our own last-session snapshot. We do not parse Outlook / Chrome / Explorer session files.
- Framework-dependent build; requires the **.NET 10 Desktop Runtime** and **Windows App SDK 2.4**.
- Downloads are Authenticode-signed via Azure Trusted Signing. **Windows SmartScreen may still warn** on a brand-new release until reputation accrues — use More info → Run anyway when you trust the Funcular Labs signature.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ not an official Windows API.
- Always-on-top HUD after `/autostart` or an unexpected shutdown.
- Banner for boot kind: expected (User32 1074), unexpected (6008 / Kernel-Power 41), or ordinary.
- **Session restore (inferred)** and **Startup apps** sections.
- **Produce Checklist…** (tray, HUD, and Settings) writes a local markdown or text snapshot of the current session. Markdown also saves a sibling HUD PNG. Nothing is uploaded.
- Settings: list inventory, enable/disable user-scope items via StartupApproved
(the Run value is **not** deleted), add/remove a Reentry-owned user Run entry.
- First-run consent: *Start with Windows so we can show restore progress after a reboot.*
Expand Down
1 change: 1 addition & 0 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ README until at least one of those items ships in a form a rollout can use.

- [x] Core inventory / snapshot / boot / tracker with fakes and Linux-runnable tests.
- [x] Unpackaged WinUI HUD + settings + autostart consent.
- [x] **Produce Checklist…** — local markdown/text export of the live HUD (md + sibling PNG, or txt). Dogfood once before Blog 684.
- [ ] **Daily-driver week** on a real Windows box: confirm logon race (Reentry first),
HUD readability, Approved toggles, ENDSESSION snapshot, unexpected-boot path.
- [ ] Icon / tray polish and a screenshot for the README.
Expand Down
95 changes: 60 additions & 35 deletions publish.ps1
Original file line number Diff line number Diff line change
@@ -1,35 +1,60 @@
# Publishes Reentry as a framework-dependent Windows app into .\publish\.
# Requires the .NET 10 Desktop Runtime on the target machine.
# Requires the Windows App SDK 2.4 runtime (WindowsAppSDKSelfContained=false; the self-contained 2.4 CoreMessagingXP payload fail-fasts on Windows 11 25H2).
#
# Usage: pwsh ./publish.ps1 (framework-dependent .NET, small)
# pwsh ./publish.ps1 -SelfContained (bundles the .NET runtime, large but portable)

param(
[switch]$SelfContained
)

$ErrorActionPreference = "Stop"
$out = Join-Path $PSScriptRoot "publish"

$args = @(
"publish", (Join-Path $PSScriptRoot "src/Reentry.App/Reentry.App.csproj"),
"-c", "Release",
"-r", "win-x64",
"-o", $out,
"-p:PublishSingleFile=true",
"-p:IncludeNativeLibrariesForSelfExtract=true",
"-p:DebugType=none",
"-p:DebugSymbols=false"
)

if ($SelfContained) {
$args += @("--self-contained", "true")
} else {
$args += @("--self-contained", "false")
}

Write-Host "Publishing Reentry ($([bool]$SelfContained ? 'self-contained' : 'framework-dependent'))..." -ForegroundColor Cyan
& dotnet @args

Write-Host "`nDone -> $out\Reentry.exe" -ForegroundColor Green
# Publishes Reentry as a framework-dependent Windows app into .\publish\.
# Requires the .NET 10 Desktop Runtime and Windows App SDK 2.4 runtime
# (WindowsAppSDKSelfContained=false; self-contained 2.4 CoreMessagingXP fail-fasts on Win11 25H2).
#
# Default is a folder publish so Reentry.pri / *.xbf sit next to the exe — required for
# ms-appx:/// XAML LoadComponent. Single-file is optional and still needs EnableMsixTooling.
#
# Usage: pwsh ./publish.ps1
# pwsh ./publish.ps1 -SelfContained
# pwsh ./publish.ps1 -SingleFile

param(
[switch]$SelfContained,
[switch]$SingleFile
)

$ErrorActionPreference = "Stop"
$out = Join-Path $PSScriptRoot "publish"
if (Test-Path $out) { Remove-Item $out -Recurse -Force }

$args = @(
"publish", (Join-Path $PSScriptRoot "src/Reentry.App/Reentry.App.csproj"),
"-c", "Release",
"-r", "win-x64",
"-o", $out,
"-p:DebugType=none",
"-p:DebugSymbols=false",
"-p:EnableMsixTooling=true"
)

if ($SingleFile) {
$args += @(
"-p:PublishSingleFile=true",
"-p:IncludeNativeLibrariesForSelfExtract=true"
)
} else {
$args += @("-p:PublishSingleFile=false")
}

if ($SelfContained) {
$args += @("--self-contained", "true")
} else {
$args += @("--self-contained", "false")
}

$mode = if ($SingleFile) { "single-file" } else { "folder" }
$rt = if ($SelfContained) { "self-contained" } else { "framework-dependent" }
Write-Host "Publishing Reentry ($mode, $rt)..." -ForegroundColor Cyan
& dotnet @args
if ($LASTEXITCODE -ne 0) { throw "dotnet publish failed: $LASTEXITCODE" }

$pri = Join-Path $out "Reentry.pri"
if (-not $SingleFile -and -not (Test-Path $pri)) {
throw "Publish output missing Reentry.pri — HUD XAML will fail to load."
}

Write-Host "`nDone -> $out\Reentry.exe" -ForegroundColor Green
if (-not $SingleFile) {
Write-Host "Dogfood: run $out\Reentry.exe (folder publish; keep .pri next to the exe)." -ForegroundColor Green
}
Loading