Skip to content

The model gives the Windows app its records key, a held store deletion, Task Manager, a launch refusal and timers that stop while the PC sleeps - #166

Merged
datlechin merged 6 commits into
mainfrom
windows-app-2-model-arms
Oct 15, 2026
Merged

datlechin merged 6 commits into
mainfrom
windows-app-2-model-arms

Conversation

@datlechin

Copy link
Copy Markdown
Owner
  • windows_records_key(directory): the key the Windows app keeps its account windows' records under. Lexical, on every system: / as \, no ., .., \\?\ or trailing separator, each name upper-cased one for one with same_path_in_any_case's helper. No short name or link is expanded.
  • A store answered StoreHeld stays held until StoreDeleted: asked again after every read, enrolled again or not, and no window of it opens. AccountWindowsShown.held lists it, and WindowNoteKind::StoreHeld says why. On macOS this only changes a deletion WebKit refused.
  • part_still_running and the core's AppOpen sentence name Task Manager on Windows. The Claude Desktop model tests expect the word of the system they run on.
  • launch_refusal(environment): names the app's version to the release gate, then returns what the gate every change passes refuses: windows_not_released, elevated, system_too_old or home_not_absolute.
  • The model's clock and quit's 30-second wait read pitboard_core::host::awake: QueryUnbiasedInterruptTimePrecise on Windows, where Instant counts sleep, and Instant on macOS and Linux.
  • C#: a binding test of WindowsRecordsKey. On the gated DLL, AWindowsModelReadsNothingUntilPitboardForWindowsIsReleased checks that LaunchRefusal matches the model's first read.
  • C#: the fixture tests' cleanup retries for up to 5 seconds, since Shutdown waits for the actor alone. On main it failed ARunOutIsPostedThroughTheAppsNotifications 4 runs of 4 on macOS.
  • ARCHITECTURE.md: the records key, the hold, launch_refusal and the timers' Windows reading, plus two rows under "Documented, not measured".
  • No CHANGELOG entry: Windows is not released.

Windows CI legs are this code's first run.

…ectory as Windows compares paths

NTFS ignores case, so two spellings of one folder would key two records and orphan or
share stores. windows_records_key reads the text alone, on every system, so the bindings
stay one file; macOS keeps WebEnvironment.recordKey. It shares the one-for-one upper case
with same_path_in_any_case.
…ld, and its menu item says why

WebView2 deletes a profile's folder only as the browser process exits and refuses a
profile of the same name until then with ERROR_DELETE_PENDING (CoreWebView2Profile.Delete,
WebView2 1.0.4258.31, read 15 October 2026). The model now holds a store answered
StoreHeld until StoreDeleted, asks for it after every read, and lists it in
AccountWindowsShown.held. macOS answers StoreDeleted at once, so only a deletion WebKit
refused waits there.
The app's lingering quit and the core's AppOpen sentence named Activity Monitor on every
system; W18's ChatGPT holder reaches both on Windows. The Claude Desktop sentences stay
as they are, since Desktop is macOS only for 1.0, and their model tests expect the word
of the system they run on.
…usal in place of a model

launch_refusal names the app's version to the release gate, as the app's core does, then
answers what the gate every change passes refuses, in its order: the release gate, an
elevated process, a Windows build below 26100, then a home that is not a full path. The
model's first read says the same, so the C# gate test checks both agree on the gated DLL.
…akes none of an app's 30 seconds to quit

Instant reads QueryPerformanceCounter on Windows (Rust 1.98.1's sys/time/windows.rs),
which Microsoft documents as counting standby and hibernation. pitboard_core::host::awake
reads QueryUnbiasedInterruptTimePrecise there, documented as leaving both out, and
Instant on macOS and Linux, whose CLOCK_UPTIME_RAW and CLOCK_MONOTONIC leave out a sleep
(clock_gettime(3), Linux man-pages 6.19). The model's clock and quit's wait read it.
Microsoft's contract: no machine has been put to sleep during a quit yet.
…es stop writing to it

Shutdown waits for the actor alone, so a lane can still write into the fixture's
.pitboard while the cleanup deletes it. ARunOutIsPostedThroughTheAppsNotifications failed
its cleanup 4 runs of 4 on main 8120350 on macOS, against the release dylib with fixtures,
and passed 6 of 6 with the cleanup retrying for up to 5 seconds.
@datlechin
datlechin marked this pull request as ready for review October 15, 2026 09:05
@datlechin
datlechin merged commit 73de68b into main Oct 15, 2026
21 checks passed
@datlechin
datlechin deleted the windows-app-2-model-arms branch October 15, 2026 09:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant