File: 2026.10.23 - Kestrel Medical - 04 Stakeholder Brief Coverage Check.md

Kestrel Medical: Stakeholder Brief Coverage Check

Test case, Sample data. In test mode the "brief" is Sharon's own words in the Meeting Script (01 Meeting Script.md), never the Stakeholder Brief file. Checked against 04 Dashboard.html (Jennifer's finished first draft, rebuilt from Experimental A on 24-Oct-26 at Adam's choice) and Business Requirements v1.2. Ovy proposes next steps only: nothing here has been changed.

Author: Ovy. Date: 23-Oct-26, refreshed 24-Oct-26. Result: 12 Addressed, 8 Partly, 2 Not addressed (22 items).

Refresh, 24-Oct-26: all 22 items re-checked against the Experimental A build. Every result is unchanged: the numbers, story, tiles and actions are the same. The only change is where items 2, 3 and 7 are answered: the ranked bar of biggest gaps is now one circle of all 25 lost tenders, coloured by biggest scoring gap, with the 3 big losses ringed. The 5 tenders with no scoring table now show in grey instead of being left out.

On Adam's instruction (23-Oct-26), every open question belongs to Phase 2, a separate project after Stage 5. Where a gap is an open question, the proposed next step says so.

1. Item by item

#Sharon's words (Meeting Script)ResultWhere the output answers it
1Problem as stated: "we've lost three of the last five big tenders"✓ AddressedHeadline: "Kestrel lost 3 of its last 5 big tenders"; Big tender win rate tile "2 of 5"
2"my reps keep telling me we're being undercut on price everywhere, 10 and 15 per cent off"! PartlyWhy section circle: price was the biggest gap on only 3 of 20 scored losses (3 orange dots of 25); Highlands Ambulance price gap −0.90 (Kestrel cheaper). No view tests the reps' "10 and 15 per cent" claim directly, because winning prices exist on only 5 of 25 lost tenders
3"What I need is a proper win-loss view"✓ AddressedBig tender win rate tile, the last 5 tenders by close date, calendar-year counts, and "Big tender win rate: the last 5 tenders and the size line" in Detail
4"something that shows our pricing against the competition"! Partly"Our price against the winning price on lost tenders" is a Phase 2 placeholder; stand-in "price score gap" in Detail. Dollar price against competitors is not shown
5"go to global with evidence and argue for more discount room"✓ AddressedHeadline and Why section give the evidence; it points away from more discount ("service and support, not price"). Real problem as understood: the evidence to prove or disprove price
6"get me out of Excel. I've got thirty monthly reports and half of them say different things"! PartlyMonthly reports tile is a Phase 2 placeholder; stand-in "Reports on the draft agreed set: 3 of 30, 17 different combinations in use". The dashboard itself is one set of numbers, but the reports are not yet replaced or checked
7"If we don't understand why we're losing, we'll keep discounting blind"✓ AddressedWhy section: "Service and support was the biggest gap on all 3 big losses; price was never the biggest"
8Tender detail: Southern Metropolitan (price), Highlands ("about the stretcher as much as anything"), Western Plains (distributor that bundles)✓ AddressedThe three big losses shown side by side with their scoring gaps and winners; "one a distributor that bundles brands"
9Margin: "43 per cent gross margin in 2027"! PartlyGross margin per cent tile is a Phase 2 placeholder ("Target: 43% for 2027", "Needs cost of sales (finance)"); stand-in Net price realisation 87.36%, labelled "not gross margin"
10"4 per cent revenue growth"✓ AddressedRevenue growth on the year tile: −6.8%, target +4% in 2027, needs +0.72 pts a month, Off track
11Success: "we stop losing tenders"✓ AddressedWin rate tile and the first of the top 3 actions (bid manager reviews the debriefs, the sales leader sets the response)
12Success: "I stop spending three days a month reconciling spreadsheets"× Not addressedNo measure of reconciliation time; the Monthly reports measure is a Phase 2 placeholder
13"Deb Harlow would know what a realistic win rate looks like" (no target from Sharon)✓ AddressedWin rate tile: "Target set in Phase 2", "Not rated: target open", no status colour; Gary's starting proposal marked "Proposed"
14Decisions: "pricing calls on big deals within my authority", "where the reps focus", "headcount asks", "how we respond to tenders"! PartlyPricing, rep focus and tender response are the top 3 actions. Headcount asks to global are not shown on the page
15"I want to know where the margin is leaking, especially on the big deals"! PartlyAverage discount off list price on big deals (17.03% and its trend; target set in Phase 2 since Business Requirements v1.3) shows the price side of leakage; margin by product group is a Phase 2 placeholder
16"which reps and which product groups are growing and which are going backwards"✓ AddressedDetail: "Revenue growth on the year, by month, product group and rep" (10 groups, 14 reps); "Only Beds is growing (+2.6%)"
17"which ones we're losing, who's winning them, and on what price"! PartlyWhich and who: "The 3 big losses went to 3 different winners". On what price: Phase 2 placeholder, as item 4
18Format: "a pack for global matters most", "pull it up in a meeting with the reps", "I wouldn't be looking at it on my phone"! Partly (see note)Screen version checked at 14 widths with no sideways scroll. Jennifer flagged that the dark default would print dark: there is no print-ready pack for global yet
19Rhythm: "the dashboard would follow that rhythm" (monthly)✓ AddressedBusiness Requirements v1.2 review rhythm monthly; dashboard shows "Data to 30-Sep-26"
20"global's dashboards don't understand our market ... has to speak to how our business actually works"✓ AddressedBuilt around Kestrel's tenders, debrief scoring areas, product groups and competitors by name
21"I also want the reports automated and consistent"× Not addressedThe dashboard is built from re-runnable scripts on Sample data; no automated refresh from SAP or the tender register exists yet
22Playback correction: "I believe it's price ... What I want is the evidence to prove or disprove it"✓ AddressedHeadline answers it directly, labelled Strong Inference (debrief scores, Sample data)

