Sweep all .cshtml files for encoding corruption; add pre-commit guard

Replace all corruption variants with HTML entities across 226 view files:
- 3-char UTF-8-as-Win1252 sequences (ae-corruption)
- Standalone smart/curly quotes that break C# Razor expressions
- Partially re-corrupted variants where the 3rd byte was normalised to ASCII

tools/Fix-Encoding.ps1: re-runnable sweep; uses [char] code points so the
script itself never contains a literal non-ASCII character; supports -DryRun

.githooks/pre-commit: blocks commits containing the ae-corruption byte
signature (xc3xa2xe2x82xac); git core.hooksPath = .githooks so the
hook is repo-committed and active for all future work on this machine.

Build clean; 225 unit tests pass.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-20 21:37:10 -04:00
parent 21b39161a3
commit a0bdd2b5b4
252 changed files with 1785 additions and 1633 deletions
+18 -18
View File
@@ -20,7 +20,7 @@
<i class="bi bi-info-circle text-primary me-2"></i>Overview
</h2>
<p>
Vendors are the companies you buy from powder suppliers, primer manufacturers, consumables
Vendors are the companies you buy from &mdash; powder suppliers, primer manufacturers, consumables
distributors, equipment service providers, and anyone else who sends you a bill. Maintaining
accurate vendor records lets you track what you owe, reorder stock quickly, and keep purchase
history organized.
@@ -42,12 +42,12 @@
<li class="mb-2">
Fill in the vendor details:
<ul class="mt-1">
<li><strong>Vendor Name</strong> the company name as it appears on their invoices.</li>
<li><strong>Contact Name</strong> your sales rep or accounts contact.</li>
<li><strong>Email &amp; Phone</strong> for placing orders and following up on deliveries.</li>
<li><strong>Address</strong> the vendor's billing address.</li>
<li><strong>Website</strong> optional, handy for quick product lookups.</li>
<li><strong>Account Number</strong> your account number with this vendor, if applicable.</li>
<li><strong>Vendor Name</strong> &mdash; the company name as it appears on their invoices.</li>
<li><strong>Contact Name</strong> &mdash; your sales rep or accounts contact.</li>
<li><strong>Email &amp; Phone</strong> &mdash; for placing orders and following up on deliveries.</li>
<li><strong>Address</strong> &mdash; the vendor's billing address.</li>
<li><strong>Website</strong> &mdash; optional, handy for quick product lookups.</li>
<li><strong>Account Number</strong> &mdash; your account number with this vendor, if applicable.</li>
</ul>
</li>
<li class="mb-2">Set the <strong>Payment Terms</strong> (see below).</li>
@@ -64,7 +64,7 @@
</h2>
<p>
The <strong>Default Expense Account</strong> field records which accounting category purchases from
this vendor typically fall under for example, <em>Cost of Goods Sold</em>, <em>Shop Supplies</em>,
this vendor typically fall under &mdash; for example, <em>Cost of Goods Sold</em>, <em>Shop Supplies</em>,
or <em>Equipment Maintenance</em>.
</p>
<p>
@@ -87,11 +87,11 @@
examples include:
</p>
<ul class="mb-3">
<li><strong>Net 15</strong> payment due within 15 days of the invoice date.</li>
<li><strong>Net 30</strong> payment due within 30 days (the most common).</li>
<li><strong>Net 60</strong> payment due within 60 days.</li>
<li><strong>Due on Receipt</strong> pay immediately on delivery.</li>
<li><strong>2/10 Net 30</strong> 2% discount if paid within 10 days, otherwise full amount due in 30.</li>
<li><strong>Net 15</strong> &mdash; payment due within 15 days of the invoice date.</li>
<li><strong>Net 30</strong> &mdash; payment due within 30 days (the most common).</li>
<li><strong>Net 60</strong> &mdash; payment due within 60 days.</li>
<li><strong>Due on Receipt</strong> &mdash; pay immediately on delivery.</li>
<li><strong>2/10 Net 30</strong> &mdash; 2% discount if paid within 10 days, otherwise full amount due in 30.</li>
</ul>
<p>
When you enter terms here, they are automatically used as the default on any bills generated from
@@ -114,7 +114,7 @@
restocking an inventory item.
</p>
<p>
You can mark more than one vendor as preferred it is a flag, not an exclusive designation. Use
You can mark more than one vendor as preferred &mdash; it is a flag, not an exclusive designation. Use
it however makes sense for your workflow.
</p>
</section>
@@ -127,17 +127,17 @@
Open a vendor's Details page by clicking their name in the vendor list. Here you will find:
</p>
<ul>
<li><strong>Contact information</strong> all the details you entered, in one place.</li>
<li><strong>Contact information</strong> &mdash; all the details you entered, in one place.</li>
<li>
<strong>Inventory Items tab</strong> a list of every inventory item linked to this vendor.
<strong>Inventory Items tab</strong> &mdash; a list of every inventory item linked to this vendor.
This tells you at a glance what you buy from them. Click any item to open it.
</li>
<li>
<strong>Purchase History tab</strong> a log of all purchase orders and transactions recorded
<strong>Purchase History tab</strong> &mdash; a log of all purchase orders and transactions recorded
against this vendor, with dates and amounts.
</li>
<li>
<strong>Notes</strong> any notes you or your colleagues have saved.
<strong>Notes</strong> &mdash; any notes you or your colleagues have saved.
</li>
</ul>
<div class="alert alert-permanent alert-info d-flex gap-2 mb-0" role="alert">