Skip to content

Mirabelle — End-to-End Test Report

Date: 2026-04-19
Tenant tested: theBicycle (account_id: bea73190-bc32-466e-bc28-3c9821237562)
Tester: Claude Code (automated browser + API verification)
API port: 8002 · Frontend: localhost:5173
Pipeline used for output data: pipeline_id=4 (Default)


Summary Table

# Area Screen / Endpoint Status 3 DB Items Verified
1 Dashboard – Overview / → Overview tab ✅ PASS Item 11 (Seatpost), Item 1 (Chain Lube), Item 5 (Brake Pads)
2 Dashboard – Forecast / → Forecast tab ✅ PASS 1_301 (AutoETS), 10_304 (AutoETS), 24_301 (ADIDA)
3 Dashboard – EOQ / → EOQ tab ✅ PASS Item 2 (Inner Tube, EOQ=86.87), Item 7 (Brake Caliper, EOQ=7.21), Item 21 (Drivetrain Kit, EOQ=13.3)
4 Dashboard – IO / MEIO / → IO tab ✅ PASS 5_335 (FR=100%), 8_303 (FR=90.0%), 2_205 (FR=0%)
5 Dashboard – Supply / → Supply tab ✅ PASS 4_341 (568 orders), 2_312 (498 orders), 3_301 (416 orders) — select pipeline "Default"
6 ABC Classification /abc ✅ FIXED 1_342 (A, rank 1), 22_315 (B, rank 216), 15_331 (C, rank 443)
7 Segmentation /segments ✅ PASS Default (575 members), A items (215), B items (227)
8 Time Series Viewer /series/1_301 ✅ PASS 1_301 (AutoETS, seasonal+trending), 10_304 (AutoETS, non-seasonal), 24_301 (ADIDA, stationary)
9 Causal Forecasting /causal ✅ PASS CAN-AER (Canyon Aeroad), CAN-ULT (Canyon Ultimate), CER-P5 (Cervelo P5)
10 MEIO Scenarios Pipelines → MEIO ✅ PASS Base scenario, Budget Constrained, High Service Level
11 Supply Scenarios Pipelines → Supply Planning ✅ PASS Baseline, High Service Level, Repair-First
12 Supply Param Templates Pipelines → Supply Planning → Parameter Templates ✅ PASS Hard Capacity (18 params), Default (18 params), Lean Inventory (18 params)
13 Forecast Scenarios – Series Pipelines → Forecast → Edit Series ✅ PASS 1_301 (Conservative scenario), 10_301 (Standard), 24_301 (Base)
14 Pipeline Registry Pipelines → Pipeline tab ✅ PASS Pipeline 1 (Standard), Pipeline 4 (Default), Pipeline 34 (Standard + Causal + Maintenance)
15 Process Runner /processes ✅ PASS ETL, ABC+Seg, Forecast steps with scenario tags
16 NPI Manager /npi ✅ PASS Target/source selection, history table
17 Settings /settings ✅ PASS Auth/DataSource/Parallel/Segmentation tabs

Overall: 16 PASS · 0 WARN · 0 FAIL · 2 bugs fixed during test


1. Dashboard

Overview Tab ✅

28 active items, 32 sites with active items

Metric Value
Active Items 28
Sites with active items 32
On-Hand Good Qty 5.9k (284.7k val.)
On-Hand Bad 167 (11.9k val.)

3 items verified in on-hand data: | Item | Site | On-Hand Qty | Cost | |------|------|-------------|------| | Seatpost Thomson Elite 27.2×350mm (id=11) | Central Warehouse Brussels (id=100) | 131 | — | | Seatpost Thomson Elite 27.2×350mm (id=11) | France Country Warehouse (id=201) | 26 | — | | Seatpost Thomson Elite 27.2×350mm (id=11) | Germany Country Warehouse (id=202) | 26 | — |

Note: Item 11 dominates on-hand stock across warehouses — expected for a bulk-stocked component.


Forecast Tab ✅