Note on item 18: counted as Partly, because the main use is the pack, and the pack is not built.

↑ Back to top

2. Proposed next steps (propose only, not made)

#GapProposed next stepOwner (stage)When
2, 4, 17Price against competitors in dollarsBack-fill winning prices from the debrief letters; switch on "Our price against the winning price on lost tenders"Bid manager with Kewpie and the data engineerPhase 2 project
6, 12Thirty reports still disagree; reconciling time not measuredAgree the sales definitions; build the governed sales table and the monthly report check. Ask Sharon at the walk-through whether to log reconciliation days as a sub-KPIFinance report owner, Kewpie, data engineer; Gary for any new KPIPhase 2 project; the question at Stage 5
9, 15Margin can't be calculatedSource cost of sales per order line and reconcile to finance's 41%; switch on Gross margin per cent and Gross margin by product groupFinance report owner, Kewpie, data engineerPhase 2 project
14Headcount asks not shownAsk Sharon at the walk-through whether headcount needs a view, or stays a decision she takes from the revenue growth viewGary (with SME sign-off)Stage 5 walk-through
18No print-ready pack for globalAdd a print-always-light version or a PDF pack in the format global expects (format is an open question)Jennifer, after Sharon confirms the formatStage 5 decision; build in Phase 2 if global's format is needed
21Not automatedAutomate the refresh from SAP and the tender registerData engineer with KewpiePhase 2 project
AllGary's proposals not yet confirmed (discount path to 14%, 3 of the last 5)Asked at the walk-through: Sharon left the discount target open (removed from the dashboard in Business Requirements v1.3, 24-Oct-26) and kept 3 of the last 5 as a proposal for DebGary (with SME sign-off)Done, 24-Oct-26
↑ Back to top

File: 2026.10.23 - Kestrel Medical - 04 Standards and Validation.md

Kestrel Medical: Standards and Validation (Stage 4)

