Skip to content

Commit 052ae2d

Browse files
authored
docs: refresh stale counts across docs + add a doc-freshness test guard (#43)
Four releases of module additions (NPS, Always-On VPN, CIS Compliance, SIEM Forwarder) left documentation counts stale. This corrects them everywhere and adds an enforcement guard so they can't silently drift again. Corrections (all to the live source-of-truth: 77 modules, 189 CLI actions): * README: 181 -> 189 CLI actions (x3), the module-architecture table now lists 70-76, a Security Operations feature bullet, directory tree + region count to 77, and the test badge relabelled "structural tests" (distinct from the Pester unit-test badge) at the current count. * 34-Help.ps1: in-tool CLI-actions help 176 -> 189 + names the new actions. * ROADMAP / CONTRIBUTING / docs/ASSURANCE_CASE: module/test counts refreshed. * dist/ (chocolatey nuspec, scoop json, winget locale): action counts -> 189. New guard (Tests/Run-Tests.ps1, Section 174 "Documentation Freshness"): for README, CONTRIBUTING, ROADMAP, 34-Help, and the dist/ manifests, every quoted "NNN CLI/available actions" must equal the live -Action count, and README's module count must equal the live module count — derived from the codebase at test time, so a stale doc fails the suite (and Validate-Release) before publish. Docs + test-infra + a help string only — no behavioral change, no version bump.
1 parent a7c4982 commit 052ae2d

9 files changed

Lines changed: 80 additions & 21 deletions

File tree

CONTRIBUTING.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Contributing to RackStack
1+
# Contributing to RackStack
22

33
Thanks for your interest in contributing! Here's how to get started.
44

@@ -30,7 +30,7 @@ powershell -ExecutionPolicy Bypass -File Tests\pssa-check.ps1
3030

3131
## Pull Request Checklist
3232

33-
- [ ] All 4,759 tests pass (`Run-Tests.ps1` exits with code 0)
33+
- [ ] All 5,002 tests pass (`Run-Tests.ps1` exits with code 0)
3434
- [ ] PSScriptAnalyzer reports 0 errors (`pssa-check.ps1`)
3535
- [ ] Monolithic synced (`sync-to-monolithic.ps1` shows 0 parse errors)
3636
- [ ] New functions follow PowerShell verb-noun naming (`Get-`, `Set-`, `Test-`, `Show-`)

Modules/34-Help.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ function Search-HelpTopics {
253253
@{ Title = "Performance"; Keywords = @("performance", "cpu", "memory", "disk", "io", "bandwidth", "dashboard", "process"); Description = "Live performance dashboard with CPU, memory, disk I/O, and network bandwidth monitoring" }
254254
@{ Title = "Licensing & NTP"; Keywords = @("license", "activation", "kms", "avma", "ntp", "time", "timezone", "clock"); Description = "Windows licensing status (KMS/AVMA/Retail), NTP configuration, time sync, and timezone setup" }
255255
@{ Title = "VM Management"; Keywords = @("checkpoint", "snapshot", "export", "import", "migration", "vhd", "iso"); Description = "VM checkpoints, export/import, migration readiness, VHD health, and ISO inventory" }
256-
@{ Title = "CLI Actions"; Keywords = @("cli", "action", "headless", "automation", "fleet", "json", "audit", "scan", "score", "dashboard", "monitor", "policy", "sla", "netmap", "validate"); Description = "176 CLI actions for headless automation. Run -ListActions to see all. JSON output via -OutputFormat JSON. Key: PolicyCheck, SLAReport, NetMap, Validate, ServerScore, HealthDashboard, FleetReport." }
256+
@{ Title = "CLI Actions"; Keywords = @("cli", "action", "headless", "automation", "fleet", "json", "audit", "scan", "score", "dashboard", "monitor", "policy", "sla", "netmap", "validate"); Description = "189 CLI actions for headless automation. Run -ListActions to see all. JSON output via -OutputFormat JSON. Key: ServerScore, HealthDashboard, FleetReport, CISScan, NPSSetup, AlwaysOnVPNSetup, SIEMStatus." }
257257
@{ Title = "SelfTest Action"; Keywords = @("selftest", "self-test", "diagnose", "diagnostic", "verify", "healthcheck", "sanity"); Description = "Internal diagnostic. -Action SelfTest checks PS version, elevation, module count, version consistency, defaults.json validity, temp path writability, FileServer reachability, and agent installer config. Exit 1 on any failure. Use -OutputFormat JSON for structured output." }
258258
@{ Title = "Security Audits"; Keywords = @("security", "audit", "hardening", "compliance", "tls", "smb", "kerberos", "credguard", "applocker", "bitlockeraudit", "defenderexclusionaudit", "audit-policy", "secureboot", "tpm"); Description = "Security-focused CLI audits: TLSAudit, SMBAudit, KerberosAudit, CredGuardAudit, AppLockerAudit, BitLockerAudit, DefenderExclusionAudit, AuditPolicyAudit, SecureBootAudit, TPMAudit, UserAudit, LogonAudit, InsecureServiceAudit, RegistryAudit. All support -OutputFormat JSON." }
259259
@{ Title = "Network Audits"; Keywords = @("netaudit", "dns", "firewall-audit", "firewalllog", "arp", "route", "tcp", "netstat", "dhcp", "netprofile", "winrm", "qos", "nicoffload"); Description = "Network audits: DNSAudit, DNSCacheAudit, FirewallAudit, FirewallRuleAudit, FirewallLogAudit, ARPTableAudit, RouteTableAudit, TcpSettingsAudit, NetStatAudit, DHCPAudit, NetworkProfileAudit, WinRMAudit, QoSPolicyAudit, NICOffloadAudit, NICErrorAudit, HostsFileAudit, VPNAudit, ProxyAudit." }

README.md

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<a href="https://www.bestpractices.dev/projects/12921"><img alt="OpenSSF Best Practices" src="https://www.bestpractices.dev/projects/12921/badge"></a>
2929
<a href="https://codecov.io/gh/TheAbider/RackStack"><img alt="codecov" src="https://codecov.io/gh/TheAbider/RackStack/branch/master/graph/badge.svg"></a>
3030
<img alt="PSScriptAnalyzer 0 errors" src="https://img.shields.io/badge/PSScriptAnalyzer-0%20errors-brightgreen">
31-
<img alt="4990 tests" src="https://img.shields.io/badge/tests-4990-brightgreen">
31+
<img alt="5002 structural tests" src="https://img.shields.io/badge/structural%20tests-5002-brightgreen">
3232
<img alt="Pester 312 tests" src="https://img.shields.io/badge/Pester-312%20tests-brightgreen">
3333
<img alt="SLSA Level 3" src="https://slsa.dev/images/gh-badge-level3.svg">
3434
</p>
@@ -37,7 +37,7 @@
3737
3838
---
3939

40-
RackStack is a menu-driven PowerShell tool that automates everything between "Windows is installed" and "server is in production." Where sconfig gives you 15 options, RackStack gives you 181 CLI actions and 60+ interactive menus covering networking, Hyper-V, SAN/iSCSI, clustering, VM deployment, cloud onboarding, and batch automation, all with undo, transaction rollback, and audit logging.
40+
RackStack is a menu-driven PowerShell tool that automates everything between "Windows is installed" and "server is in production." Where sconfig gives you 15 options, RackStack gives you 189 CLI actions and 60+ interactive menus covering networking, Hyper-V, SAN/iSCSI, clustering, VM deployment, cloud onboarding, and batch automation, all with undo, transaction rollback, and audit logging.
4141

4242
Built for MSPs, sysadmins, and infrastructure teams who build servers repeatedly and want it done right every time.
4343

@@ -61,10 +61,12 @@ Built for MSPs, sysadmins, and infrastructure teams who build servers repeatedly
6161

6262
**Automation** -- JSON-driven batch mode (24 idempotent steps with transaction rollback), Quick Setup Wizard, configuration export/import, HTML reports, JSON audit logging with rotation
6363

64-
**Monitoring** -- 181 CLI actions with JSON output for fleet automation, `ServerScore` (unified 0-100 health grade), `HealthDashboard` (all-in-one monitoring endpoint), `ClusterHealthScore`, `StorageHealthScore`, System Center (SCCM/SCOM/WAC) + Azure AD/Intune integration
64+
**Monitoring** -- 189 CLI actions with JSON output for fleet automation, `ServerScore` (unified 0-100 health grade), `HealthDashboard` (all-in-one monitoring endpoint), `ClusterHealthScore`, `StorageHealthScore`, System Center (SCCM/SCOM/WAC) + Azure AD/Intune integration
6565

6666
**Cloud & Security** -- Azure Arc server onboarding (install the Connected Machine Agent, connect the host to Azure's hybrid management plane via service-principal auth); Microsoft Defender for Endpoint onboarding (activate the built-in EDR sensor against your tenant, with a built-in detection test)
6767

68+
**Security Operations** -- Network Policy Server (RADIUS) for 802.1X / VPN authentication, Always-On VPN (RRAS gateway + device/user-tunnel ProfileXML generation), CIS Windows Server L1 compliance scanning (read-only, severity-weighted score + HTML/JSON report), and SIEM log forwarding (Windows Event Forwarding plus Splunk Universal Forwarder / Elastic Winlogbeat config); plus Group Policy backup/restore/drift and Just Enough Administration (JEA) constrained endpoints
69+
6870
**Monitoring & Diagnostics** -- Health dashboard (disk I/O latency, NIC errors, memory pressure, Hyper-V guest health, top CPU processes), performance snapshots with trend reports and "days until full" estimates, event log viewer, service manager, network diagnostics (ping, traceroute, port test, subnet sweep, DNS, ARP)
6971

7072
**Drift Detection** -- Save configuration baselines, compare snapshots over time, track setting changes across baselines, auto-baseline after batch mode
@@ -435,7 +437,7 @@ $report.Issues
435437

436438
**Tiers:** `Light` (minimal, safe for prod), `Standard` (recommended), `Aggressive` (maximum cleanup/debloat).
437439

438-
### 181 CLI Actions
440+
### 189 CLI Actions
439441

440442
| Category | Actions |
441443
|----------|---------|
@@ -480,10 +482,10 @@ RackStack/
480482
├── Modules/
481483
│ ├── 00-Initialization.ps1 # Constants, variables, config loading
482484
│ ├── 01-Console.ps1 # Console window management
483-
│ ├── ... # 67 more modules
484-
│ └── 69-StorageMigration.ps1
485+
│ ├── ... # 74 more modules
486+
│ └── 76-SIEMForwarder.ps1
485487
├── Tests/
486-
│ ├── Run-Tests.ps1 # 4,990 automated tests
488+
│ ├── Run-Tests.ps1 # 5,002 automated tests
487489
│ ├── Validate-Release.ps1 # Pre-release validation suite
488490
│ └── ...
489491
└── docs/
@@ -509,11 +511,18 @@ RackStack/
509511
| 67 | **Update Server** | WSUS install, post-install, configuration, and sync |
510512
| 68 | **PKI** | AD CS Certificate Authority bootstrap |
511513
| 69 | **Migration** | Storage Migration Service role setup |
514+
| 70 | **Dry Run** | Preview-and-commit mode for batch + CLI actions |
515+
| 71 | **Group Policy** | GPO backup, restore, and drift detection |
516+
| 72 | **JEA** | Just Enough Administration constrained endpoints |
517+
| 73 | **NPS** | Network Policy Server (RADIUS) for 802.1X / VPN auth |
518+
| 74 | **Always-On VPN** | Remote Access (RRAS) VPN gateway + ProfileXML generation |
519+
| 75 | **Compliance** | CIS Windows Server L1 benchmark scanner (read-only, scored) |
520+
| 76 | **SIEM Forwarder** | WEF / Splunk / Winlogbeat log forwarding + Sentinel readiness |
512521
513522
## Testing
514523
515524
```powershell
516-
# Full test suite (4,990 tests, ~4 minutes)
525+
# Full test suite (5,002 tests, ~4 minutes)
517526
powershell -ExecutionPolicy Bypass -File Tests\Run-Tests.ps1
518527
519528
# PSScriptAnalyzer (0 errors on all 77 modules + monolithic)
@@ -533,7 +542,7 @@ Tests cover parsing, module loading, function existence (615 functions), version
533542
4. Test: `.\Tests\Run-Tests.ps1`
534543
5. Compile: `Invoke-PS2EXE -InputFile 'RackStack v{ver}.ps1' -OutputFile 'RackStack.exe'`
535544

536-
The sync script matches `#region`/`#endregion` markers between modules and the monolithic file. All 76 region pairs are flat (non-nested). Use `-DryRun` to preview.
545+
The sync script matches `#region`/`#endregion` markers between modules and the monolithic file. All 77 region pairs are flat (non-nested). Use `-DryRun` to preview.
537546

538547
> **File summary:** `RackStack.ps1` = modular loader (for dev). `RackStack v{version}.ps1` = monolithic build (for deployment). `RackStack.exe` = compiled from monolithic (for end users).
539548

ROADMAP.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ time.
99
The roadmap is intentionally narrow. RackStack is a single-maintainer
1010
project; commitments here are realistic, not aspirational.
1111

12-
Last updated: **2026-05-28** (v1.100.0).
12+
Last updated: **2026-05-29** (v1.107.0).
1313

1414
Recently shipped: the five hybrid-cloud / server-role feature modules
1515
(Azure Arc, Microsoft Defender for Endpoint, WSUS, AD CS, Storage
1616
Migration — v1.99.0) and session-wide **Interactive Dry-Run Mode**
17-
(v1.100.0). RackStack is now 71 modules.
17+
(v1.100.0). The security-operations arc followed in v1.102-v1.107: GPO Manager (71), JEA (72), NPS/RADIUS (73), Always-On VPN (74), CIS compliance scanner (75), and SIEM log forwarder (76). RackStack is now 77 modules.
1818

1919
---
2020

@@ -48,7 +48,7 @@ Migration — v1.99.0) and session-wide **Interactive Dry-Run Mode**
4848
| Item | Why not |
4949
|---|---|
5050
| Cross-platform port (Linux, macOS) | RackStack's entire purpose is Windows Server configuration. Hyper-V, BitLocker, Failover Clustering, MPIO, AD DS, iSCSI initiator — none of these have a meaningful Linux/macOS equivalent in the same workflow. A port would be a different project. |
51-
| Switch from PowerShell to C# / Go / Rust | The existing 71 modules + 4,800+ regression tests would be lost. Rewrite cost-benefit is not justifiable. |
51+
| Switch from PowerShell to C# / Go / Rust | The existing 77 modules + 4,990 regression tests would be lost. Rewrite cost-benefit is not justifiable. |
5252
| GUI front-end | The 72-char box-drawing console UI is intentional; it works over RDP, SSH-tunneled PowerShell, and emergency console-only scenarios where a GUI cannot. |
5353
| Web dashboard | Out of scope. Operators integrate via the `-OutputFormat JSON` CLI surface and route into their own dashboards. |
5454
| External REST API | Same as above — `-OutputFormat JSON` is the integration surface. |

Tests/Run-Tests.ps1

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8970,6 +8970,56 @@ catch {
89708970
Write-TestResult "SIEM Forwarder Tests" $false $_.Exception.Message
89718971
}
89728972

8973+
# ============================================================================
8974+
# SECTION 174: DOCUMENTATION FRESHNESS (counts must match the codebase)
8975+
# ============================================================================
8976+
# Pre-release guard: every user-facing CLI-action count and module count baked
8977+
# into documentation must equal the live value computed from the source. This
8978+
# is what kept drifting (181 vs 189 actions; 65/71 vs 77 modules) across docs,
8979+
# the README badge, the in-tool help, and the package manifests. The harness is
8980+
# the right enforcement point — it already knows the ground truth.
8981+
Write-SectionHeader "SECTION 174: DOCUMENTATION FRESHNESS (counts match codebase)"
8982+
8983+
try {
8984+
# Live ground truth.
8985+
$epRaw = Get-Content "$modulesPath\50-EntryPoint.ps1" -Raw
8986+
$epListBlock = [regex]::Match($epRaw, '\$actionList = @\([\s\S]*?\)[\s\S]{0,50}CLIOutputFormat').Value
8987+
$liveActionCount = @([regex]::Matches($epListBlock, "Action\s*=\s*'")).Count
8988+
$liveModuleCount = $expectedModuleCount # 77 (00-76), asserted earlier
8989+
Write-TestResult "DocFreshness: live action count resolved ($liveActionCount)" ($liveActionCount -gt 0) "Found $liveActionCount"
8990+
8991+
# Doc files that quote a CLI-action count. (Wiki is a separate clone — not checked here.)
8992+
$docFiles = @('README.md', 'CONTRIBUTING.md', 'ROADMAP.md', 'Modules\34-Help.ps1',
8993+
'dist\chocolatey\rackstack.nuspec', 'dist\scoop\rackstack.json')
8994+
$wingetDir = Join-Path $script:ModuleRoot 'dist\winget'
8995+
if (Test-Path $wingetDir) { $docFiles += @(Get-ChildItem -Path $wingetDir -Recurse -Filter '*.yaml' -ErrorAction SilentlyContinue | ForEach-Object { $_.FullName }) }
8996+
8997+
foreach ($rel in $docFiles) {
8998+
$df = if ([System.IO.Path]::IsPathRooted($rel)) { $rel } else { Join-Path $script:ModuleRoot $rel }
8999+
$label = [System.IO.Path]::GetFileName($df)
9000+
if (-not (Test-Path -LiteralPath $df)) { continue }
9001+
$dt = Get-Content -LiteralPath $df -Raw
9002+
# Any "NNN [structured ]CLI action(s)" or "NNN available actions" must equal the live count.
9003+
$actionHits = @([regex]::Matches($dt, '(\d{2,4})\s+(?:structured\s+)?(?:CLI|available)\s+actions?'))
9004+
$staleAction = @($actionHits | Where-Object { [int]$_.Groups[1].Value -ne $liveActionCount })
9005+
Write-TestResult "DocFreshness: $label CLI-action count == $liveActionCount" ($staleAction.Count -eq 0) $(if ($staleAction.Count) { "stale: $(($staleAction | ForEach-Object { $_.Value }) -join ', ')" } else { "" })
9006+
}
9007+
9008+
# README module count: every ADJACENT "NNN modules" must equal the live module
9009+
# count. "NN more modules" (the directory-tree elision) has a word between the
9010+
# number and "modules", so the adjacency regex correctly skips it.
9011+
$readmeRaw = Get-Content (Join-Path $script:ModuleRoot 'README.md') -Raw
9012+
$modHits = @([regex]::Matches($readmeRaw, '(\d{2,4})\s+modules\b'))
9013+
$staleMod = @($modHits | Where-Object { [int]$_.Groups[1].Value -ne $liveModuleCount })
9014+
Write-TestResult "DocFreshness: README module count == $liveModuleCount" ($staleMod.Count -eq 0) $(if ($staleMod.Count) { "stale: $(($staleMod | ForEach-Object { $_.Value }) -join ', ')" } else { "" })
9015+
9016+
# README test badge label is the specific 'structural tests' (distinct from the Pester badge).
9017+
Write-TestResult "DocFreshness: README test badge uses a specific label" ($readmeRaw -match 'structural%20tests|structural tests')
9018+
}
9019+
catch {
9020+
Write-TestResult "Documentation Freshness Tests" $false $_.Exception.Message
9021+
}
9022+
89739023
# ============================================================================
89749024
# FINAL SUMMARY
89759025
# ============================================================================

dist/chocolatey/rackstack.nuspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<tags>windows-server hyper-v iscsi clustering powershell sysadmin automation msp admin-tools</tags>
1919
<summary>PowerShell automation toolkit for configuring Windows Server hosts</summary>
2020
<description>
21-
RackStack is a menu-driven PowerShell tool that automates everything between "Windows is installed" and "server is in production." 176 CLI actions and 60+ interactive menus covering networking, Hyper-V, SAN/iSCSI, clustering, VM deployment, and batch automation, all with undo, transaction rollback, and audit logging.
21+
RackStack is a menu-driven PowerShell tool that automates everything between "Windows is installed" and "server is in production." 189 CLI actions and 60+ interactive menus covering networking, Hyper-V, SAN/iSCSI, clustering, VM deployment, and batch automation, all with undo, transaction rollback, and audit logging.
2222

2323
Built for MSPs, sysadmins, and infrastructure teams who build servers repeatedly and want it done right every time.
2424

dist/scoop/rackstack.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "https://raw.githubusercontent.com/ScoopInstaller/Scoop/master/schema.json",
33
"version": "0.0.0",
4-
"description": "PowerShell automation toolkit for configuring Windows Server hosts — Hyper-V virtualization hosts, failover cluster nodes, iSCSI storage clients, Active Directory members, and standalone servers. Ships as a code-signed EXE plus a PowerShell Gallery wrapper module exposing 175+ structured CLI actions.",
4+
"description": "PowerShell automation toolkit for configuring Windows Server hosts — Hyper-V virtualization hosts, failover cluster nodes, iSCSI storage clients, Active Directory members, and standalone servers. Ships as a code-signed EXE plus a PowerShell Gallery wrapper module exposing 189 structured CLI actions.",
55
"homepage": "https://github.com/TheAbider/RackStack",
66
"license": "MIT",
77
"url": "https://github.com/TheAbider/RackStack/releases/download/v0.0.0/RackStack.exe",

dist/winget/1.99.1/TheAbider.RackStack.locale.en-US.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Copyright: Copyright (c) 2026 TheAbider
1313
ShortDescription: PowerShell automation toolkit for configuring Windows Server hosts.
1414
Description: |-
1515
RackStack is a menu-driven PowerShell tool that automates everything between
16-
"Windows is installed" and "server is in production." It provides 181 CLI
16+
"Windows is installed" and "server is in production." It provides 189 CLI
1717
actions and 60+ interactive menus covering networking, Hyper-V, SAN/iSCSI,
1818
clustering, VM deployment, cloud onboarding, and batch automation, all with
1919
undo, transaction rollback, and audit logging. Built for MSPs, sysadmins,

docs/ASSURANCE_CASE.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ threat.
154154
| Action-history file moved out of `C:\Temp` to ACL-locked `%ProgramData%\<Tool>\state\` | v1.98.55 fix; see `Get-RackStackSecureStateDir` helper. |
155155
| Batch-undo state file ACL-verified on load | `Modules/50-EntryPoint.ps1` `Invoke-BatchMode``Test-RackStackStateFileAcl` refuses to deserialize if any non-admin SID has write access. |
156156
| File-server downloads use HTTPS only; no http:// scheme allowed | `Modules/39-FileServer.ps1``BaseURL` is operator-set and documented as HTTPS-only. |
157-
| All `Start-Process -ArgumentList` use array form when arguments could come from any input that's not maintainer-controlled | Audited across all 65 modules in round 33. |
157+
| All `Start-Process -ArgumentList` use array form when arguments could come from any input that's not maintainer-controlled | Audited across all 77 modules (rounds 33+ include the NPS, Always-On VPN, Compliance, and SIEM-Forwarder modules). |
158158

159159
**Counter-argument considered.** An attacker who's already an admin
160160
could write to HKLM. **Response:** correct — but they already won.
@@ -240,13 +240,13 @@ following are acknowledged and tracked:
240240

241241
### CR-3: Pester coverage is measured on a subset of modules
242242
- 96.18% coverage applies to 3 modules (03-InputValidation,
243-
22-Password, 02-Logging). The other 62 modules are covered by the
243+
22-Password, 02-Logging). The other 74 modules are covered by the
244244
regex-pattern harness, which is structural rather than line-based.
245245
- Mitigation: expanding measured coverage is a tracked roadmap item
246246
(`ROADMAP.md` Next quarter).
247247
- Honest scope statement: a Pester-measured 96% is not the same as a
248248
whole-codebase 96%; readers should weight the regex harness's
249-
4598-pattern coverage alongside.
249+
4990-pattern coverage alongside.
250250

251251
### CR-4: ps2exe PE timestamp non-determinism
252252
- The compiled EXE has a PE COFF timestamp field that's set by ps2exe

0 commit comments

Comments
 (0)