first commit

This commit is contained in:
unknown committed 2026-09-19 20:55:32 -04:00
1 parent 831814283e
commit 7aacc0b63f
29 files changed
+5114

No files matched your search

+432
View File
@@ -0,0 +1,432 @@
import fs from 'node:fs/promises';
import path from 'node:path';
import { Workbook, SpreadsheetFile, FileBlob } from '@oai/artifact-tool';
const root = path.resolve(import.meta.dirname, '..');
const out = path.join(root, 'outputs', '01a0b6c2-22ad-7b62-9a5a-4a09014a9b42');
await fs.mkdir(out, {recursive:true});
const reviewed = new Date('2026-09-18T12:00:00Z');
const resumed = new Date('2026-09-19T12:00:00Z');
const S = {
diagnostics:'https://learn.microsoft.com/en-us/windows/privacy/configure-windows-diagnostic-data-in-your-organization',
events:'https://learn.microsoft.com/en-us/windows/privacy/required-diagnostic-events-fields-windows-11-24h2',
optional:'https://learn.microsoft.com/en-us/windows/privacy/optional-diagnostic-data',
services:'https://learn.microsoft.com/en-us/windows/privacy/essential-services-and-connected-experiences',
endpoints:'https://learn.microsoft.com/en-us/windows/privacy/manage-windows-11-endpoints',
cdp:'https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-connectivity#allowconnecteddevices',
gdid:'https://learn.microsoft.com/en-us/windows/deployment/update/wufb-reports-schema-ucdostatus',
reversal:'https://github.com/SmtimesIWndr/gdid-reversal/blob/dd4dd5dfcd5e1af24592ccbce44dac7cf5b38d2d/README.md',
sequel:'https://github.com/SmtimesIWndr/We-running-GDID-back/blob/b4daa443d73433127b59ad6f006eb507072848b3/README.md',
case:'https://www.justice.gov/usao-ndil/media/1450651/dl?inline=',
defender:'https://learn.microsoft.com/en-us/defender-endpoint/cloud-protection-microsoft-antivirus-sample-submission',
smart:'https://learn.microsoft.com/en-us/deployedge/microsoft-edge-security-smartscreen',
edge:'https://learn.microsoft.com/en-us/deployedge/microsoft-edge-policies/urldiagnosticdataenabled',
recall:'https://learn.microsoft.com/en-us/windows/client-management/manage-recall',
ai:'https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-windowsai#disableaidataanalysis',
activity:'https://support.microsoft.com/en-us/windows/privacy/windows-activity-history-and-your-privacy',
search:'https://support.microsoft.com/en-us/windows/privacy/windows-search-and-privacy',
sensors:'https://support.microsoft.com/en-us/windows/privacy/windows-camera-microphone-and-privacy',
location:'https://support.microsoft.com/en-us/windows/privacy/windows-location-service-and-privacy',
storage:'https://support.microsoft.com/en-us/windows/experience/storage-filemanagement/manage-drive-space-with-storage-sense',
ram:'https://veracrypt.io/en/Unencrypted%20Data%20in%20RAM.html',
working:'https://learn.microsoft.com/en-us/windows/win32/memory/working-set',
firewall:'https://learn.microsoft.com/en-us/windows/security/operating-system-security/network-security/windows-firewall/rules',
updates:'https://learn.microsoft.com/en-us/windows/deployment/update/waas-wu-settings',
life:'https://support.microsoft.com/en-us/windows/deployment/updates-lifecycle/windows-10-support-has-ended-on-october-14-2025',
tor:'https://support.torproject.org/tor-browser/security/using-tb-safely/',
vpnTor:'https://support.torproject.org/tor-browser/general/vpn-with-tor/',
zen:'https://zen-browser.app/privacy-policy/',
helium:'https://helium.computer/privacy',
mullvad:'https://mullvad.net/en/help/using-mullvad-vpn-app',
mullvadLogs:'https://mullvad.net/en/help/no-logging-data-policy',
tails:'https://tails.net/about/index.en.html',
appprivacy:'https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-privacy',
winutil:'https://github.com/ChrisTitusTech/winutil',
winutilSupport:'https://github.com/ChrisTitusTech/winutil/blob/main/docs/src/content/docs/guides/getting-started.mdx',
debloat:'https://github.com/Raphire/Win11Debloat/wiki/Features',
privacy:'https://github.com/undergroundwires/privacy.sexy',
sophia:'https://github.com/farag2/Sophia-Script-for-Windows',
sophiapp:'https://github.com/Sophia-Community/SophiApp',
xd:'https://github.com/builtbybel/xd-AntiSpy',
simple:'https://github.com/henrypp/simplewall',
spy:'https://github.com/crazy-max/WindowsSpyBlocker',
legacy:'https://github.com/W4RH4WK/Debloat-Windows-10',
sycnex:'https://github.com/Sycnex/Windows10Debloater',
bleach:'https://github.com/bleachbit/bleachbit',
port:'https://github.com/safing/portmaster',
portfaq:'https://docs.safing.io/portmaster/faq',
atlas:'https://github.com/Atlas-OS/Atlas',
ame:'https://download.amelabs.net/Privacy%2B%20Testing%20Methodology.pdf',
local:'Local project: docs/STATUS.md; config/policies.json; tests/Run-Tests.ps1',
design:'Project engineering decision; not a verified Windows guarantee'
};
// Separate software delivery from host application and observed effectiveness.
const policies = JSON.parse(await fs.readFile(path.join(root,'config/policies.json'),'utf8'));
const controls = policies.map(p => [p.Id, p.Title, 'Windows policy', p.Standard !== null ? 'Default' : p.Strict !== null ? 'Strict' : 'Optional', 'Implemented', 'Not applied', 'Pending',
p.Impact, `HKLM\\${p.Path}\\${p.Name}. Standard=${p.Standard ?? 'unchanged'}; Strict=${p.Strict ?? 'unchanged'}${p.EnterpriseValue !== null ? '; Enterprise/Education='+p.EnterpriseValue : ''}.`,
'Reviewed Windows 11 Pro/Enterprise/Education builds 26100/26200. Home audit only. Windows 10 not validated.',
'Engine tests passed; reboot and effective-policy VM tests pending. Journal restores prior value; no network guarantee.', '', p.Source, reviewed]);
function c(id,name,area,choice,stage,action,limit,test,source='design') {
controls.push([id,name,area,choice,stage,'Not applied','Pending',action,limit,'Edition/build and installed-feature checks required unless stated otherwise.',test,'',S[source]??source,reviewed]);
}
c('tailored','Personalized offers and diagnostic personalization','Diagnostics','Default','Planned','Turn off personalized offers based on diagnostics.','Separate from diagnostic collection; names and availability vary by build.','Verify Settings and effective policy after reboot.','diagnostics');
c('feedback','Feedback prompts','Diagnostics','Optional','Planned','Suppress unsolicited feedback requests.','Does not disable diagnostic transport.','Check supported setting on each edition.','diagnostics');
c('crash-upload','Optional crash and error submissions','Diagnostics','Default','Planned','Reduce optional diagnostic crash uploads; review Windows Error Reporting separately.','Dumps may contain user content. Preserve useful local troubleshooting and security records.','Test app crash handling and retention without uploading real user documents.','optional');
c('edge-url','Edge optional URL diagnostics','Browser','Default','Planned','If Edge remains, disable optional URL/per-page diagnostics using its policy.','This is separate from SmartScreen, browsing sync and Windows diagnostics.','Check edge://policy and a lab traffic baseline; keep browser updates.','edge');
c('recall','Recall snapshot retention','AI','Default','Planned','Detect eligibility; turn off snapshot saving with supported controls.','Some Recall policies delete existing snapshots. Present deletion separately; rollback cannot recover them.','Test eligible hardware/VM where supported; confirm setting and storage outcome.','ai');
c('recall-export','Recall export and Click to Do','AI','Default','Research','Review export settings and Click to Do separately from Recall saving.','Feature, region and edition restrictions apply. Click to Do policy does not control its Recall integration.','Inventory availability and verify each supported control.','recall');
c('copilot','Copilot and application AI features','AI','Optional','Planned','Offer per-app removal and cloud-AI settings for unused features.','One Copilot toggle does not cover Office, Edge, search, Recall and third-party AI.','Inventory exact packages; preserve shared runtimes; test reinstall.','debloat');
c('cdp','Connected Devices Platform','Connected features','Optional','Research','Evaluate documented AllowConnectedDevices deployment; reboot required.','No invented registry mapping. Suppressing CDP has not been shown here to eliminate GDID.','Test supported CSP/management route and cross-device breakage in a VM.','cdp');
c('phone-link','Phone Link and cross-device experiences','Connected features','Optional','Planned','Unlink and uninstall unused Phone Link features through supported interfaces.','Account-side records and other devices remain separate.','Test phone integration removal and restoration.','services');
c('windows-backup','Windows Backup and settings sync','Connected features','Optional','Planned','Disable unwanted account backup and sync after reviewing recovery needs.','Do not silently delete recovery keys or existing backups.','Verify local data availability and supported recovery path.','services');
c('local-account','Local Windows account','Accounts','Optional','Planned','Offer a local account where supported; avoid unnecessary Microsoft sign-in.','A local account is not proof of no device identifier; app sign-ins remain independent.','Preserve account access and recovery before any migration.','design');
c('cloud-records','Existing provider records','Accounts','Optional','Planned','Provide links to account privacy/export/deletion controls.','Local toggles cannot delete provider logs, retained records or other people\'s copies.','Document provider-specific deletion scope and retained categories.','services');
c('activity-history','Local activity history','Retention','Optional','Planned','Stop local activity history and separately offer clear history.','Cloud upload option was deprecated on patched Windows 10/11 in January 2024. Avoid obsolete spying claims.','Check actual build and Settings; distinguish future retention from deletion.','activity');
c('start-web','Start web search and suggestions','Connected features','Optional','Research','Review Start/Bing web queries independently from cloud-source search.','AllowCloudSearch alone does not establish that web queries stop.','Find supported edition-specific policy and test actual queries.','search');
c('widgets','Widgets, weather and news','Connected features','Optional','Planned','Disable or remove unused Widgets through supported controls.','Changes functionality and may affect bundled app packages.','Test update/reinstall and taskbar behavior.','debloat');
c('recommendations','Consumer suggestions and promotional content','Connected features','Default','Planned','Review Start suggestions, Settings offers and Spotlight content individually.','Different settings and edition support; no single total-advertising switch.','Check visible result plus policy after feature updates.','debloat');
c('typing','Typing, inking and personal dictionary','Input','Optional','Research','Reduce online personalization and review local dictionary retention.','Local and cloud settings differ; existing cloud-speech policy covers only one route.','Check language/accessibility impact and supported controls.','appprivacy');
c('app-permissions','Contacts, calendar, messages and account information','Permissions','Default','Planned','Review covered app permissions and deny unused access.','Packaged-app controls do not constrain every desktop program.','Test covered apps and exceptions; do not report hardware isolation.','appprivacy');
c('sensor-hardware','Camera and microphone hardware control','Sensors','Optional','Planned','Offer device-wide settings, physical disconnect or hardware switches.','Software disablement is reversible by privileged software; some cameras support Windows Hello.','Test desktop apps, browsers, conferencing and authentication.','sensors');
c('radio','Bluetooth, nearby sharing and Wi-Fi discovery','Network','Optional','Research','Disable unused discovery and review Wi-Fi MAC randomization support.','May disconnect input devices; MAC changes concern local networks, not global anonymity.','Inventory adapters; test reconnect and recovery without disabling active input.','design');
c('remote','Remote access and file sharing','Network','Optional','Planned','Review unnecessary RDP, Remote Assistance and sharing exposure.','Managed devices and legitimate remote support need separate treatment.','Test reachability, account access and rollback in lab.','design');
c('onedrive','OneDrive removal','Debloat','Optional','Planned','Offer unlink/uninstall after local-copy and folder-redirection preflight.','Cloud-only files must be downloaded or separately backed up first; removal does not delete cloud copies.','Open sampled files offline; verify backup and known-folder paths.','design');
c('edge-removal','Edge removal','Debloat','Optional','Research','Use supported uninstall only where available; otherwise configure privacy.','Keep WebView2 separate. Do not force-delete servicing files to remove the browser.','Validate OS region/build, dependent apps and future security updates.','design');
c('app-removal','Unused consumer and OEM applications','Debloat','Optional','Planned','Inventory and select exact packages; distinguish current-user and provisioned removal.','Keep dependencies, Store/update infrastructure and accessibility tools unless explicitly selected.','Preview removals; test reinstall and new-user provisioning.','design');
c('third-party','OEM, GPU, game-launcher and application analytics','Third parties','Default','Research','Audit each installed app\'s analytics, sync, crash and advertising controls.','Windows settings do not govern all third parties; anti-cheat and drivers need individual review.','Record app/version/publisher and official setting; observe residual connections.','design');
c('office','Office and productivity cloud experiences','Third parties','Optional','Research','Review diagnostics and optional connected experiences in each product.','Account sync, licensing and collaborative features have separate dependencies.','Use product-specific policy docs before implementation.','design');
c('storage-sense','Temporary-file retention','Cleanup','Default','Planned','Use Storage Sense with explicit retention; skip active files.','Exclude Downloads by default; recycle-bin deletion gets its own choice. This is housekeeping, not sanitization.','Preview candidates and exclusions; verify no deletion outside selected directories.','storage');
c('browser-retention','Browser cookies, cache and history','Cleanup','Optional','Planned','Use browser-owned retention and clear-on-exit options.','Clearing cookies signs users out; downloaded files, sync and server records remain.','Test each browser; preserve passwords/bookmarks unless separately selected.','design');
c('recent-files','Recent items, thumbnails and application MRUs','Cleanup','Optional','Research','Minimize retention and offer scoped, app-specific cleanup.','Deleting caches is irreversible and they can reappear. No sweeping registry cleanup.','Inventory selected cache schema and test with disposable data.','design');
c('temp-script','Scoped temporary-folder cleanup fallback','Cleanup','Optional','Planned','If needed, build preview-first cleaner with age threshold and literal allowed roots.','Skip junctions/reparse points, locked files and active installer data; no recursive arbitrary paths.','Tests must prove no traversal outside approved directories.','design');
c('registry-cleaner','Registry cleaner','Cleanup','Reject','Excluded','Do not include a general registry cleaner.','Unrelated registry deletion has no demonstrated identifier-blocking benefit here and can break software.','Use exact documented setting changes with a recovery journal.','design');
c('no-logs','Blanket Windows log deletion','Retention','Reject','Excluded','Retain security, update and recovery logs; minimize toolkit data collection instead.','No-logs is not a credible OS-wide promise; disabling records harms diagnosis and incident response.','Ensure toolkit contains no analytics, browsing data, keys or identifiers.','design');
c('ssd-wipe','Routine SSD free-space wiping','Cleanup','Reject','Excluded','Do not use as routine privacy cleanup.','Wear, remapped blocks, backups and prior copies defeat simple erasure claims.','Use appropriate device sanitization procedures only for a separate disposal task.','design');
c('ram-cleaner','RAM trimming and generic memory cleaners','Memory','Reject','Excluded','Do not include as an anonymization feature.','Working-set reduction is not proof that sensitive memory was erased.','Use application lock/unmount and protected storage.','working');
c('lock-actions','Actions on session lock','Memory','Optional','Planned','Lock password manager, clear clipboard and gracefully unmount selected non-system containers.','Win+L does not erase all keys, tokens or keystrokes. Do not kill LSASS or arbitrary apps.','Test every session-lock path, busy volumes, unsaved work and visible failure on unlock.','ram');
c('sleep-shutdown','Sleep, hibernation and shutdown choices','Memory','Optional','Research','Explain that a locked running OS can retain secrets; offer an intentional full-shutdown workflow.','Shutdown is not a guarantee of instantaneous physical RAM erasure; hibernation uses storage.','Test Fast Startup/hibernation behavior and preserve encryption/recovery.','ram');
c('disk-encryption','System disk encryption','Security','Keep','Planned','Keep or enable supported system encryption and review recovery-key custody.','Do not disable BitLocker/device encryption as a debloat tweak. Never collect recovery secrets in reports.','Verify encryption status and recovery access without logging keys.','design');
c('veracrypt','VeraCrypt containers','Applications','Optional','Prepared','Optional interactive installer is ready; containers and lock integration remain manual.','Installed does not mean encrypted; mounted data and other apps can retain plaintext.','Verify package publisher; create/test disposable container and graceful unmount.','ram');
c('tor-browser','Tor Browser','Applications','Optional','Prepared','Installer prepared; use stock protections for sessions requiring unlinkability.','Protects its configured browser traffic; personal logins identify a session.','Verify official release, connection and no profile import or added extensions.','tor');
c('zen-browser','Zen','Applications','Optional','Prepared','Installer prepared for everyday Firefox-based browsing.','Privacy policy acknowledges external requests; settings and releases require review.','Test updates, permissions, sync choices and retention.','zen');
c('helium-browser','Helium','Applications','Optional','Prepared','Installer prepared for everyday Chromium-based browsing.','Optional crash reports and configured services are separate privacy decisions.','Test updates, extension services, permissions and optional reporting.','helium');
c('mullvad-vpn','Mullvad VPN','Applications','Optional','Prepared','Installer prepared; add funded account, auto-connect and chosen Lockdown behavior.','Installation is not connection. VPN changes network observer and egress IP, not application identifiers.','Test disconnect, DNS, IPv6, reboot, sleep/wake and split-tunnel exceptions.','mullvad');
c('vpn-logs','VPN logging claims','Network','Keep','Research','Describe provider activity-logging policy separately from local app diagnostics.','A provider no-logging policy is not a no-logs Windows guarantee.','Review current policy and local support-bundle contents before sharing.','mullvadLogs');
c('tor-vpn','Automatic VPN plus Tor stacking','Network','Reject','Excluded','Do not turn on this combination by default.','Tor warns against casual VPN combinations; threat model and configuration matter.','Offer separate documented workflows if a user needs the combination.','vpnTor');
c('dns-blocking','DNS tracker blocking','Network','Optional','Planned','Use a reviewed resolver/filter with narrow lists and a clear logging policy.','Direct IP, alternate resolvers and shared domains limit coverage; DNS blocking is not all egress control.','Test false positives and IPv4/IPv6/DoH behavior; version lists and rollback.','design');
c('egress','Application egress control','Network','Optional','Research','Evaluate one network enforcement tool in a VM; start from measured workflows.','Keep recovery access; do not stack competing WFP tools blindly.','Test VPN coexistence, update paths, reconnect, reboot and uninstallation.','simple');
c('denylist','Microsoft endpoint denylist','Network','Optional','Research','Classify optional endpoints by feature, owner, purpose and capture evidence before blocking.','Do not block all Microsoft/Azure/CDN IPs or svchost.exe. Published lists are edition/version-specific.','Prove both reduced traffic and successful security workflows.','endpoints');
c('outbound-default','Strict outbound default policy','Network','Optional','Research','For an advanced profile, use default-block with reviewed required allowances.','Explicit block rules override conflicting allows. Existing allows and all network profiles must be audited.','Disposable VM first; timed recovery and firewall-export rollback.','firewall');
c('defender','Antivirus and cloud-delivered protection','Security','Keep','Planned','Keep active antivirus, tamper protection and cloud protection in the standard design.','Some security metadata leaves the device; this is an explicit retained security tradeoff.','Verify provider status, signatures and vendor-supported protection checks.','defender');
c('sample-consent','Antivirus file sample submission','Security','Optional','Research','Expose supported submission choices with their security cost.','Turning samples off can impair block-at-first-sight; metadata can still be sent.','Test exact edition/product behavior. Never label samples-off as cloud-off.','defender');
c('smartscreen','SmartScreen and reputation checks','Security','Keep','Planned','Keep reputation protection in the standard design.','Security URL checks differ from optional URL diagnostics and browser sync.','Use vendor demonstration checks, not live malware; test after network restrictions.','smart');
c('trust','Certificate trust, revocation and time','Security','Keep','Planned','Preserve certificate trust/revocation, time sync, activation and servicing dependencies.','An endpoint may support essential security; broad domain blocking risks silent failures.','Verify TLS trust and OS servicing after restrictions.','services');
c('patching','Security update workflow','Security','Keep','Planned','Default to current update behavior; optional notify/manual choice remains visible.','Manual has missed-patch risk. Do not remove servicing components or disable all update services.','Install actual cumulative update and AV/browser updates; reboot and rescan.','updates');
c('windows10','Windows 10 coverage','Security','Keep','Research','Require supported edition or verified ESU enrollment before deployment.','Standard support ended 2025-10-14. Consumer page currently lists 2027-10-12; verify region/program at release.','Record exact SKU, coverage and installed security update. Windows 10 engine support is pending.','life');
c('boot-hardening','Secure Boot, TPM, VBS and exploit mitigations','Security','Keep','Planned','Preserve supported hardware and OS security protections.','Do not trade them for a privacy or performance preset; firmware updates remain necessary.','Inventory status and compatibility before any optional change.','design');
c('third-party-av','Bitdefender or Zillya','Security','Optional','Research','Do not replace working Defender automatically; evaluate a chosen product separately.','This project has not established a comparative privacy/security advantage or tested these vendors.','Review current privacy policy, independent protection tests, update support and uninstall behavior.','design');
c('identifier-spoof','GDID, MachineGuid and hardware-ID spoofing','Identifiers','Reject','Excluded','Do not ship undocumented identifier edits or a universal ID reset.','Changing one value cannot prove unlinkability and may break licensing or apps.','Investigate mechanisms in a disposable lab without exporting actual personal identifiers.','design');
c('tails','Separate amnesic environment','Isolation','Optional','Planned','Document Tails USB for a separate session with explicit persistence choice.','Does not protect against malicious hardware or voluntary identity disclosure.','Verify official image and usable hardware/network before relying on it.','tails');
c('identity-habits','Accounts, posts and shared metadata','Behavior','Default','Planned','Reduce unnecessary disclosure; separate contexts and review document/photo metadata before publishing.','Reused accounts, shared content and personal details can reconnect sessions despite device settings.','Use a practical publishing checklist; never promise technical anonymity.','design');
c('tool-retention','Toolkit data minimization','Toolkit','Default','Implemented','No analytics added; local settings journal supports restoration.','A recovery journal exists, so the tool is not literally log-free. Audit deliberately avoids GDID and recovery keys.','Review code and generated audit; document optional journal removal after recovery window.','local');
const identifiers = [
['GDID / GlobalDeviceId','Installation/device linkage','Microsoft reports and case records','Do not equate with advertising ID. No verified universal reset control here.','Investigate feature paths and effective network reductions in lab.','Documented field; collection path incomplete',S.gdid],
['PCFP','Hardware-derived identifier','Windows 11 required diagnostic schema','Documented as an identifier calculated from hardware identifiers.','Use supported diagnostic minimum; do not assume reinstall removes hardware correlation.','Documented schema; emission not measured',S.events],
['CensusId','Hardware identifier','Appraiser RunContext schema','Documented hardware identifier in compatibility-related events.','Preserve compatibility/update testing; no verified per-field suppression in this project.','Documented schema; emission not measured',S.events],
['Advertising ID','Advertising personalization','Windows and participating applications','One specific advertising identifier; disabling it does not disable other IDs.','Implemented catalog control; not applied to host.','Official policy',policies.find(p=>p.Id==='advertising-id').Source],
['Microsoft account / app accounts','Account identity','Signed-in services','Local Windows account does not sign every application out.','Minimize unnecessary sign-in and sync; preserve recovery access.','Architecture / design assessment',S.services],
['MachineGuid / serials / TPM identity','Local and service-specific identifiers','OS, firmware and application-dependent','No evidence here that one registry edit removes all remote identification.','Avoid collecting them; no spoofing feature.','Scope limitation, not a measured traffic claim',S.design],
['Public IP / timestamps','Network correlation','Destination services and network intermediaries','VPN changes visible egress but not IDs inside app traffic.','Mullvad configuration and leak tests; minimize account linkage.','Network design assessment',S.mullvad],
['Wi-Fi MAC','Local radio/network identity','Nearby Wi-Fi infrastructure','Not normally the same identifier as a remote website sees.','Evaluate supported MAC randomization; retain network compatibility.','Design item; adapter testing pending',S.design],
['Cookies / browser storage / fingerprint','Web session linkage','Websites and embedded third parties','Multiple browsers do not automatically separate identities.','Tor stock protections; appropriate retention and account separation.','Browser threat-model guidance',S.tor],
['Optional browser URL diagnostics','Browsing data','Optional Microsoft browser diagnostics','Windows optional-data documentation includes Microsoft browser activity; not proof for every browser.','Disable optional collection; Edge URL policy separately.','Official documentation',S.optional],
['Crash dumps','Potential memory contents','Diagnostic collection and local storage','Optional crash reports can contain portions of documents or pages.','Minimize uploads and retention without discarding all troubleshooting logs.','Official documentation',S.diagnostics],
['Defender security metadata','File, process and network context','Cloud protection services','Metadata may still be sent with sample submission disabled.','Keep standard protection; explain data flow and optional tradeoff.','Official documentation',S.defender],
['Recall snapshots','Local visual history / optional export','Eligible Recall installations','Distinct from Copilot chat; export and retention have separate controls.','Disable unused snapshot saving; preview irreversible deletion.','Official documentation',S.recall],
['Activity history','Local activity record','Supported Windows feature','Patched Windows deprecated its cloud-upload option in January 2024.','Control local retention; avoid repeating outdated upload claims.','Official documentation',S.activity],
['Third-party app identifiers','Product-specific telemetry','OEM utilities, browsers, launchers and apps','Requires app-specific evidence; no blanket Windows toggle.','Inventory publishers/settings and measure each application.','Research task',S.design]
].map((r,i)=>[`I${String(i+1).padStart(2,'0')}`,...r.slice(0,6),'',r[6],reviewed]);
const toolsData = [
['Chris Titus WinUtil','Tweaks and app deployment','Current docs: Windows 11; Windows 10 unsupported','Useful UI and selective settings reference.','Inspect exact tweaks; exclude security/BitLocker reductions and blanket presets.','Candidate reference; not executed',S.winutil,S.winutilSupport],
['Raphire Win11Debloat','Selective debloat and settings','Windows 10/11 project; exact build still needs testing','Per-app selection, previews and current feature catalog.','Exclude encryption-disabling choices; distinguish default restoration from original-state rollback.','Candidate for selected debloat; not executed','https://github.com/Raphire/Win11Debloat',S.debloat],
['privacy.sexy','Generated privacy scripts','Windows catalog; validate each script/build','Source-linked scripts and individual selection help review.','Do not select all scripts. Review reversals and license before code reuse.','Reference library; not executed',S.privacy,S.privacy],
['Sophia Script','PowerShell customization','Version-specific Windows 10/11 variants','Function-by-function design and corresponding default functions.','Default functions are not proof of restoring every original user value.','Selective reference; not executed',S.sophia,S.sophia],
['SophiApp','Graphical tweak tool','Repository warns about deprecated 1.0.97','Related GUI project; inspect current supported replacement.','Do not deploy deprecated build based on a promised future version.','Legacy build excluded; recheck release',S.sophiapp,S.sophiapp],
['xd-AntiSpy','Privacy/settings UI','Windows 11 focus; Windows 10 partial','Readable choices and plugin-based configuration.','Plugins expand trust surface; check exact changes and reversals.','Candidate for review; not executed',S.xd,S.xd],
['simplewall','WFP application filtering','Windows 10/11 included','Useful per-app egress enforcement candidate.','Its filters can remain after uninstall unless removed/disabled. Test temporary filtering and recovery.','Lab candidate; not installed',S.simple,S.simple],
['WindowsSpyBlocker','Traffic research and blocklists','Windows-oriented; current endpoint validation required','Traffic classification is useful input for lab analysis.','Treat lists as hypotheses, not permanent safe blocks. Separate update dependencies.','Research input; no rules imported',S.spy,'https://crazymax.dev/WindowsSpyBlocker/'],
['Portmaster','Application firewall and DNS filtering','Windows/Linux; verify current installer compatibility','Alternative to simplewall for evaluation.','WFP/VPN coexistence and uninstall connectivity need testing. Avoid stacking both by default.','Alternative lab candidate; not installed',S.port,S.portfaq],
['BleachBit','Local cleanup','Windows/Linux','Preview and app-specific cleaners can support optional retention work.','Deletion is irreversible; no secure-SSD or internet anonymity guarantee.','Optional cleanup candidate; not run',S.bleach,S.bleach],
['W4RH4WK Debloat-Windows-10','Legacy debloat scripts','Archived 2025-09-23; deprecated','Historical examples only.','Not a maintained deployment choice for current Windows.','Excluded',S.legacy,S.legacy],
['Sycnex Windows10Debloater','Legacy Windows 10 debloat','Windows 10 project; Windows 11 not established here','Historical app-removal patterns.','Do not infer current build support or exact-original restoration.','Excluded from current deployment',S.sycnex,S.sycnex],
['Atlas','Windows modification playbook','Version-specific Windows deployment','Reviewable playbook architecture.','Broad OS changes exceed a small privacy profile; test each release rather than rely on old reputation.','Comparison only; not applied',S.atlas,S.atlas],
['AME / Privacy+','Playbook delivery / privacy changes','Depends on playbook and target build','AME could eventually package the reviewed Wind engine.','Privacy+ methodology includes Windows Update removal, conflicting with this project\'s patching requirement.','Do not adopt Privacy+ wholesale',S.ame,S.ame],
['gdid-reversal','Independent reverse-engineering research','Reported observations; not reproduced here','Suggests identity/CDP/Delivery Optimization investigation paths.','Not a validated anonymizer. Separate static findings, observations and hypotheses.','Research lead only',S.reversal,S.reversal]
].map((r,i)=>[`T${String(i+1).padStart(2,'0')}`,...r.slice(0,6),'',...r.slice(6),reviewed]);
// Case-derived text is deliberately short and attributed, not asserted as a universal OS property.
const claims = [
['Microsoft tracked Stokes through GDID','Supported as allegation','Complaint associates the identifier with attributed activity.','Affidavit paragraphs 25–29; this is not a conviction.',S.case],
['Assigned per install; survives updates; changes on reinstall','Attributed description','The affidavit attributes this lifecycle to a Microsoft representative.','Paragraph 25. Do not infer reinstall guarantees unlinkability.',S.case],
['Unique to physical device','Overstated','The description includes physical and virtual Windows installations.','Installation identity and immutable hardware identity differ.',S.case],
['Ngrok, URLs, IPs and timestamps','Supported for this case','The complaint describes these associations.','Paragraphs 26–28 do not specify every collection component.',S.case],
['It records every game played','Overstated','Growtopia login activity was correlated with Ubisoft records.','Paragraph 29 does not establish a complete installed-game history.',S.case],
['Only documented in one obscure page','Unsupported absolute','GlobalDeviceId appears in published Microsoft reporting schemas.','Documentation of a field is not a complete explanation of collection.',S.gdid],
['UCDOStatus proves universal web-history collection','Not established','UCDOStatus is a Delivery Optimization reporting schema.','A named field does not prove that this table records all URLs.',S.gdid],
['Every browser on every Windows PC reports every URL','Not established','Neither cited source demonstrates this universal claim.','Do not present it as the blog\'s conclusion.',S.case],
['Local account guarantees no Microsoft identifier','Not established','Independent research reports a path without Microsoft-account sign-in.','Useful lead; not independently reproduced by this project.',S.reversal],
['GDID is the only persistent identifier worth checking','False simplification','Microsoft also documents PCFP and CensusId in required diagnostic schemas.','Documented fields do not prove emission on this host.',S.events],
['Disabling advertising ID blocks GDID','Not established','The advertising-ID policy governs a different identifier.','Use exact scope labels and lab measurements.',policies.find(p=>p.Id==='advertising-id').Source],
['No telemetry toggle means no Microsoft traffic','False simplification','Essential services and connected experiences have separate data flows.','Preserve agreed security dependencies and document residual traffic.',S.services],
['Win+L erases all secrets from memory','Unsupported','Locking is not a general memory-erasure mechanism.','Plan app-specific locking and graceful unmount; do not claim total erasure.',S.ram],
['Humans can identify themselves despite privacy tools','Design principle','Accounts, posts and shared content can reconnect contexts.','A practical privacy plan includes disclosure habits.',S.design]
].map((r,i)=>[`C${String(i+1).padStart(2,'0')}`,...r.slice(0,4),'',r[4],reviewed]);
const roadmap = [
['P0','VM support matrix','Pro, Enterprise, Education and Home; reviewed Windows 11 builds; separate Windows 10 ESU track','Effective setting after reboot and update, not just registry readback.','Policy behavior','Open'],
['P0','Security preservation baseline','Record antivirus, firewall, boot/encryption and update status without secrets','Cumulative update installs; AV signatures and browser updates succeed; protection checks pass.','Security','Open'],
['P0','Network baseline','Disposable VM, documented workflows, Windows build, network path and capture duration','Compare before/after idle, reboot, browsing, sync and update traffic; no universal absence claim.','Network','Open'],
['P0','Endpoint provenance register','Process/service attribution, hostname/IP, purpose, evidence, expiry and rollback','No unknown destination becomes a default block; validate DNS/IPv6/VPN behavior.','Network','Open'],
['P0','Recoverability of networking','Local recovery access and exported firewall configuration','Timed recovery and uninstall restore connectivity; explicit block precedence tested.','Network','Open'],
['P0','Original-state recovery engine','Existing mock and file journal tests; real Windows registry test in disposable VM','Crash/interruption, conflicting external changes and restoration verified.','Engine','Open'],
['P1','Home Settings workflow','Current host is Core/Home build 26200','Guide accurately maps real Settings; no unsupported policy-enforcement labels.','Compatibility','Open'],
['P1','Sensor verification','Camera/mic devices and covered vs desktop app permissions','Conferencing, browser access and Windows Hello tested; hardware state labelled separately.','Sensors','Open'],
['P1','AI and debloat inventory','Package dependencies and Recall eligibility','Data-deletion preview, OneDrive offline-copy checks and reinstall path pass.','Apps','Open'],
['P1','Retention implementation','Storage Sense first; browser/app-owned cleanup; scoped fallback only','Exclusions, age cutoff, reparse-point protection and active-file handling tested.','Cleanup','Open'],
['P1','Lock-session integration','Password manager adapters and selected non-system volumes','Unsaved work protected; busy-volume failure reported; no system-process killing.','Memory','Open'],
['P1','Identifier investigation','Documented fields plus independent GDID/CDP research','Reproducible lab notes; no claim of a suppression mechanism without measured evidence.','Research','Open'],
['P1','Third-party application register','Installed publishers, versions, controls and official privacy sources','Each app has separate collection/update decisions; no silent global disablement.','Research','Open'],
['P1','Pin upstream artifacts','Selected repository commit, release signature/hash and license review','No download-and-execute one-liners; reviewed local content only.','Supply chain','Open'],
['P1','Browser and VPN acceptance','Tor, Zen, Helium, Mullvad selected individually','Update, publisher, profile separation and leak/Lockdown tests pass.','Applications','Open'],
['P2','Graphical wizard / AME wrapper','Use same reviewed engine and recovery model','UI shows intended change, compatibility, deletion and restoration limits.','Delivery','Open'],
['P2','Blog publication check','Re-read primary case and current product documentation','Claims retain attribution; screenshots and logs contain no private identifiers.','Editorial','Open'],
['P2','Revalidation after Windows updates','Repeat on feature/security updates and changed app releases','Record build/version, deviations and regression outcomes before widening support.','Maintenance','Open']
].map((r,i)=>[`R${String(i+1).padStart(2,'0')}`,...r,'Unassigned',null,'']);
const delivered = [
['D01','Policy catalog','Implemented',13,'config/policies.json','Includes two optional update entries; Standard selects 10, Strict 11.','Not applied'],
['D02','Audit / plan / apply / restore engine','Implemented',1,'Wind.ps1; src/Wind.Core.psm1','Edition/build gates, journal and conflict-aware restoration.','Not applied'],
['D03','Transaction and recovery tests','Passed',23,'tests/Run-Tests.ps1; docs/STATUS.md','Same suite passed in PowerShell 7.6.5 and Windows PowerShell 5.1. Mock registry plus file journal checks.','Not an OS enforcement test'],
['D04','Host read-only audit','Completed',1,'reports/host-audit.json','Core/Home build 26200. Automatic policy enforcement declined. No private IDs collected.','Read only'],
['D05','Interactive app choices','Prepared',5,'config/apps.json; Install-Apps.ps1','Tor, Zen, Helium, Mullvad, VeraCrypt. Installer previews only.','Not installed'],
['D06','Research, Home guide and validation plan','Prepared',1,'docs/RESEARCH.md; docs/HOME-GUIDE.md; docs/VALIDATION.md','Implementation scope and known limits documented.','Documents only'],
['D07','GitHub comparison and control workbook','Prepared',1,'Windows-privacy-register.xlsx','Sources reviewed 2026-09-18; repository execution and lab validation remain pending.','Documents only'],
['D08','Blog draft','Prepared',1,'Windows-privacy-blog-draft.md','Evidence, motivation, privacy choices and honest completion status.','Not published']
];
// Resume additions retain previous evidence dates and identify newly reviewed material.
for (const [id,name,action,limit,test,src] of [
['cdp-experiment','Experimental CDP restrictions','Investigate CDP independently from other identity consumers.','Supplied script is not integration-ready; review records status and rollback defects.','Reproduce effects in disposable Windows environments; no host deployment.','sequel'],
['wns-review','WNS notification blocking','Keep general WNS blocking out of the default design.','Notifications and management may be affected; a hosts entry is not a complete egress block.','Verify exact consumer and retained security functionality before any narrow restriction.','endpoints'],
['store-id-review','Store identifier path','Investigate Store requests separately; preserve app security updates.','Do not block the entire Store or edit its identifier based on one report.','Lab observation with disposable accounts and redacted evidence.','sequel']
]) { c(id,name,'Identifiers','Optional','Research',action,limit,test,src);controls.at(-1)[13]=resumed; }
identifiers.push(
['I16','Multiple device PUIDs','Context-specific identity','Independent follow-up research','Author reports several device PUIDs on one installation.','Extend lab scope beyond the interactive user.','Reported; not reproduced here','',S.sequel,resumed],
['I17','Widgets identifier emission','Additional application path','Independent follow-up research','Author reports Widgets sending a SYSTEM-context identifier.','Test Widgets independently from CDP.','Reported; not reproduced here','',S.sequel,resumed],
['I18','SQMClient MachineID / Store','Separate identifier family','Independent follow-up research','Author reports a matching Store request identifier.','Preserve Store updates; investigate separately.','Reported; not reproduced here','',S.sequel,resumed]
);
toolsData.push(['T16','We-running-GDID-back','Follow-up identifier research','Pinned b4daa443; Windows 11 observations','Expands the investigation beyond one CDP identifier.','Client symbols and token scopes alone do not prove backend reconciliation or every transmission.','Research lead only','',S.sequel,S.sequel,resumed]);
claims[1][4]='Paragraph 25 attribution; follow-up research raises additional lifecycle/context questions.';
claims.push(
['C15','One identifier per installation is the complete model','Incomplete','Follow-up research reports multiple device PUIDs.','Treat as a lab hypothesis; retain court attribution separately.','',S.sequel,resumed],
['C16','Disabling CDP proves all device IDs stopped','Not established','No test here establishes complete identifier suppression.','Test each emitting feature and retained service separately.','',S.sequel,resumed],
['C17','An ETW HTTPS URL means cleartext on the wire','Incorrect inference','Local instrumentation can reveal data before transport encryption.','Differentiate local visibility, destination visibility and network-observer visibility.','',S.design,resumed]
);
roadmap.push(
['R19','P0','Replace unsafe pasted-script patterns','See Script review findings and pinned source revisions','No integration until exact-state rollback, honest status and independent cleanup pass tests.','Engine','Open','Unassigned',null,''],
['R20','P1','Reproduce follow-up identifier findings','Disposable accounts; context-specific identifiers; Widgets and Store independently','Record observed flows without raw IDs/tokens in reports; retain update/security acceptance tests.','Research','Open','Unassigned',null,'']
);
delivered.push(['D09','Pasted script and follow-up research','Reviewed',1,'docs/GDID-SCRIPT-REVIEW.md','Static review, parse check and three in-memory defect probes. No supplied script executed.','Read only']);
const scriptReview = [
['S01','High','False status result','24–25; 120','Writes GDID-BLOCKER but searches GDID-BLOCK.','Match constants exactly; verify entries and effective behavior.','Confirmed in-memory'],
['S02','High','False success after partial failure','19; 49–64; 132; 138','Continues after errors and ignores native exit codes.','Check every result and effective service state; report partial failures.','Static finding'],
['S03','High','Policy rollback destroys prior state','68; 72','Overwrites three values then deletes them on enable.','Journal original presence/type/value and detect conflicts.','Static finding'],
['S04','High','Per-user service template handling','44; 49; 52','Template inventory differs from generated service instances.','Use documented template handling; test sign-in and reboot.','Official docs + static review'],
['S05','Medium','Incomplete service restoration','44; 57–64','Does not preserve delayed-start metadata or running state.','Record exact state; do not guess Manual or always start.','Static finding'],
['S06','High','Nontransactional hosts edits','76–97','Backup is not used by enable; whole file is rewritten.','Preserve bytes/encoding, journal, atomically replace and detect concurrent edits.','Static finding'],
['S07','High','Malformed marker removes other entries','79–84; 90–95','Missing end marker drops every following line.','Reject unmatched or duplicate markers before mutation.','Confirmed in-memory'],
['S08','Medium','ASCII conversion changes content','86; 96','Non-ASCII comments do not survive.','Preserve detected encoding and original bytes.','Confirmed in-memory'],
['S09','High','Irreversible cache deletion / user scope','100–105','Targets elevated LOCALAPPDATA; enable cannot restore deleted data.','Separate explicit deletion; resolve intended profile and reject path escapes.','Static finding'],
['S10','High','Hosts list overclaims suppression','30–38','Exact names do not prove all paths or identifiers are blocked.','Measured per-feature controls and residual-traffic reporting.','Design limitation'],
['S11','Medium','Notification side effects','34–37','WNS is shared infrastructure, not a GDID-only endpoint.','Keep default notifications intact pending narrow tests.','Official endpoint docs'],
['S12','Medium','Status elevates and creates state','11–27','Read-only mode enters the mutation setup path.','Audit without elevation or filesystem writes.','Static finding']
].map(r=>[...r,'Not integrated','',r[0]==='S04'?'https://learn.microsoft.com/en-us/windows/application-management/per-user-services-in-windows':r[0]==='S11'?S.endpoints:'User attachment Pasted text.txt; SHA256 0603A1073072CCC55B78692ACC93FAED4363CCFC0AF700472FBC862788B97E13',resumed]);
const U={
checkpoint:'https://learn.microsoft.com/en-us/windows/deployment/update/catalog-checkpoint-cumulative-updates',
scan:'https://learn.microsoft.com/en-us/windows/win32/wua_sdk/using-wua-to-scan-for-updates-offline',
av:'https://learn.microsoft.com/en-us/defender-endpoint/microsoft-defender-antivirus-updates',
trust:'https://learn.microsoft.com/en-us/windows-server/identity/ad-cs/configure-trusted-roots-disallowed-certificates',
ncsi:'https://learn.microsoft.com/en-us/windows-server/networking/ncsi/ncsi-overview',
wer:'https://learn.microsoft.com/en-us/windows/win32/wer/windows-error-reporting',
local:'Local project: Offline-Updates.ps1; src/Wind.OfflineUpdates.psm1; docs/OFFLINE-UPDATES.md'
};
for(const [id,name,area,choice,stage,action,limit,test,source]of[
['offline-verifier','Offline bundle integrity verifier','Update architecture','Optional','Implemented','Verify local manifest, hashes, target build/architecture and declared dependency order.','Authenticity, applicability, coverage and containment remain unverified. No downloads or installation.','19 synthetic-package tests passed in PowerShell 7 and 5.1; real host inventory read.',U.local],
['update-collector','Separate update collector','Update architecture','Optional','Planned','Download generic publisher packages on another machine for controlled transfer.','Collector still contacts publishers. Do not forward protected-PC requests or credentials.','Authenticate sources, packages and current revocation state; test transfer and supply chain.',U.checkpoint],
['offline-scan','Offline Windows Update Agent scan','Update architecture','Optional','Planned','Use a fresh signed scan CAB and explicit offline search in an isolated lab.','Scan catalog is metadata, not update binaries or complete third-party coverage.','Verify temporary service cleanup, freshness, missing-update scope and external isolation.',U.scan],
['isolation','No direct Internet from protected Windows','Update architecture','Optional','Research','Use a disconnected Windows environment and a separate maintenance/browsing environment.','Online cloud protection and reputation queries are unavailable. A denylist is not proof of isolation.','No attached VM NIC or physical disconnection; independent verification and local recovery.',S.design],
['ncsi','Connectivity probes','Connected features','Optional','Research','Review NCSI; consider supported private probes on managed networks.','Turning off probes can affect perceived connectivity and applications.','Test captive portals, network changes and update behavior.',U.ncsi],
['offline-trust','Offline certificate trust maintenance','Update architecture','Keep','Planned','Provide trusted/disallowed certificate-list maintenance for the isolated profile.','Never disable certificate validation; offline revocation knowledge can become stale.','Verify provenance, freshness and package trust after transfer.',U.trust],
['patch-coverage','Whole-system patch coverage','Update architecture','Keep','Planned','Track Windows, .NET, Defender, browsers, firmware, drivers and recovery separately.','Current OS build or a zero-result scan does not establish full patch coverage.','Record actual installed versions, reboot outcomes and emergency-update process.',U.av],
['local-discovery','Local-network identity disclosure','Local network','Optional','Research','Inventory hostname discovery, LLMNR/mDNS, NetBIOS and sharing.','These are not automatically Microsoft-bound flows; disabling discovery can break local devices.','Use disposable network captures and test printers/sharing before restrictions.',S.design],
['credential-exclusion','Exclude credential stores from cleanup','Cleanup','Default','Planned','Keep identity caches, login tokens, recovery material and servicing stores out of generic cleanup.','Deleting a cache does not establish deletion of remote records and may break login or updates.','Verify exclusions and exact allowed roots before implementing cleanup.',S.design]
]) {c(id,name,area,choice,stage,action,limit,test,source);controls.at(-1)[13]=resumed;}
for(const [id,name,purpose,platform,use,limit,decision,url]of[
['T17','Win-Debloat-Tools','Legacy debloat','Archived 2025-10-03; last documented builds limited','Historical reference.','Removal may not be easily reversed; not a current supported deployment base.','Excluded','https://github.com/LeDragoX/Win-Debloat-Tools'],
['T18','Harden-Windows-Security','Security hardening','Current Windows security focus; exact app requirements need review','Individual security controls can inform preservation tests.','Connected-service recommendations are not our privacy profile; do not import all defaults.','Selective reference only','https://github.com/HotCakeX/Harden-Windows-Security'],
['T19','wumgr','Update management','Project described for Windows 10','Update-management UI comparison.','Does not create a no-contact boundary. Current Windows 11/ESU behavior unvalidated.','Evaluation only','https://github.com/DavidXanatos/wumgr']
])toolsData.push([id,name,purpose,platform,use,limit,decision,'',url,url,resumed]);
identifiers.push(
['I19','Connectivity probes','IP / timing at probe destination','Microsoft NCSI documentation','Connectivity detection is another independent network function.','Optional control with compatibility tests.','Documented; host traffic not captured','',U.ncsi,resumed],
['I20','Update request metadata','Requests / network metadata','Online update architecture','Direct downloads need outbound protocol traffic.','Separate collector for no direct protected-PC contact.','Protocol constraint / design','',U.checkpoint,resumed],
['I21','Windows Error Reporting','Fault reporting','Microsoft WER documentation','Separate from third-party application reporters.','Review reporting and local retention individually.','Documented; host traffic not captured','',U.wer,resumed]
);
claims.push(
['C18','Download directly from Microsoft while sending it nothing','Not technically achievable','Requests and transport traffic are needed for a direct download.','Use a separate collector if the protected PC must not contact Microsoft.','',S.design,resumed],
['C19','A proxy or VPN removes identifiers from update requests','Not established','Relaying a request does not necessarily alter its contents.','Only a reviewed design that serves pre-fetched content avoids forwarding those requests.','',S.design,resumed],
['C20','Offline patches retain every online security capability','Incorrect','Online cloud analysis and reputation checks require connectivity.','Preserve local protections and explain the cloud-security tradeoff.','',S.defender,resumed]
);
roadmap.push(
['R21','P0','Validate offline update end to end','Separate collector; authentic packages; isolated target; supported edition','Install known applicable updates and prerequisites; reboot and rescan; verify no target WAN access.','Updates','Open','Unassigned',null,''],
['R22','P0','Implement offline WUA scanner','Signed current catalog, explicit offline search, temporary service registration','No online search or fallback; cleanup on failure; no full-coverage claim from empty results.','Updates','Open','Unassigned',null,''],
['R23','P0','Offline security-maintenance coverage','Defender platform/engine/intelligence, trust lists, apps and firmware','Each required component has a tested source, freshness policy and installation evidence.','Security','Open','Unassigned',null,''],
['R24','P1','Collector authenticity and transfer workflow','Publisher signatures and package catalogs; protect manifest and files','Hashes never stand in for publisher identity; reverify immediately before execution.','Supply chain','Open','Unassigned',null,'']
);
delivered.push(['D10','Offline bundle verifier and OS inventory','Implemented',1,'Offline-Updates.ps1; src/Wind.OfflineUpdates.psm1','19 tests passed in PowerShell 7 and 5.1. No download, scan, installation or isolation applied.','Read only']);
delivered[6][5]='Sources reviewed 2026-09-18/19; execution and lab validation remain pending.';
const maintenance=[
['U01','Windows cumulative / .NET','Normal supported online servicing','Reviewed Catalog packages and required checkpoints','Authenticity, applicability, order, installed KB/build and reboot','Workflow prepared','',U.checkpoint,resumed],
['U02','Defender intelligence / engine / platform','Keep normal cloud and update services','Supported offline package distribution for all three components','Versions and freshness; cloud capability explicitly unavailable','Workflow prepared','',U.av,resumed],
['U03','Trusted / disallowed certificates','Retain trust-list and revocation maintenance','Plan authenticated local trust-list refresh','Current provenance and revocation limitations; validation remains enabled','Research','',U.trust,resumed],
['U04','Tor / Zen / Helium / apps','Keep publisher security update channels','Transfer authenticated installers and dependencies','Versions, signatures and browser launch/security behavior','Research','',S.design,resumed],
['U05','Firmware / drivers / Secure Boot / WinRE','Retain vendor and OS maintenance','Separate vendor-supported offline methods','Per-component coverage; OS build alone is insufficient','Research','',S.design,resumed],
['U06','Offline scan metadata','Online scan remains available','Fresh signed Wsusscn2.cab with offline WUA search','Catalog date, limited scope, temporary registration cleanup','Scanner planned','',U.scan,resumed],
['U07','Bundle integrity','Local verifier available','Same verifier; no network calls or installers invoked','19 synthetic tests; hashes do not establish publisher authenticity','Implemented','',U.local,resumed],
['U08','Isolation boundary','Online traffic intentionally permitted','Disconnected protected Windows; separate connected collector','External verification; online cloud protection unavailable','Not deployed','',S.design,resumed]
];
// Preserve the user's editable progress fields when regenerating this owned workbook.
const existingPath=path.join(out,'Windows-privacy-register.xlsx');
try{
const prior=await SpreadsheetFile.importXlsx(await FileBlob.load(existingPath));
const oldControls=prior.worksheets.getItem('Controls').getUsedRange().values;
const progress=new Map(oldControls.slice(5).filter(r=>r[0]).map(r=>[r[0],r]));
for(const r of controls){const old=progress.get(r[0]);if(old){r[5]=old[5];r[6]=old[6];}}
const oldRoadmap=prior.worksheets.getItem('Roadmap').getUsedRange().values;
const tasks=new Map(oldRoadmap.slice(5).filter(r=>r[0]).map(r=>[r[0],r]));
for(const r of roadmap){const old=tasks.get(r[0]);if(old)for(let i=6;i<=9;i++)r[i]=old[i]??null;}
}catch(e){if(e.code!=='ENOENT')throw e;}
const wb=Workbook.create();
const colors={navy:'#17324D',teal:'#136F73',ink:'#25364A',muted:'#546678',pale:'#EDF3F7',line:'#D8E2EA',input:'#EEF5FF',amber:'#FFF0CE'};
const sheets={};
function col(n){let t='';for(n++;n;n=Math.floor((n-1)/26))t=String.fromCharCode(65+(n-1)%26)+t;return t;}
function base(name,title,subtitle,headers,rows,widths){
const sh=wb.worksheets.add(name);sheets[name]=sh;sh.showGridLines=false;sh.tabColor=colors.teal;
const end=col(headers.length-1),last=rows.length+5;
sh.getRange(`A1:${end}${last}`).format={font:{name:'Arial',size:11,color:colors.ink},verticalAlignment:'top',wrapText:true};
const titleEnd=col(Math.min(4,headers.length-1));
sh.getRange('A2').values=[[title]];sh.getRange(`A2:${titleEnd}2`).merge();sh.getRange(`A2:${titleEnd}2`).format={fill:colors.navy,font:{name:'Arial',size:16,bold:true,color:'#FFFFFF'},rowHeight:32};
sh.getRange('A3').values=[[subtitle]];sh.getRange(`A3:${titleEnd}3`).merge();sh.getRange(`A3:${titleEnd}3`).format={font:{name:'Arial',size:11,color:colors.muted},rowHeight:46,wrapText:true};
sh.getRange(`A5:${end}5`).values=[headers];
sh.getRange(`A6:${end}${last}`).values=rows;
const gap=headers.indexOf(' ');
const tableEnd=gap>=0?col(gap-1):end;
const table=sh.tables.add(`A5:${tableEnd}${last}`,true,name.replaceAll(' ','')+'Table');table.showFilterButton=true;
sh.getRange(`A5:${end}5`).format={fill:colors.navy,font:{name:'Arial',size:11,bold:true,color:'#FFFFFF'},rowHeight:32,wrapText:true};
for(let i=0;i<widths.length;i++)sh.getRange(`${col(i)}1:${col(i)}${last}`).format.columnWidth=widths[i];
for(let i=0;i<rows.length;i++){
const r=i+6;
if(i%2===1)sh.getRange(`A${r}:${end}${r}`).format.fill=colors.pale;
let lines=1;rows[i].forEach((v,j)=>{if(typeof v==='string')lines=Math.max(lines,v.split('\n').reduce((n,x)=>n+Math.ceil(x.length/Math.max(5,widths[j]-3)),0));});
sh.getRange(`A${r}:${end}${r}`).format.rowHeight=Math.min(165,Math.max(50,lines*15+12));
}
sh.freezePanes.freezeRows(5);sh.freezePanes.freezeColumns(2);
if(gap>=0){sh.getRange(`${col(gap)}5:${col(gap)}${last}`).values=[['']];sh.getRange(`${col(gap)}5:${col(gap)}${last}`).format.fill='#FFFFFF';}
return {sh,last};
}
const overview=wb.worksheets.add('Overview');sheets.Overview=overview;
const cr=base('Controls','Windows privacy control register','Implementation describes the software. Applied and verification describe this project\'s changes to the host. Blue status cells can be updated after testing.',
['ID','Control','Area','Choice','Implementation','Applied on host','Effect verified','Intended behavior','Limits / mechanism','Compatibility','Verification / rollback',' ','Reference','Reviewed'],controls,[23,32,21,13,17,18,17,54,58,44,54,3,66,14]);
cr.sh.getRange(`F6:G${cr.last}`).format.fill=colors.input;
cr.sh.getRange(`F6:F${cr.last}`).dataValidation={rule:{type:'list',values:['Not applied','Applied','Restored']}};
cr.sh.getRange(`G6:G${cr.last}`).dataValidation={rule:{type:'list',values:['Pending','Verified','Failed']}};
cr.sh.getRange(`D6:D${cr.last}`).conditionalFormats.add('containsText',{text:'Reject',format:{fill:'#FCE9E7',font:{color:'#963E33'}}});
cr.sh.getRange(`G6:G${cr.last}`).conditionalFormats.add('containsText',{text:'Failed',format:{fill:'#FCE9E7'}});
cr.sh.getRange(`N6:N${cr.last}`).setNumberFormat('yyyy-mm-dd');
const ir=base('Identifiers','Identifiers and data channels','A documented field is evidence of a schema, not proof that it was emitted by this host. No personal identifier values are included.',
['ID','Identifier / channel','Privacy relevance','Where documented / observed','What it means','Proposed response','Evidence classification',' ','Reference','Reviewed'],identifiers,[10,29,29,41,54,53,40,3,66,14]);
ir.sh.getRange(`J6:J${ir.last}`).setNumberFormat('yyyy-mm-dd');
const tr=base('Tools','GitHub tools and playbooks','Documentation and selected configuration review. None executed on this host. Candidate means worth controlled evaluation, not certified safe.',
['ID','Project','Purpose','Platform / status','Useful part','Main limitation / test','Decision',' ','Repository / publisher','Supporting reference','Reviewed'],toolsData,[10,28,28,43,48,56,38,3,65,65,14]);
tr.sh.getRange(`K6:K${tr.last}`).setNumberFormat('yyyy-mm-dd');
const cl=base('Claims','Screenshot fact-check','Case statements are allegations from a complaint. The screenshot is an input to verify; it is not an instruction or a complete technical description.',
['ID','Claim / question','Assessment','Evidence / finding','Publication wording / limit',' ','Reference','Reviewed'],claims,[10,43,26,53,57,3,70,14]);
cl.sh.getRange(`H6:H${cl.last}`).setNumberFormat('yyyy-mm-dd');
const rr=base('Roadmap','Implementation and validation work','Change blue fields as work progresses. No task is completed merely because a setting was written or a connection was not seen during one capture.',
['ID','Priority','Task','Scope / prerequisites','Acceptance evidence','Area','Status','Owner','Target date','Evidence / result'],roadmap,[10,11,33,57,67,20,16,22,16,50]);
rr.sh.getRange(`G6:J${rr.last}`).format.fill=colors.input;
rr.sh.getRange(`G6:G${rr.last}`).dataValidation={rule:{type:'list',values:['Open','In progress','Done','Deferred']}};
rr.sh.getRange(`I6:I${rr.last}`).setNumberFormat('yyyy-mm-dd');
const dr=base('Delivered','What has actually been delivered','Software and documents are prepared. These records do not claim policy enforcement, app installation or network blocking on the development host.',
['ID','Deliverable','Status','Count','Local evidence','Scope / result','Host effect'],delivered,[10,38,18,11,52,66,30]);
const sr=base('Script review','Supplied GDID script review','Attachment treated as source to review, not instructions to execute. Native Windows policy/service/hosts/cache mutations were not performed.',
['ID','Priority','Finding','Attachment lines','Problem','Required change','Evidence','Disposition',' ','Reference','Reviewed'],scriptReview,[10,12,35,20,56,57,30,23,3,66,14]);
sr.sh.getRange(`K6:K${sr.last}`).setNumberFormat('yyyy-mm-dd');
const ur=base('Update maintenance','Online and isolated update maintenance','Direct downloads require outbound requests. The separate collector design avoids direct protected-PC contact only while its isolation boundary holds.',
['ID','Component','Online profile','Isolated profile','Required verification','Status',' ','Reference','Reviewed'],maintenance,[10,34,49,56,63,24,3,66,14]);
ur.sh.getRange(`I6:I${ur.last}`).setNumberFormat('yyyy-mm-dd');
overview.showGridLines=false;overview.tabColor=colors.navy;
overview.getRange('A1:H36').format={font:{name:'Arial',size:11,color:colors.ink},wrapText:true,verticalAlignment:'top'};
overview.getRange('A1:A36').format.columnWidth=3;
overview.getRange('B1:B36').format.columnWidth=42;overview.getRange('C1:C36').format.columnWidth=15;overview.getRange('D1:D36').format.columnWidth=3;
overview.getRange('E1:H36').format.columnWidth=23;
overview.getRange('B2:H2').merge();overview.getRange('B2').values=[['Windows privacy research and delivery register']];
overview.getRange('B2:H2').format={fill:colors.navy,font:{name:'Arial',size:16,bold:true,color:'#FFFFFF'},rowHeight:36};
overview.getRange('B3:H3').merge();overview.getRange('B3').values=[['Reviewed 18–19 September 2026. Preserve security while reducing unnecessary collection and retention.']];overview.getRange('B3:H3').format.rowHeight=30;
overview.getRange('B5:C5').values=[['Measure','Count']];overview.getRange('B5:C5').format={fill:colors.navy,font:{bold:true,color:'#FFFFFF'},rowHeight:26};
overview.getRange('B6:B12').values=[['Controls and design decisions'],['Implemented catalog / toolkit items'],['Prepared application choices'],['Applied to this host by the project'],['Applied and effect verified'],['Tools / playbooks reviewed'],['Open roadmap tasks']];
overview.getRange('C6:C12').formulas=[
[`=COUNTA(Controls!A6:A${cr.last})`],
[`=COUNTIF(Controls!E6:E${cr.last},"Implemented")`],
[`=COUNTIF(Controls!E6:E${cr.last},"Prepared")`],
[`=COUNTIF(Controls!F6:F${cr.last},"Applied")`],
[`=COUNTIFS(Controls!F6:F${cr.last},"Applied",Controls!G6:G${cr.last},"Verified")`],
[`=COUNTA(Tools!A6:A${tr.last})`],
[`=COUNTIF(Roadmap!G6:G${rr.last},"Open")`]
];
overview.getRange('B6:C12').format.rowHeight=29;overview.getRange('C6:C12').setNumberFormat('0');overview.getRange('C6:C12').format.font={size:15,bold:true,color:colors.teal};
const notes=[
['E5:H5','Current host'],['E6:H8','Windows 11 Home (Core), build 26200. The prototype declines automatic policy enforcement here. No policy changes, firewall blocks or app installs were performed by this project.'],
['E10:H10','Security boundary'],['E11:H13','Online mode retains cloud protection. Isolated mode uses transferred updates and loses online cloud/reputation capabilities. Both preserve local protections. The verifier does not establish isolation or complete patching.'],
['B15:H15','Recommended direction'],['B16:H18','Use the small reviewed Wind catalog as the base. Borrow selected ideas from maintained tools only after source review and VM tests. Evaluate one network filter separately. Avoid chaining debloat presets or claiming a universal GDID reset.'],
['B20:H20','How to use this workbook'],['B21:H23','Controls separates implementation, application and verification. Identifiers, Tools and Claims track evidence. Roadmap and Delivered track progress. Script review assesses the attachment. Update maintenance compares online and isolated operation. Scroll right for sources.'],
['B25:H25','What the labels mean'],['B26:H28','Default = proposed standard behavior; Strict/Optional = explicit choice; Keep = preserve a protection; Reject = excluded approach. Implemented = code exists, not deployment approval. Prepared = installer or setup path exists. Planned/Research = further work required.'],
['B30:H30','Evidence and maintenance'],['B31:H34','Sources are adjacent to their claims and dated. Publisher documentation is not an independent audit. Network payloads and backend correlation remain partly unknown. Editable blue status fields require evidence before marking Applied or Verified. Recheck Windows and application versions before publishing or deploying.']
];
for(const [r,t]of notes){overview.getRange(r).merge();overview.getRange(r.split(':')[0]).values=[[t]];if(/^\w+\d+:\w+\d+$/.test(r)&&r.match(/\d+/g)[0]===r.match(/\d+/g)[1])overview.getRange(r).format={fill:colors.navy,font:{bold:true,color:'#FFFFFF'},rowHeight:24};else overview.getRange(r).format.fill=colors.pale;}
overview.getRange('B31:H34').format.fill='#FFF4DB';overview.freezePanes.freezeRows(3);
// Formula sensitivity check. The test edit is restored before export.
const savedStatus=cr.sh.getRange('F6:G6').values;
const baseApplied=controls.filter(r=>r[5]==='Applied').length;
const baseVerified=controls.filter(r=>r[5]==='Applied'&&r[6]==='Verified').length;
cr.sh.getRange('F6:G6').values=[['Applied','Verified']];
if(overview.getRange('C9').values[0][0]!==baseApplied+(savedStatus[0][0]==='Applied'?0:1)||overview.getRange('C10').values[0][0]!==baseVerified+(savedStatus[0][0]==='Applied'&&savedStatus[0][1]==='Verified'?0:1))throw new Error('Summary formulas did not react to status edits.');
cr.sh.getRange('F6:G6').values=savedStatus;
wb.recalculate();
if(overview.getRange('C9').values[0][0]!==baseApplied||overview.getRange('C10').values[0][0]!==baseVerified)throw new Error('Test status was not restored.');
const checks=await wb.inspect({kind:'match',searchTerm:'#REF!|#DIV/0!|#VALUE!|#NAME\\?|#N/A|#NUM!|#NULL!|#SPILL!|#CALC!',options:{useRegex:true,maxResults:100},maxChars:5000});
console.log('Formula error scan:',checks.ndjson);
console.log((await wb.inspect({kind:'region',sheetId:'Overview',range:'B5:C12',maxChars:4000,tableMaxRows:10,tableMaxCols:2})).ndjson);
await (await SpreadsheetFile.exportXlsx(wb)).save(path.join(out,'Windows-privacy-register.xlsx'));
for(const [name,range,suffix]of [['Overview','A1:H35',''],['Controls','A82:K86','offline'],['Identifiers','A24:G26','offline'],['Tools','A22:G24','offline'],['Claims','A23:E25','offline'],['Roadmap','A26:G29','offline'],['Delivered','A14:G15','offline'],['Update maintenance','A2:F13','']]){
const blob=await wb.render({sheetName:name,range,scale:1,format:'png'});await fs.writeFile(path.join(out,`preview-${name}${suffix?'-'+suffix:''}.png`),new Uint8Array(await blob.arrayBuffer()));
}
await fs.writeFile(path.join(out,'register-data.json'),JSON.stringify({reviewed:'2026-09-18/19',counts:{controls:controls.length,tools:toolsData.length,identifiers:identifiers.length,claims:claims.length,todos:roadmap.length,scriptFindings:scriptReview.length},controls,identifiers,tools:toolsData,claims,roadmap,delivered,scriptReview,maintenance},null,2));
console.log(JSON.stringify({output:path.join(out,'Windows-privacy-register.xlsx'),controls:controls.length,tools:toolsData.length,identifiers:identifiers.length,claims:claims.length,todos:roadmap.length}));