Re-run 24-Oct-26 for Business Requirements v1.3 (Adam approved Sharon's change): Average discount off list price on big deals shows 17.03%, its trend, "Target set in Phase 2" and a neutral "Not rated: target open". No target, path to 14%, gap, pace or status colour. Jennifer's fixes were re-applied to Viktor's rebuilt page; three of her exact text replacements were adjusted to Viktor's new wording (item 1 below), with the same shortening.
Test case, Sample data. This report now covers Experimental A (the dot swarm circle of lost tenders), chosen by Adam on 24-Oct-26. It replaces the Standard version's report. Built by Jennifer (Stage 4) from Viktor's Experimental A dashboard, Business Requirements v1.3, Calculation Pack v1.2 and the saved Monochrome blue and Charcoal and teal palettes. No story line, KPI, number or chart was changed.

Date: 24-Oct-26 (re-run) · Output: 02 - Deliverables/2026.10.23 - Kestrel Medical - 04 Dashboard.html · Re-run: 03 - Working Files/jennifer_finish.py (fixes), jennifer_checks.py (widths, errors), jennifer_screenshots.py (screenshots)

1. Verdict

↑ Back to top

2. Palette

↑ Back to top

3. What Jennifer fixed (clear-cut, all in jennifer_finish.py)

#FixWhy (standard)
1Phones: tiles now sit one per row. Before, the number and sparkline on tiles 2, 3 and 4 ran past the tile edge and were clipped at 375pxUX 1 and 2: fits without clipping on phones
2Value labels on long bars (for example +4.35) stay inside their card; the three boxes in the reports detail wrap instead of overflowing at tablet width (768px, 40px over)Web 3: no horizontal overflow
3Smallest text raised from 9.6px to 11.2px (tags, owner lines, axis labels, table headings)UX 3: readability
4Light mode: "service and support" in the headline was 3.0 to 1; now 4.5 or betterWeb 2: text contrast 4.5 to 1
5Page follows the system light or dark setting until the reader picks one (their pick is remembered)UX 4: follow prefers-color-scheme
6The five big tender dots in the What changed chart can be focused with the keyboard but had no name; each now reads "Won or Lost, customer, closed date"Web 2: screen readers
7"Skip to main content" link; "On this page" jump links in the header (wide screens); "Back to top" at the bottom of each section (desktop)UX 3 and Web 1
8noindex added (customer names and tender values must not reach Google)Web 6
9First screen kept inside 800px at 1280 to 1600 wide: tiles end at 785 to 791px (they would have run to 805 to 811px after fix 3)30-second test
10Circle (new): each of the 25 dots now has a name for screen readers, for example "Lost tender, Highlands Ambulance, closed 19/09/2025, $11.80m, biggest gap: Service and support, one of the 3 big losses"Web 2: names for focusable items
11Circle (new): the numbers 1 to 3 on the ringed dots were white (about 2.9 to 1 on teal). They now sit on a small disc in the page colour with text at 14.6 to 1 dark, 17.5 to 1 lightWeb 2: text contrast 4.5 to 1
12Circle (new): dots were drawn at 90% and 45% strength, so light-mode teal was 2.85 to 1 and the grey "no scoring table" dots 1.8 to 1 against the card. Now full strength: lowest dot is 3.2 to 1 light, 3.6 to 1 dark (3 to 1 needed for a graphic). The legend swatches match. Colours, counts and sizes are unchangedUX 4 / Web 2: graphics visible in both modes
13Stage label "Stage 4 · Finished first draft · Experimental A" and footer credit; Business Requirements v1.3 and Calculation Pack v1.2 in the header and footerChange control
↑ Back to top

4. Standards results

UX Standards Reference (and the UXPin principles)

AreaCheckResultEvidence
LayoutNo sideways scroll, 375 upright, 568 × 320 and 740 × 360 sideways, 768, 1100+PassWidth sweep, 0 of 56
LayoutLayout changes live across 900px and 640px without reloadPassCharts redraw on resize; sweep loads each width fresh
LayoutPhone bottom tab bar, tablet and desktop top tabsNot applicableOne scrolling page with no tabs. Sharon: "Not phone" (a screen and a pack)
LayoutTables become cards on phonesPassThe few tables are "See data" tables, fixed layout, wrap at 375px
LayoutSafe areasPassSide padding uses env(safe-area-inset)
TouchControls under 44px on phonesPass0 buttons, links or summaries under 44px at every width
TouchInputs 16pxNot applicableNo text inputs
ReadabilityHeadings front-loaded, sections by usePassWhat changed, Why, What to do, Detail. Answer first, working behind "See data" and collapsed sections
ReadabilityBullets within the word limitPass for the main flow; 9 lines over 30 words in captions and definitions remainThe three in the main flow were shortened (item 1, approved and applied). The rest are captions and definitions Adam did not ask to change
ReadabilityOne term per ideaPass, one noteHeadings say "Discount on big deals"; the tile uses the full name "Average discount off list price on big deals"
VisualDark and lightPassBoth screenshotted and measured
VisualReduced motionPassCharts and count-up numbers switch off
VisualColour never the only signalPassStatus chips have icon and word; won or lost tenders are filled or hollow; bars carry signed values; area colours have a legend, labels and counts; the circle legend gives each area's name and count, big losses are ringed and numbered, and the See data table lists every tender
VisualSecondary links low weight, buttons not underlinedPassJump and Back to top links grey and thin; buttons plain
TrustShared output shows only what the audience needsPassNo weights or internal codes; plain names; Sample data label on the page
TrustNo silent failuresPassStorage wrapped in try/catch; no script errors
UXPinConsistency, scannability, visual grammar, hierarchy, plain language, familiar patternsPassSame tile, bar and table forms throughout
UXPinProgressive disclosure, whitespacePassDetail sections open by default at 1100px and wider, closed on phones (item 2, approved and applied)
UXPinUser controlPassColour mode toggle works; replay removed, so nothing is mouse only except the hover detail, which the See data tables repeat
UXPinUser at the centre, define the problem first, iterate on evidenceNot testedBuild process, not page
UXPinAccessibility (#10)Covered belowWeb Build Standards

Web Build Standards

SectionCheckResultEvidence
HTMLdoctype, lang="en-AU", charset, viewport, 4-word titlePass"Kestrel Medical Tender Dashboard"
HTMLOne h1, headings in order, unique ids, semantic elements, details and summaryPassh1 then h2, h3, h4, no skipped levels. 0 duplicate ids. WHATWG §4.3 and §4.11.1
HTMLNo clickable divsPassClick-to-replay removed (item 3, approved and applied). Charts still play once on first view
AccessibilityContrast 4.5 to 1, both modesPass5.07 dark, 4.80 light, after fix 4
AccessibilityKeyboard: focus ring, everything reachablePassFocus ring on every control; skip link added. Chart rows, bars and the 25 circle dots are no longer tab stops (item 4, approved and applied): 5 KPI tile stops remain, plus the real controls. Not walked through by hand: structure and CSS checked
AccessibilityNames for focusable items, charts with text summaryPass0 unnamed focusable items (the 25 circle dots checked in the Browser pane); each chart has a summary and a "See data" table
AccessibilityReduced motion, 200% zoomPass200% on 1280 is 640px: no overflow
CSSColour tokens with dark mode, relative unitsPass:root tokens, JS swaps the set per mode
JavaScript0 console errors on load, in both modes, all widthsPass0 in the Browser pane and in headless Chrome
JavaScriptStorage in try/catch, no popups, pinned librariesPassNo libraries; only Google Fonts (see note)
JavaScriptCore content shows if script failsFail, acceptedTiles and charts are drawn by script. Same as every Kestrel build; a pack for global would be printed from a working browser. Not proposed for change
PerformancePage weight, fontsNote73 KB page. Six font files from Google Fonts (Lexend 300, 400, 500, 600; IBM Plex Mono 400, 500). Core Web Vitals: not measured
SecurityNo keys or tokens, no personal data in URLs, noindex, no external linksPassNo links out; no secrets. Customer names are in the page: see the privacy open question in the Business Requirements (section 10)
SecurityHTTPSNot applicableNot published
PWAManifest and service workerNot applicableNone
Release7-step listSteps 1 to 6 done; step 7 respectedNothing published
↑ Back to top

5. Before/After items: all four approved by Adam, 24-Oct-26, and applied (jennifer_finish.py)

#WhereBeforeAfterWhy (standard)Status
1Three long lines in the main flow (these are Viktor's words, so I'd like your yes)a. "The axis starts at 12% so the step can be read. No target in the first pass: it is set in Phase 2. Big deal means tender contract orders until the sales leader sets a size rule. Click the chart to replay." (v1.3 wording, 38 words) b. "Average discount off list price on tender contract orders, by year of order (2026 is Jan to Sep). Below: the last 5 tenders of $5m or more, by close date." (v1.3 wording, 31) c. First action note: "2 of the last 5 now. Gary's starting proposal, 3 of the last 5 by Dec-27, means winning the next 2 big tenders (Working Hypothesis). A service measure is a Phase 2 question for the sales leader." (37)a. "The axis starts at 12% so the step can be read. No target yet: it is set in Phase 2. Big deal means tender contract orders for now." b. "Discount on tender contract orders by order year (2026 is Jan to Sep). Below: the last 5 tenders of $5m or more." c. "2 of the last 5 now. A target of 3 of 5 by Dec-27 means winning the next 2 (Working Hypothesis)." The service measure question stays in the open questions for Phase 2UX 3: about 20 words per line, 30 at mostApproved by Adam, 24-Oct-26, applied
2Detail section, desktopAll five sections closed; reader taps eachOpen by default at 1100px and wider, closed on phones. The page gets longer on a big screenUX 3: on desktop, keep everything open with jump links (jump links are done). Viktor closed them to keep the walk-through short, so it is your callApproved by Adam, 24-Oct-26, applied
3"What changed" and the other chartsClicking a chart replays its animation. Mouse only, and the caption says "Click the chart to replay"Remove the click and the caption; charts still animate once on first viewWeb 1 and 2: no clickable divs; keyboard users cannot replay. A "Replay" button is the alternative, but it adds 8 buttonsApproved by Adam, 24-Oct-26, applied
4Chart rows and circle dots (about 115 tab stops)Every bar, row and circle dot can be tabbed to, to show its hover detail (the dots are named, so a screen reader reads each one)Rows and dots stop being tab stops; the "See data" tables carry the same figures for keyboard and screen reader usersWeb 2: keyboard pass in reasonable steps. The detail on hover then stays mouse onlyApproved by Adam, 24-Oct-26, applied

Also for Adam (no change proposed): in the circle, dot size shows contract value only roughly (Viktor's caption says so; the See data table has the exact values). Six area colours on small dots need the legend, so the legend sits directly underneath and carries names and counts. Hovering or focusing a dot also names its area. Also: the pack for global is the main use, and the page is dark by default when a reader has no system setting. Printing a dark page uses a lot of ink. I'd suggest a print version that is always light, but that is a new feature, so I've left it for Stage 5.

↑ Back to top

6. Validation checklist

#CheckResultEvidence
1Every Must Have KPI is on the dashboard, calculated as documentedPassBuilt (7): Average discount off list price on big deals 17.03%; Revenue growth on the year -6.8%; Big tender win rate 2 of 5; Revenue growth by product group and by rep (detail); Why we lost, from the debriefs (the three big losses by scoring area, and the circle of all 25 lost tenders by biggest gap); Who is winning the tenders we lose. Numbers match the Calculation Pack: discount 17.03% with trend flat (no pace, as no target), growth -6.8% with +0.72 needed and +0.27 trend, 5 tenders, Net price realisation 87.36%, reports 3 of 30 with 17 combinations. Phase 2 placeholder, as documented (4): Gross margin per cent, Gross margin by product group, Monthly reports that match the agreed set of numbers, Our price against the winning price on lost tenders. Each placeholder shows its exact name, owner, "Phase 2: waiting for data", and no number, status colour, sparkline, gap or pace. Each stand-in carries "Stand-in, not the KPI" and "Sample data", and never takes the KPI's name, target or status colour. The stated 41% appears only as a note on the margin placeholder, not on the stand-in
2Every business objective shows its progress (actual, target, gap, pace needed)PassLift gross margin: discount tile shows actual 17.03% and its trend (flat, 0.00 points a month) with "Target set in Phase 2": no target number, gap, pace, path or status colour (Phase 2, as documented, per v1.3); the 43% margin target shows as text with "Phase 2: waiting for data" (as documented). Grow revenue: -6.8% against +4%, gap -10.8 points, needs +0.72 a month. Stop losing the big tenders: 2 of 5 with "Target set in Phase 2", no colour, gap or pace (Phase 2, as documented). One agreed set of numbers: "Phase 2: waiting for data" (Phase 2, as documented)
3Every action owner can see their KPI's status at a glancePassSales leader: Not rated Phase 2 (margin), Not rated: target open (discount, neutral grey chip and icon, no green, amber or red; no dashed target line on its sparkline; no "On track" or "Amber from" wording anywhere on the page: checked in the finished page), Off track (revenue). Bid manager: Not rated, target open. Finance report owner: Not rated Phase 2. Owner named on every tile. A KPI with an open target shows no status colour: checked
4The 30-second test passesPassAt 1280 to 1600 wide, the headline (3 of 5 lost, service and support, not price), the three actions with owners and dates, and all five tiles with status end at 785 to 791px, inside an 800px screen. On a phone the same order scrolls: headline, actions, tiles
5The Business Requirements version in the footer matches the latestPassHeader and footer say Business Requirements v1.3 and Calculation Pack v1.2; the files are v1.3 and v1.2
↑ Back to top

7. Screenshots (in 02 - Deliverables/)

↑ Back to top

8. How the checks were run

↑ Back to top