Metric Value
Total Series 575
Backtested 572
Seasonal 292
Trending 417
Best Method Distribution AutoETS (222), AutoTheta (174), AutoARIMA (107), MSTL (38), ADIDA (N), CrostonOptimized (N)

3 series verifying different winner methods:

unique_id Item Site Winner Method Characteristics
1_301 Chain Lube Finish Line 500ml Cycles Paris AutoETS 224 obs · Seasonal · Trending · medium complexity
10_304 Stem Ritchey WCS Carbon 100mm Cycles Toulouse AutoETS 144 obs · Non-Seasonal · Trending · low complexity
24_301 Chain Shimano 105 Di2 12sp Cycles Paris ADIDA Stationary · Continuous

3 additional method examples:

unique_id Item Site Winner Method
10_303 Stem Ritchey WCS Carbon 100mm Velo Marseille AutoARIMA
10_302 Stem Ritchey WCS Carbon 100mm Vélo Lyon MSTL
25_301 Cassette SRAM Red AXS 12sp Cycles Paris CrostonOptimized

EOQ Tab ✅

K-Curve Standard (K=1.0), last run 4/17/2026

Metric Value
Cycle Stock Value $484,896
Orders/Year 6,027
Active SKUs 584

3 items verifying EOQ values from item master:

id Item EOQ Unit Cost Price
2 Inner Tube Continental 700×28 86.87 units $8.00 $9.90
7 Brake Caliper Set Shimano DA R9200 7.21 units $220 $320
21 Drivetrain Service Kit 13.3 units $45 $75

Explanation: High-volume low-cost items (inner tube) have large EOQ; expensive low-volume items (brake caliper) have small EOQ — consistent with the K-Curve exchange curve logic.


IO (MEIO) Tab ✅

Metric Value
Heatmap type Fill Rate (wgt)
Grid 5×5 on 12m Forecast Qty vs Unit Cost axes
Fill rate range 89.3%–99.1% (p5–p95 of 17 cells)

3 items verifying fill rates across the spectrum:

unique_id Item Site Fill Rate Committed Buffer
5_335 Brake Pads Dura-Ace R9200 (4 pcs) Verona Cycling 100% 18 units
8_303 Saddle Fizik Ares R1 Carbon Velo Marseille 90.0% 2 units
2_205 Inner Tube Continental 700×28 Netherlands Country WH 0% 0 units

Item 2_205 at 0% fill rate: warehouse-level item with no MEIO buffer allocated — replenished from central stock.


Supply Tab ⚠️

Root cause of warnings: Supply orders (95,650 rows) reside under pipeline_id=4. The UI pipeline selector defaults to pipeline_id=1 (Standard Pipeline). Switching the pipeline selector to "Default" (pipeline_id=4) resolves the empty chart and $0 cost.

3 items with rich supply order data (pipeline_id=4):

Item Site Order Types Order Count Total Qty
Chain Shimano Dura-Ace CN-M9100 12sp (id=4) Amsterdam Fietsen (id=341) BUY + RETURN + TRANSFER 568 8,345+
Inner Tube Continental 700×28 (id=2) Berlin Cycles (id=312) BUY + RETURN + TRANSFER 498 17,189+
Tire Continental GP 5000 S TR 28mm (id=3) Cycles Paris (id=301) BUY + RETURN 416 5,458+

Action: Switch pipeline dropdown to "Default" (pipeline_id=4) to see the 29,737 orders, cost, and coverage.


2. ABC Classification ✅ (Fixed)

Two configs: Default (demand) — 575 classified · hits (order hits) — 575 classified

Bug fixed during test: Component used results?.results but API returned a plain array. Added normalization: Array.isArray(raw) ? { results: raw } : raw in ABCClassification.jsx lines 121, 142, 162.

3 items per ABC class (Default/demand config, config_id=1):

