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
@@ -20,14 +20,14 @@
<i class="bi bi-info-circle text-primary me-2"></i>Overview
</h2>
<p>
The Equipment module lets you keep a full register of every piece of machinery in your shop
The Equipment module lets you keep a full register of every piece of machinery in your shop &mdash;
curing ovens, sandblasters, coating booths, compressors, conveyors, and anything else you
rely on to do the work. Each equipment record includes its current operating status and a
complete maintenance log.
</p>
<p>
Keeping this information up to date pays off in two ways. First, your team always knows
which machines are available and which are down for service preventing jobs from being
which machines are available and which are down for service &mdash; preventing jobs from being
scheduled on equipment that is not ready. Second, the maintenance history gives you a
paper trail for warranty claims, insurance, and resale.
</p>
@@ -46,14 +46,14 @@
<li class="mb-2">
Fill in the equipment details:
<ul class="mt-1">
<li><strong>Name</strong> a short, descriptive name (e.g., "Main Curing Oven" or "Blast Cabinet #2").</li>
<li><strong>Model / Serial Number</strong> from the manufacturer's plate on the machine. Useful for warranty and service calls.</li>
<li><strong>Manufacturer</strong> who made the equipment.</li>
<li><strong>Purchase Date</strong> when your shop acquired it.</li>
<li><strong>Last Service Date</strong> the date it was last professionally serviced or inspected.</li>
<li><strong>Next Service Due</strong> when the next scheduled service is due. This triggers alerts on the Dashboard.</li>
<li><strong>Location</strong> where in the shop the equipment is located (e.g., "Bay 1", "Back Room").</li>
<li><strong>Notes</strong> any important operational notes, quirks, or warnings for the team.</li>
<li><strong>Name</strong> &mdash; a short, descriptive name (e.g., "Main Curing Oven" or "Blast Cabinet #2").</li>
<li><strong>Model / Serial Number</strong> &mdash; from the manufacturer's plate on the machine. Useful for warranty and service calls.</li>
<li><strong>Manufacturer</strong> &mdash; who made the equipment.</li>
<li><strong>Purchase Date</strong> &mdash; when your shop acquired it.</li>
<li><strong>Last Service Date</strong> &mdash; the date it was last professionally serviced or inspected.</li>
<li><strong>Next Service Due</strong> &mdash; when the next scheduled service is due. This triggers alerts on the Dashboard.</li>
<li><strong>Location</strong> &mdash; where in the shop the equipment is located (e.g., "Bay 1", "Back Room").</li>
<li><strong>Notes</strong> &mdash; any important operational notes, quirks, or warnings for the team.</li>
</ul>
</li>
<li class="mb-2">Set the initial <strong>Status</strong> (see below).</li>
@@ -67,7 +67,7 @@
</h2>
<p>
Every piece of equipment has a status that reflects its current condition. Update the status
whenever the equipment's situation changes this keeps the Dashboard accurate and lets
whenever the equipment's situation changes &mdash; this keeps the Dashboard accurate and lets
supervisors quickly see what is available.
</p>
@@ -146,14 +146,14 @@
<li class="mb-2">
Fill in the details:
<ul class="mt-1">
<li><strong>Task Description</strong> what was done or needs to be done (e.g., "Replace heating element", "Annual burner service", "Belt tension check").</li>
<li><strong>Type</strong> choose <strong>Scheduled</strong> for planned preventive maintenance, or <strong>Corrective</strong> for repairs to fix a problem.</li>
<li><strong>Scheduled Date</strong> when the task is planned for (or when it was done).</li>
<li><strong>Completion Date</strong> leave blank if the task has not been done yet.</li>
<li><strong>Cost</strong> what the service cost (parts, labor, contractor fees).</li>
<li><strong>Priority</strong> how urgent this task is (see below).</li>
<li><strong>Assigned To</strong> the shop worker responsible for this task.</li>
<li><strong>Notes</strong> parts used, observations, instructions for next time.</li>
<li><strong>Task Description</strong> &mdash; what was done or needs to be done (e.g., "Replace heating element", "Annual burner service", "Belt tension check").</li>
<li><strong>Type</strong> &mdash; choose <strong>Scheduled</strong> for planned preventive maintenance, or <strong>Corrective</strong> for repairs to fix a problem.</li>
<li><strong>Scheduled Date</strong> &mdash; when the task is planned for (or when it was done).</li>
<li><strong>Completion Date</strong> &mdash; leave blank if the task has not been done yet.</li>
<li><strong>Cost</strong> &mdash; what the service cost (parts, labor, contractor fees).</li>
<li><strong>Priority</strong> &mdash; how urgent this task is (see below).</li>
<li><strong>Assigned To</strong> &mdash; the shop worker responsible for this task.</li>
<li><strong>Notes</strong> &mdash; parts used, observations, instructions for next time.</li>
</ul>
</li>
<li class="mb-2">Click <strong>Save</strong>.</li>
@@ -167,7 +167,7 @@
<h3 class="h6 fw-semibold mt-3 mb-2">Recurring Maintenance</h3>
<p>
For maintenance that happens on a regular schedule (e.g., monthly filter cleaning, quarterly
burner service), set the <strong>Recurrence</strong> field when creating the record choose
burner service), set the <strong>Recurrence</strong> field when creating the record &mdash; choose
from Daily, Weekly, Monthly, Quarterly, or Annually. When you complete the record, the system
automatically creates the next maintenance record at the appropriate interval. This ensures
preventive maintenance tasks never fall through the cracks.
@@ -248,7 +248,7 @@
<ol class="mb-3">
<li class="mb-2">Go to the Oven Scheduler from the sidebar.</li>
<li class="mb-2">Select the oven you are loading.</li>
<li class="mb-2">Add jobs to the batch the remaining capacity updates as you add items.</li>
<li class="mb-2">Add jobs to the batch &mdash; the remaining capacity updates as you add items.</li>
<li class="mb-2">Progress batches through Loading → In Progress → Completed as work is done.</li>
</ol>
<p>
@@ -262,7 +262,7 @@
<i class="bi bi-person-gear text-primary me-2"></i>Assigning Maintenance Tasks
</h2>
<p>
Each maintenance record can be assigned to one shop worker typically someone in the
Each maintenance record can be assigned to one shop worker &mdash; typically someone in the
<strong>Maintenance</strong> role, or a <strong>Supervisor</strong> who will coordinate
with an outside service technician.
</p>