Operational outcome
Expose abnormal state first, then the minimum site-level values needed to decide which subsystem to inspect.
A deterministic product contract for the facility alarm strip, power/cooling/environment/sustainability KPIs, contextual image, subsystem routes, basis drawers, generated design and FAQ in dc-conventional.html. The cockpit is a modeled teaching aid, not live BMS telemetry.
A conventional facility overview must reconcile electrical demand, cooling duty, environment, resilience and alarm state before routing a user to subsystem pages. Static marketing callouts cannot provide that trust; every primary result needs a denominator, source class and repeatable calculation.
Expose abnormal state first, then the minimum site-level values needed to decide which subsystem to inspect.
Keep PUE, facility/IT load, CHW, WUE, carbon and fuel arithmetic on one immutable scenario and surface placeholders honestly.
| Persona | Goal | Primary read | Success condition |
|---|---|---|---|
| Facilities operator | Determine whether the site is normal and where to drill next. | Alarm strip → KPI strip → subsystem rail. | Can name alarm count, comms/quality, active capacity and next subsystem. |
| Electrical engineer | Reconcile protected IT, facility input and UPS sharing. | IT/Total/PUE, UPS A/B and EPMS route. | Can reproduce facility load and normal/failover UPS percentages. |
| Mechanical engineer | Check CHW temperatures, flow basis and heat rejection. | Cooling stats, Chiller Plant route and basis drawer. | Can reproduce 7.6 K, 58.1 L/s and 1,927.1 kW. |
| Sustainability analyst | Interpret PUE, WUE, grid factor and CUE denominators. | Efficiency panel and basis drawers. | Can distinguish 0.42 facility-kWh grid factor from 0.609 IT-kWh CUE. |
| Commissioning / design reviewer | Turn each value/control into a deterministic check. | BoD, generated design, FAQ, PRD/manual and engine snapshot. | No displayed fact lacks source class or known limitation. |
| Educator / learner | Understand the energy/water/fuel balance of a conventional DC. | Photo context, formulas, glossary and subsystem pages. | Can reproduce the worked scenario without treating it as site advice. |
CONV_MODEL and derived CONV_CALC.snapshot.| ID | Visible element / requirement | Acceptance |
|---|---|---|
| FR-01 | Preserve the cockpit tier gate while PRD and Manual remain public. | Pro/Educator/Root policy remains owned by shared auth; docs contain no gate. |
| FR-02 | Provide Portfolio, DC Solutions, PRD and Manual links. | All are visible in .header-left and keyboard reachable. |
| FR-03 | Show title, modeled status indicator and WIB clock. | Clock changes only time; “LIVE” styling does not override simulated disclosure. |
| FR-04 | Provide Generate Design, FAQ and Theme controls. | Each control opens/toggles the intended surface without changing the locked model. |
| FR-05 | Provide subsystem routes to EPMS, Data Hall, Chiller Plant, Fire, Fuel, Water and ICT. | All seven links resolve and retain tooltip description. |
| FR-06 | Show alarm state, Critical, Warning, Maintenance/Bypass, Comms, Stale, Last Update, Data Quality and Scenario. | Nine groups render before KPI content and use one snapshot/rule evaluation. |
| FR-07 | Evaluate overall state from critical/warning counts. | CRITICAL outranks WARNING; NORMAL appears only when both are zero. |
| FR-08 | Evaluate PUE, chiller redundancy, environment and fuel thresholds deterministically. | paintAlarmStrip(snapshot) returns identical counts over reloads. |
| FR-09 | Show maintenance count as installed minus running chillers. | Locked scenario reads 1 (3 installed − 2 running). |
| FR-10 | Show PUE KPI and basis drawer. | Value 1.45 and target ≤1.5 are distinct; drawer shows facility/IT inputs. |
| FR-11 | Show WUE KPI and basis drawer. | 1.20 L/kWh IT and 37.0 L/min equivalent makeup are traceable. |
| FR-12 | Show grid-factor KPI and basis drawer. | 0.42 kgCO₂/kWh facility is not labeled as CUE. |
| FR-13 | Show IT Load KPI and basis drawer. | 1,850 kW out of 2,000 kW design and utilization are shown. |
| FR-14 | Show Uptime KPI and basis drawer. | 99.98% remains labeled a design placeholder until event-bound. |
| FR-15 | Show Temperature KPI and basis drawer. | 22.4°C is labeled simulated and placed against the stated band. |
| FR-16 | Show Chillers KPI and basis drawer. | 2/3 and one spare reconcile to the snapshot. |
| FR-17 | Show Alarms KPI. | Count and Normal text agree with the alarm strip. |
| FR-18 | Show six operational image callouts. | PUE, IT, CHW, temperature, fuel and RH values retain units and engine binding where available. |
| FR-19 | Show Efficiency stats. | PUE, WUE, Grid factor and CUE_IT remain separate rows with denominator tooltips. |
| FR-20 | Show Power stats. | Total, IT and UPS A/B normal/failover values reconcile to the snapshot/display rule. |
| FR-21 | Show Cooling stats. | CH-1/2, 2/3 chillers, 12/14 CRAHs, CHWS and CHWR remain visible; static vs engine-bound is disclosed. |
| FR-22 | Show Network & Reliability stats. | Network, UPS topology and uptime rows retain state/source class. |
| FR-23 | Show Environment stats. | Temperature, RH and differential pressure remain visible with units/source class. |
| FR-24 | Show Safety stats. | FACP and VESDA rows remain labeled static modeled states. |
| FR-25 | Show Fuel stats. | Main/day tank levels and 48 h bulk-tank autonomy retain scope. |
| FR-26 | Bind all primary derivations to one snapshot. | No Math.random() affects PUE, WUE, grid factor, IT, total, CHW, temperature, RH or fuel. |
| FR-27 | Provide keyboard basis-drawer activation. | Click/Enter/Space open formula/input/output/source; Escape/scrim/close dismiss. |
| FR-28 | Generate a full technical design report from the snapshot. | Power, cooling, water, fire, fuel, ICT/BMS, carbon and cost sections use one captured basis. |
| FR-29 | Provide FAQ dialog. | Ten questions disclose locked scenario, standards, arithmetic and educational scope. |
| FR-30 | Provide scroll-to-top, theme and responsive behavior. | Controls remain named, reachable and do not cause horizontal overflow. |
| Signal | Symbol / ID | Unit | Nominal / semantics | Source binding |
|---|---|---|---|---|
| Overall alarm state | as-state, as-state-txt | state | NORMAL/WARNING/ALARM from worst count. | paintAlarmStrip(snapshot). |
| Critical / warning | as-crit, as-warn | count | 0 nominal; red/amber only when non-zero. | Threshold rules. |
| Maintenance / bypass | as-maint | count | 1 locked standby chiller. | chillers_total − chillers_running. |
| Comms / stale | as-comms, as-stale | state / count | OK / 0 if versioned snapshot exists. | snapshot.meta; no live transport. |
| Last update | as-update, clock | local time | Browser clock. | rzTick(). |
| Data quality / scenario | as-dq, as-scn | quality / mode | GOOD / Simulated. | snapshot.meta. |
| PUE | kpiPue, cPue, sPue | ratio | 1.45; warn above 1.5. | snapshot.site.pue. |
| WUE | kpiWue, sWue | L/kWh IT | 1.20. | snapshot.environment.wue_l_per_kwh. |
| Grid factor | kpiCarbon, sCue | kgCO₂/kWh facility | 0.42; not CUE. | snapshot.environment.carbon_kg_per_facility_kwh. |
| CUE IT-basis | sCueIt | kgCO₂/kWh IT | 0.609, displayed 0.61. | grid factor × PUE. |
| IT load | kpiIt, cIt, sItLoad | kW / MW | 1,850 kW / 1.85 MW. | snapshot.site.it_load_kw. |
| Facility load | sTotalLoad | kW | 2,682.5, shown 2,683. | snapshot.site.facility_load_kw. |
| Non-IT load | basis/report | kW | 832.5. | snapshot.site.non_it_load_kw. |
| UPS A/B load | sUpsA, sUpsB | % | 46% normal / 92% failover, based on 2,000 kW/module display assumption. | updateData(). |
| CHWS / CHWR | cChw, sChwSup, sChwRet | °C | 7.2 / 14.8; primary chilled-water loop. | snapshot.cooling. |
| CHW ΔT / flow | basis/report | K / L/s | 7.6 / 58.1. | chwDeltaT(), chwFlowLps(). |
| Heat rejection | basis/report | kW | 1,927.1. | heatRejectionKw(). |
| Chiller count | KPI / Cooling row | count | 2/3 running; one maintenance/spare. | snapshot.cooling.chillers_*. |
| Chiller unit state | CH-1 / CH-2 rows | % / state | 85% / 78% static presentation. | Static markup, not snapshot point. |
| CRAH count | Cooling row | count | 12/14 static presentation. | Static markup. |
| Temperature / RH | kpiTemp, cTemp, cRh, sTempAvg, sRhAvg | °C / % | 22.4 / 48; warn outside 18–27°C or 20–80% RH; critical temp >32°C. | snapshot.environment. |
| Differential pressure | Environment DP | Pa | +2.1 static presentation. | Static markup. |
| Fuel level | cFuel, sFuelMain | % | 85; source model. | snapshot.fuel.level_pct. |
| Day tank | Fuel Day Tank row | % | 92 static presentation. | Static markup. |
| Usable fuel / autonomy | Fuel Autonomy row / basis | L / h | 45,900 L / 48.0 h; warn below 24 h, critical below 12 h. | fuelUsableL(), fuelAutonomyHr(). |
| Water equivalent flow | basis/report | L/min | 37.0. | waterFlowLpmForWue(). |
| Carbon rate | basis/report | kgCO₂/h | 1,126.7. | carbonKgPerHr(). |
| Network / topology / uptime | Network, UPS Topology, Uptime rows | state / % | Online / 2N OK / 99.98% placeholder. | Static presentation and basis drawer disclosure. |
| Safety | FACP, VESDA rows | state | Normal static presentation. | Static markup. |
| Active racks | basis/report | count | 308 @6, 231 @8, 185 @10 kW/rack. | activeRacks(). |
facilityLoadKw(), nonItLoadKw(); Manual §03/06.upsLossKw(), upsModuleKw(). Page percentage uses a separate 2,000 kW/module display rating.chwDeltaT(), chwFlowLps(), heatRejectionKw().fuelUsableL(), fuelAutonomyHr(); consumption is an engineering basis, not a live curve.| Interaction | Required behavior | Accessibility / failure behavior |
|---|---|---|
| Alarm strip | First read stays above disclaimer/KPIs and updates from one snapshot. | State text/counts supplement color; no pulse-only meaning. |
| Subsystem rail | Seven routes disclose target subsystem. | Keyboard links and tooltip text; decorative icons are not the only label. |
| KPI basis | Click/Enter/Space opens formula, inputs, output, scope, denominator, source, mode and timestamp. | Escape/scrim/close work and focus returns. |
| Generate Design | Capture one snapshot and generate a print-ready technical report. | Popup block produces visible instruction; generated document remains printable and sourced. |
| FAQ | Open ten expandable questions without changing data. | Dialog has title, close button, Escape behavior and readable focus order. |
| Theme | Switch light/dark and persist choice. | Semantic states retain contrast; no white major surface in dark mode. |
| Mobile | Header, KPI and panels wrap/stack without document overflow. | Primary status and PRD/Manual remain reachable at 360 px. |
| Restricted access | Unauthorized user receives the shared upgrade/sign-in flow. | Overlay is an alert dialog; public docs never inherit it. |
| ID | Given / when / then | Evidence |
|---|---|---|
| AC-01 | Given the locked snapshot, then 1,850×1.45=2,682.5 kW and all three visible representations agree after rounding. | Engine/DOM assertion. |
| AC-02 | Given repeated reloads, then all engine-bound KPI/callout/stat values are identical. | Multi-reload comparison. |
| AC-03 | Given normal snapshot, then Critical=0, Warning=0, Maintenance=1, Comms=OK, Stale=0 and state=NORMAL. | Direct rule/DOM assertion. |
| AC-04 | Given PUE >1.5, then warning count increments and overall state is WARNING unless critical exists. | Injected snapshot fixture. |
| AC-05 | Given temperature >32°C or fuel autonomy <12 h, then critical count/state agree. | Boundary fixtures. |
| AC-06 | Given 7.2/14.8°C, then ΔT=7.6 K and flow=58.1 L/s. | Unit calculation. |
| AC-07 | Given WUE 1.20 and IT 1,850 kW, then equivalent flow=37.0 L/min. | Unit calculation and basis drawer. |
| AC-08 | Given grid factor 0.42, then rate=1,126.7 kgCO₂/h and CUE_IT=0.609. | Unit calculation and rendered stats. |
| AC-09 | Given fuel basis, then usable fuel=45,900 L and autonomy=48.0 h. | Unit calculation and row. |
| AC-10 | Given each seven subsystem link, then destination resolves. | Puppeteer navigation checks. |
| AC-11 | Given each basis-enabled KPI, then click/Enter/Space opens matching content and Escape closes. | Keyboard interaction loop. |
| AC-12 | Given Generate Design, then the report contains the same snapshot values and no literal script closer breaks parsing. | Popup capture, text checks, script audit. |
| AC-13 | Given FAQ, then all ten questions render and the dialog closes from button, Escape and scrim. | Dialog E2E. |
| AC-14 | Given supported tiers, then cockpit unlocks; given free/demo, then gate remains. | Tier fixtures. |
| AC-15 | Given 360 px width, then no horizontal document overflow occurs. | Responsive measurement. |
| AC-16 | Given dark mode, then no major white content surface appears and status contrast remains legible. | Computed-style screenshot. |
| AC-17 | Given PRD/Manual link injection, then exactly two anchors are added and no cockpit line is deleted. | Git diff assertion. |
| AC-18 | Given a representative full journey, then no uncaught console/page error occurs. | Captured browser error stream. |
| Source | Governs | Binding / use |
|---|---|---|
dc-conventional.html | Visible controls, KPI cards, alarm rules, report, FAQ and gate. | Primary implementation source. |
js/conv-engine.js | Immutable constants and all primary derived values. | CONV_MODEL, CONV_CALC.snapshot. |
| Conventional DC Manual | Formula definitions, worked scenario, standards and limitations. | Public methodology companion. |
| Conventional review docs 00, 01, 09 and 12 | Single capacity basis, dashboard direction, engineering calculations and QA criteria. | Requirements/risk authority. |
| ISO/IEC 30134-2 | PUE/WUE definitions and denominator discipline. | Efficiency KPIs. |
| ISO/IEC 30134-8 | CUE definition. | 0.609 kgCO₂/kWh IT derivation. |
| ASHRAE TC 9.9 | Thermal envelope context. | 22.4°C/48% interpretation; site setpoints still require approval. |
| ASHRAE 90.1 / CIBSE Guide F / EN 50600 | Facility energy and infrastructure design context. | Design/report background, not automatic compliance. |
| Uptime Institute Tier Standard | Resilience/topology intent. | Tier-III intent and fuel-resilience context; certification not claimed. |
| IEC 60364 / IEC 60909 / IEEE 1100 | Power installation, fault and power-quality context. | Generated-design references; detailed studies out of scope. |
| NFPA 75/76 | IT fire-protection context. | Safety subsystem reference; static Normal state is not compliance evidence. |
| Risk / open question | Current evidence | Required resolution |
|---|---|---|
| “LIVE” label conflicts with modeled data. | Header says LIVE while scenario/FAQ says Simulated/BOD locked. | Replace or qualify the label in a separately authorized cockpit change. |
| Uptime is not measured. | 99.98% is a design placeholder with no event-log binding. | Bind to dated downtime events or relabel as intent. |
| Several subsystem rows are static. | CH-1/2 %, CRAH count, network, FACP, VESDA, DP and day tank are markup literals. | Give each a model/source/quality/timestamp or label illustrative. |
| UPS percentage uses an unstored 2 MW/module rating. | updateData() declares 2,000 kW locally while engine snapshot exposes shared output only. | Move the rating into the immutable model and document topology precisely. |
| Alarm freshness is synthetic. | Stale=0 because snapshot is frozen; Last Update is browser time. | Distinguish model evaluation time from acquisition/sample time. |
| Maintenance semantics are overloaded. | Standby chiller count is shown as Maint/Bypass. | Separate planned maintenance, bypass and available standby capacity. |
| WUE flow is an annual-equivalent rate. | 37 L/min is not an instantaneous cooling-tower measurement. | Keep scope label visible and bind actual makeup/blowdown if introduced. |
| Grid factor is fixed. | 0.42 has no displayed geography/date/version in the dashboard. | Add source vintage and location/market basis before sustainability reporting. |
| Fuel consumption is a fixed design assumption. | 956 L/h is not coupled to a generator efficiency/load curve. | Use vendor curve and running-set allocation for operational autonomy. |
| Generated design breadth exceeds validated snapshot. | Report includes fire, water chemistry and cost assumptions beyond primary dashboard points. | Maintain section-level source/assumption tags and independent calculation tests. |
| Access policy wording may drift. | Comments, overlay and shared feature flags have changed historically between Pro/Educator/Root descriptions. | Test the canonical policy; docs must not become an alternate access path. |