fix: correct stale min attribute and MCP wording from inventory removal
Build CutList image / build-and-push (push) Successful in 23s

Three small leftovers from Task 7 / the inventory-quantity-tracking
removal that a final review caught:

- Edit.razor's custom-stock quantity input still had min="1" even
  though its own helper text says "Use -1 for unlimited", validation
  already accepts -1, and the add-form defaults Quantity to -1 - so
  the field rendered pre-populated with a value the browser's native
  min validation flagged as invalid. Matches the min="-1" fix already
  applied to the catalog-stock input in Task 7.
- optimize_job's MCP tool description still claimed the optimizer
  falls back to "available inventory" when no stock is configured -
  that auto-discovery fallback was removed in Task 3. An LLM reads
  this description as ground truth, so stale wording here actively
  misleads tool use. Also tightened add_job_stock's stockItemId/
  isCustomLength wording, which still said "inventory" for what is
  now just the stock catalog.
- CLAUDE.md's CutListPackingService summary said InStockBins comes
  "from inventory", nudging future readers back toward the
  auto-discovery mental model this plan removed.
This commit is contained in:
aj
2026-08-01 11:39:35 -04:00
parent d8656cc454
commit ec52834cd4
3 changed files with 5 additions and 5 deletions
+1 -1
View File
@@ -162,7 +162,7 @@ Abstract base with TPC (Table Per Concrete type) mapping — each shape gets its
### CutListPackingService
- `PackAsync(parts, kerfInches, jobStock?)` — runs optimization per material group
- Separates results into `InStockBins` (from inventory) and `ToBePurchasedBins`
- Separates results into `InStockBins` (from catalog-sourced job stock) and `ToBePurchasedBins`
- `GetSummary(result)` — calculates total bins, pieces, waste, efficiency %
- `SerializeResult(result)` / `LoadSavedResult(json)` — JSON round-trip via DTO layer (`SavedOptimizationResult` etc.)
+3 -3
View File
@@ -257,9 +257,9 @@ public class JobTools
string length,
[Description("Quantity available (-1 for unlimited, default -1)")]
int quantity = -1,
[Description("Stock item ID from inventory (optional - links to tracked inventory)")]
[Description("Stock item ID from the stock catalog (optional - links to a specific catalog stock item)")]
int? stockItemId = null,
[Description("True if this is a custom length not from inventory (default false)")]
[Description("True if this is a custom length not sourced from the stock catalog (default false)")]
bool isCustomLength = false,
[Description("Priority - lower number = used first (default 10)")]
int priority = 10)
@@ -304,7 +304,7 @@ public class JobTools
#region Optimization
[McpServerTool(Name = "optimize_job"), Description("Runs bin packing optimization on a job. The job must have parts defined. If stock is defined, it will be used; otherwise the optimizer uses available inventory. Returns optimized cut layouts per material with efficiency stats.")]
[McpServerTool(Name = "optimize_job"), Description("Runs bin packing optimization on a job. The job must have parts defined, and stock must be explicitly configured on the job (via add_job_stock) for each material used by its parts - there is no fallback to inventory; parts with no matching stock configured come back as items not placed. Returns optimized cut layouts per material with efficiency stats.")]
public async Task<OptimizeJobResult> OptimizeJob(
[Description("Job ID")]
int jobId,
+1 -1
View File
@@ -869,7 +869,7 @@ else
</div>
<div class="col-md-3">
<label class="form-label">Quantity</label>
<input type="number" class="form-control" @bind="newStock.Quantity" min="1" />
<input type="number" class="form-control" @bind="newStock.Quantity" min="-1" />
<small class="text-muted">Use -1 for unlimited</small>
</div>
</div>