design
PM Maintenance — design notes
Section titled “PM Maintenance — design notes”The Product Manager’s console for the Tricycle Hardware unit. Web flow, 1440, canonical Atlas shell.
Built to the Argo PM Console PRD (source
.docx in ../../docs/attachments/). The PRD is the requirement; where this doc
and the PRD disagree, the PRD wins.
Persona
Section titled “Persona”Erioluwa Morenikeji · Product Manager, Tricycle Hardware. Owns the question the console exists to answer: which hardware problems are real, which are worth fixing, and did the fix work. Not bay-scoped — this surface runs at product and cohort altitude across every bay.
A PM Analyst delegate can do the day-to-day cohort and evidence work. Prioritizing, submitting a campaign, committing a roadmap item, resolving an outcome and publishing a review stay with the PM. Switch role from the account menu or from Settings → Delegate; the gates really move, they are not labels.
What this role cannot do
Section titled “What this role cannot do”No work-order operational controls and no taxonomy promote/merge/reject exist on this surface at all. Per PRD §5.4 that is enforced by the absence of the control, not by a permission check on it.
Navigation
Section titled “Navigation”Sidebar, five groups: Overview (Reliability) · Cohort intelligence (Cohort analytics) · Engineering loop (Evidence packets, Engineering feedback) · Delivery (Interventions, Outcomes, Roadmap) · Reporting (Quarterly reviews). Counts sit on Evidence packets, Engineering feedback, Interventions and Quarterly reviews. Notifications and Settings are reached from the topbar and the account menu.
Logout appears in both the sidebar foot and the account menu, which is parity with
starter-template/index.html. An earlier version of this doc claimed the sidebar
copy had been removed and that .sb-logout was banned; that was wrong, and the
starter is the source of truth.
19 views, matching the PRD’s §6 sitemap. Rich records get a full detail page
with .pg-back and .pseg sub-tabs — never a dialog, and never a side drawer.
Dialogs are for confirmations, compact records and reason-required actions.
| View | What it does |
|---|---|
v-home |
KPI band, then three tabs: the reliability driver tree, cohorts to watch, and what is in flight |
v-cohorts |
The analytics workbench — filter modal, cohort table, small multiples |
v-cohort-detail |
Three drill-ins: affected vehicles, recurrence chains, cost of poor quality |
v-vehicle |
The shared vehicle reliability timeline |
v-packets |
Evidence-packet inbox with the four row actions |
v-feedback |
Engineering-feedback pipeline, board and list |
v-feedback-item |
Evidence inline, RICE prioritization, roadmap linkage |
v-interventions |
Proposal list |
v-intervention-new |
The proposal builder |
v-intervention-detail |
Campaign request, rollout mirrored read-only |
v-outcomes |
Outcomes list |
v-outcome-detail |
The before/after curve and how every figure was worked out |
v-roadmap |
Now/Next/Later, and a read by lifecycle |
v-roadmap-item |
Impact model, linked evidence, lifecycle |
v-reviews |
Quarterly review history, each row diffing the quarter before it |
v-review-new |
The review builder |
v-review-detail |
A published, frozen review |
v-notifications |
The five PM event types |
v-settings |
Saved views, notification preferences, delegate, default landing |
Every page renders from JS into a #*-body container or a .rec-panel; nav()
switches top-level pages and showView() handles drill-ins.
The rules that shaped it
Section titled “The rules that shaped it”These are the PRD’s, and they are built as controls rather than described in copy.
Never a bare number. Every recurrence rate carries its denominator. The RICE
score is derived from its four inputs and stored nowhere, so it cannot drift from
them. Rider-days-saved shows vehicles × days avoided. A projection shows its
confidence band and its assumptions.
The five-unit sample floor. A cohort under MIN_SAMPLE gets no rate at all —
it reports raw counts and says “sample too small”. The driver tree refuses to
decompose below it, and the proposal builder refuses to model an impact from it.
CO-1096 (4 units) is in the fixture so that path is always on screen.
The 15% intervention threshold is drawn on every recurrence curve.
Cost of poor quality is the sum of two components, so both are shown in the same unit and the card names that unit once in its label.
Confirmed Impact is system-set. A roadmap item reaches it only when a linked outcome resolves. Every other lifecycle state can be moved by hand; that one says so and cannot.
Gates are controls. An item cannot be linked to a roadmap without being Prioritized. A proposal cannot be submitted without a hypothesis, an intervention and a computed impact. A return-for-correction cannot be confirmed without a reason. In each case the control is shut and says why, rather than failing after the click.
The approval path is shown before the decision. The builder states whether a proposal needs Head of Maintenance alone or Head of Maintenance and VP, and why, before Submit is pressed.
Composition decisions
Section titled “Composition decisions”- Actions live in the page head, top right, beside the title. Not in a card at
the foot of a form. Where a record has more actions than a head can carry, the
extras go behind the canonical
.ddoverflow menu. - Page bodies stack their cards with the page showing between them — one rule on the container, because doing it per page is how three pages ended up flush.
- Anything card-like inside a white card takes the page grey and drops its shadow. Board cards and nested KPI rows both.
- More than three filters collapse into a filter modal behind one trigger, with the applied set stated beside the page title as removable chips.
- A card head carries a title or a search, never both when they would repeat, and never a navigation button.
.pseggroups a page into tabs so nothing needs scrolling to reach. This is a deliberate reading of a strip that switches sub-sections rather than filtering rows; it never sits inside a.tbl-card.- Anything sequential uses the canonical
.tltimeline, vertically. Rollout status, recurrence chains, the vehicle timeline and scoring history all share it.
Send feedback
Section titled “Send feedback”A topbar .icon-action beside the theme and bell opens the centred
#dlg-feedback: Type, Impact, Where, Details and an optional screenshot. Where is
built from _PG_TOP and preselected to the page you are on, so the report carries
its own location and there is no second list of pages to keep in step. Type,
Impact and Details each fail with their own toast; Send closes and confirms.
The loop, end to end
Section titled “The loop, end to end”The console exists to make one loop continuous, and it runs:
evidence packet → feedback item → RICE score → roadmap link → intervention proposal → Head of Maintenance campaign → outcome → confirmed impactConverting a packet creates a real linked item and retains the packet. Scoring unlocks roadmap linkage and writes the reference on both records. A campaign reaching Complete opens its own outcome and moves any roadmap item covering that cohort to Measuring Impact. Resolving the outcome is what writes Confirmed Impact.
Verification
Section titled “Verification”flow-diff reports zero structural differences from the starter template.
lint-canon is at 0 errors and 0 warnings with no baseline entry, so this flow is
at zero tolerance. flow-probe passes on every view.