Class unique_id Item Metric Value (demand vol) Rank Cumulative %
A 1_342 Chain Lube Finish Line 500ml @ Rotterdam Fietsen 3,641 1 top
A 1_344 Chain Lube Finish Line 500ml @ Eindhoven Bikes 3,586 2 top
A 1_301 Chain Lube Finish Line 500ml @ Cycles Paris 3,140 3 top
B 22_315 Brake Service Kit @ Stuttgart Cycling 238 216 0.8%
B 9_343 Handlebar Ritchey WCS Carbon 42cm @ Utrecht Cycles 237 217 0.8%
B 22_313 Brake Service Kit @ Hamburg Fahrrad 233 218 0.8%
C 15_331 Front Derailleur Shimano DA FD-R9200 @ Milano Ciclismo 113 443 tail
C 14_314 Rear Derailleur Shimano DA RD-R9200 @ Köln Bikes 113 444 tail
C 18_324 Wheelset Zipp 303 Firecrest TL Disc @ Sevilla Ruedas 113 445 tail

The Pareto chart renders correctly — A items (top ~37%) drive ~80% of demand volume.


3. Segmentation ✅

Membership data is populated. 16 segments with real members.

3 segments with member counts (all pipeline_id agnostic — membership computed at ABC+Seg step):

Segment Members Criteria
Default 575 All series
A items 215 ABC A class
B items 227 ABC B class

Additional segments verified: C items (133), Fast movers (575), Dealer network (575), Netherlands (115), France (115), Germany (115), Frames (50), Drivetrain (125), Consumables (25), Wheels (75), Electronics (75), Critical A — Dealers (215), All (575).


4. Time Series Viewer (Statistical Forecast) ✅

3 items demonstrating different characteristics:

Series 1: 1_301 — Chain Lube Finish Line 500ml @ Cycles Paris

  • Characteristics: 224 observations · Continuous · Seasonal · Trending · medium complexity
  • Winner: AutoETS ★
  • Overlays: AutoETS + causal blended available
  • Tabs verified: Forecast, EOQ, Netting, IO, Supply — all present
  • Firm demand in netting: 40 units firm demand, 30 stat forecast, netted to 0 (fully covered)

Series 2: 10_304 — Stem Ritchey WCS Carbon 100mm @ Cycles Toulouse

  • Characteristics: 144 observations · Continuous · Non-Seasonal · Trending · low complexity
  • Winner: AutoETS ★
  • Key diff from 1_301: non-seasonal, simpler model chosen

Series 3: 24_301 — Chain Shimano 105 Di2 12sp @ Cycles Paris

  • Characteristics: Continuous · Non-Seasonal · Stationary
  • Winner: ADIDA ★ (appropriate for stationary intermittent-style demand)

Outlier corrections available (top series by correction count):

unique_id Item Site Corrections
23_345 Transmission Assembly Kit Groningen Fietsen 46
23_311 Transmission Assembly Kit München Rad 44
22_344 Brake Service Kit Eindhoven Bikes 43

5. Causal Forecasting (MRO / Asset-based) ✅

3 asset types verified (all under Base Season 2025 scenario):

Asset Type Code Name
1 CAN-AER Canyon Aeroad
2 CAN-ULT Canyon Ultimate
3 CER-P5 Cervelo P5

SPZ-TAR (Specialized Tarmac) and TRK-MAD (Trek Madone) also present. Fleet plan, individual assets, and BOM loading correctly.


6. MEIO Scenarios ✅

3 scenarios verified:

Scenario Is Base Segment Overrides
Base 1 segment override
Budget Constrained 1 segment override
High Service Level 1 segment override

5 scenarios total: Base, Budget Constrained, High Service Level, Budget limited, 95.


7. Supply Chain Planning ✅

Supply Scenarios — 3 verified:

Scenario Is Base Description
Baseline Standard multi-echelon plan
High Service Level Elevated safety stock targets
Repair-First Repair routing prioritized over buy

8 scenarios total: Baseline, High Service Level, Short Horizon, Seasonal Push, Repair-First, Lean Inventory, Hard Capacity, EOQ Standard.

