fix: correct stale min attribute and MCP wording from inventory removal
Build CutList image / build-and-push (push) Successful in 23s
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:
@@ -162,7 +162,7 @@ Abstract base with TPC (Table Per Concrete type) mapping — each shape gets its
|
|||||||
|
|
||||||
### CutListPackingService
|
### CutListPackingService
|
||||||
- `PackAsync(parts, kerfInches, jobStock?)` — runs optimization per material group
|
- `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 %
|
- `GetSummary(result)` — calculates total bins, pieces, waste, efficiency %
|
||||||
- `SerializeResult(result)` / `LoadSavedResult(json)` — JSON round-trip via DTO layer (`SavedOptimizationResult` etc.)
|
- `SerializeResult(result)` / `LoadSavedResult(json)` — JSON round-trip via DTO layer (`SavedOptimizationResult` etc.)
|
||||||
|
|
||||||
|
|||||||
@@ -257,9 +257,9 @@ public class JobTools
|
|||||||
string length,
|
string length,
|
||||||
[Description("Quantity available (-1 for unlimited, default -1)")]
|
[Description("Quantity available (-1 for unlimited, default -1)")]
|
||||||
int quantity = -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,
|
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,
|
bool isCustomLength = false,
|
||||||
[Description("Priority - lower number = used first (default 10)")]
|
[Description("Priority - lower number = used first (default 10)")]
|
||||||
int priority = 10)
|
int priority = 10)
|
||||||
@@ -304,7 +304,7 @@ public class JobTools
|
|||||||
|
|
||||||
#region Optimization
|
#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(
|
public async Task<OptimizeJobResult> OptimizeJob(
|
||||||
[Description("Job ID")]
|
[Description("Job ID")]
|
||||||
int jobId,
|
int jobId,
|
||||||
|
|||||||
@@ -869,7 +869,7 @@ else
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
<label class="form-label">Quantity</label>
|
<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>
|
<small class="text-muted">Use -1 for unlimited</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user