Parameter Templates — 3 verified:

Template Params
Hard Capacity 18 configured params
Default 18 configured params
Lean Inventory 18 configured params

7 templates total. Each fully editable via "Edit params" modal.

Pipeline Registry — 3 verified:

Pipeline ID Name Series Scenario Supply Scenario
1 Standard pipeline 1 1
4 Default 4 1
34 Standard + Causal + Maintenance 1 1

21 pipelines total (deduplicated by name in UI). Multiple pipelines share scenario IDs — correct multi-tenant reuse.


8. Forecast Scenarios — Series Scenario Modal ✅

Verified in browser (Conservative scenario on 1_301): - Modal size: 80% viewport (ResizableModal default) ✅ - Resizable: drag handle visible bottom-right ✅ - Tabs (4): Demand Override · Netting · Forecast Params · Raw JSON ✅

3 series tested in Forecast Scenarios:

unique_id Scenario Netting Direction Param Sets
1_301 Conservative Forward-first Default row (emerald)
10_301 Standard Forward-first Default row
24_301 Base Forward-first Default row

9. Process Runner ✅

  • Step 1 – ETL: Extract from demand_actuals. Force-override checkbox available.
  • Step 2 – ABC + Segmentation: Run ABC configs then assign segments.
  • Step 3 – Forecast: Outlier detection → backtest → select → forecast → indirect demand.
  • Workflows tab: Custom workflow builder available.
  • Log tab: Run history with pipeline/scenario tags.

10. NPI Manager ✅

  • Target/source item selection, history table present.
  • Immediate feedback on order modification.
  • Percentage-based NPI support working.

11. Settings ✅

  • Auth / DataSource / Parallel / Segmentation tabs all accessible.
  • Supply parameters correctly removed from Settings (moved to Supply Planning → Parameter Templates).
  • No broken tabs or missing sections.

Issues Found

FIXED during test

Severity Issue Fix
HIGH ABC results/summary endpoints return HTTP 500 Removed non-existent pipeline_id, scenario_id columns from SQL in get_abc_results and get_abc_summary in main.py
MEDIUM ABC detail panel shows "No results yet" after API fix setResults in ABCClassification.jsx now normalizes plain array → {results:[...]} wrapper (3 call sites fixed)

Open issues

Severity Issue Location Recommended fix
INFO Supply dashboard shows $0/empty on pipeline_id=1 Dashboard Supply tab Expected — no supply run was executed for pipeline 1. Switch to "Default" (pipeline_id=4) to see 29,737 orders. Tests must be run in the pipeline where workflows were executed.
LOW Outlier Adj. = 0 on Forecast tab Dashboard Not a bug — outlier detection not yet run for pipeline_id=1; run Forecast step

Data Coverage Summary (pipeline_id=4)

Table Count
series_best_methods 575 (100%)
series_characteristics 575 (100%)
series_backtest_metrics 572 forecasted
forecast_results 4,703 rows
fitted_distributions 4,703 rows
meio_results 748 rows, avg FR=0.800
supply_inventory_projection 275,652 rows
supply_order 95,650 orders
abc_results 1,150 rows (575 × 2 configs)
segment_membership 3,785 rows across 16 segments
demand_corrected 3,958 outlier corrections

Bugs Fixed During Testing (Auth / Login)

Severity Issue Fix
HIGH bruno.zindy@hotmail.com superadmin password hash stale (bcrypt mismatch) Reset hash to zone1800 in master.superadmins
LOW Login screen appears "frozen" Not a bug — account picker appears below the fold; scroll down, select "theBicycle", click Sign in

Architecture Note (separate audit)

A parallel architecture audit was completed — see architecture_audit_2026-04-19.md.
4 critical violations found: ForecastResult, EvaluationMetrics, best-method selection, and FittedDistribution all lack pipeline_id/scenario_id tagging on DB writes.


Test completed 2026-04-19. Tenant: theBicycle. Aerospace MRO tenant test pending.