@validation-os/dashboard 0.14.1 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -39,20 +39,19 @@ interface ValidationOSDashboardProps {
39
39
  config?: DashboardConfig;
40
40
  }
41
41
  /**
42
- * The entire styled dashboard as one mountable app (spec OPS-1280): the frame —
43
- * sidebar composing the workflow + register nav with live counts, topbar with
44
- * the backend indicator and user and the surfaces it routes between across
45
- * the three altitudes (front door pipeline per-belief drill-in) plus the
46
- * kept register tables. Navigation is owned here, not the host router: the
47
- * active route lives in client state, synced to the URL hash (OPS-1298), so the
48
- * instance mounts this at one route and wires no routing. Styled by the
49
- * package's own token sheet the instance imports `styles.css` once and builds
50
- * no UI.
42
+ * The entire styled dashboard as one mountable app (spec OPS-1280 / DEV-5879
43
+ * redesign): the frame a 3-item sidebar (Assumptions / Experiments /
44
+ * Readings) plus a small Registers group for decisions + glossary, topbar with
45
+ * the backend indicator and user and the surfaces it routes between. The
46
+ * Assumptions nav lands on the Lens × Stage grid; a "Grid / View all" toggle
47
+ * switches to the pipeline board. Both drill into the same AssumptionDetail.
48
+ * Experiments shows the live evidence plans; Readings shows the evidence log.
49
+ * Each detail view is evidence-first: readings lead, bar lines are context.
51
50
  *
52
- * The front-door (`#next`) and pipeline (`#pipeline`) surfaces are now live;
53
- * OPS-1282's record page (`#record/<id>`) still fills its pane as it ships.
54
- * Records is the browse-everything / manual-override surface the register
55
- * browser, kept from the original scheme.
51
+ * Navigation is owned here, not the host router: the active route lives in
52
+ * client state, synced to the URL hash (OPS-1298), so the instance mounts this
53
+ * at one route and wires no routing. Styled by the package's own token sheet —
54
+ * the instance imports `styles.css` once and builds no UI.
56
55
  */
57
56
  declare function ValidationOSDashboard({ config }: ValidationOSDashboardProps): react.JSX.Element;
58
57
 
@@ -295,24 +294,48 @@ interface NeedsHumanCounts {
295
294
  declare function needsHumanCounts(ctx: RegisterContext): NeedsHumanCounts;
296
295
 
297
296
  /**
298
- * The dashboard's client-owned navigation state, across the workflow
299
- * altitudes plus the kept register tables (OPS-1298). One `<ValidationOSDashboard/>`
300
- * mounts at a single host route and drives everything off the URL hash — there
301
- * is no second entry point (OPS-1280).
297
+ * The dashboard's client-owned navigation state (OPS-1298 / DEV-5879 redesign).
298
+ * One `<ValidationOSDashboard/>` mounts at a single host route and drives
299
+ * everything off the URL hash — there is no second entry point (OPS-1280).
302
300
  *
303
- * - `next` — the front door ("what's my next move"); the default landing.
304
- * - `pipeline` the step-back portfolio pipeline.
305
- * - `stage-grid` the Lens × Stage heatmap (docs/stage-policy.md).
306
- * - `records` one register's browse table (the manual-override surface,
307
- * kept from the original scheme).
308
- * - `record` — the per-belief drill-in (full record page).
301
+ * - `assumptions` — the Assumptions nav item. The grid (Lens × Stage) is the
302
+ * default landing; `view: "all"` switches to the pipeline board; `lens` +
303
+ * `stage` drill into a single cell's assumptions (pipeline view filtered).
304
+ * - `experiments` the Experiments nav item (the live evidence plans list).
305
+ * - `readings` the Readings nav item (the evidence log list).
306
+ * - `assumption` — the assumption detail (next-move, relations, glossary,
307
+ * evidence-first readings). The id is the assumption id.
308
+ * - `experiment` — the evidence-first experiment detail (readings lead, bar
309
+ * lines as context, unstarted bars separate). The id is the experiment id.
310
+ * - `reading` — the per-belief reading detail (Context + per-belief verdicts
311
+ * with excerpts). The id is the reading id.
312
+ * - `records` — one register's browse table (the manual-override surface,
313
+ * kept from the original scheme). Backward-compatible with `#<register>`.
314
+ * - `record` — the legacy unified record page (still mounted for decisions +
315
+ * glossary, which keep the tabbed layout). The id is the record id.
316
+ *
317
+ * The legacy `next`, `pipeline`, and `stage-grid` routes still parse (they
318
+ * map onto the new nav: `next`→`assumptions`, `pipeline`→`assumptions` with
319
+ * `view: "all"`, `stage-grid`→`assumptions`) so old deep links keep working.
309
320
  */
310
321
  type Route = {
311
- name: "next";
322
+ name: "assumptions";
323
+ lens?: string;
324
+ stage?: string;
325
+ view?: "all";
326
+ } | {
327
+ name: "experiments";
312
328
  } | {
313
- name: "pipeline";
329
+ name: "readings";
314
330
  } | {
315
- name: "stage-grid";
331
+ name: "assumption";
332
+ id: string;
333
+ } | {
334
+ name: "experiment";
335
+ id: string;
336
+ } | {
337
+ name: "reading";
338
+ id: string;
316
339
  } | {
317
340
  name: "records";
318
341
  register: Collection;
@@ -325,10 +348,14 @@ type Route = {
325
348
  };
326
349
  /**
327
350
  * Parse a URL hash into a Route. The empty hash and anything unrecognised fall
328
- * back to the front door. A bare register name (`#assumptions`) stays
329
- * backward-compatible with the original `#<register>` scheme, so it resolves to
330
- * that register's Records table; `registers` is the set the instance allows, so
331
- * an unknown or disallowed register name falls through to the default.
351
+ * back to the Assumptions grid (the default landing). A bare register name
352
+ * (`#assumptions`) stays backward-compatible with the original `#<register>`
353
+ * scheme, so it resolves to that register's Records table; `registers` is the
354
+ * set the instance allows, so an unknown or disallowed register name falls
355
+ * through to the default.
356
+ *
357
+ * Legacy routes `#next`, `#pipeline`, and `#stage-grid` still parse — they map
358
+ * onto the new nav so old deep links keep working.
332
359
  */
333
360
  declare function parseRoute(hash: string, registers: Collection[]): Route;
334
361
  /**
@@ -376,8 +403,9 @@ interface UseNeedsHumanResult {
376
403
  declare function useNeedsHuman(basePath?: string): UseNeedsHumanResult;
377
404
 
378
405
  interface SidebarNavProps {
379
- /** The active route — drives which item is highlighted. A `record` route
380
- * highlights nothing (the drill-in has no nav item; OPS-1298). */
406
+ /** The active route — drives which item is highlighted. A detail route
407
+ * (`assumption` / `experiment` / `reading` / `record`) highlights its
408
+ * parent nav item. */
381
409
  route: Route;
382
410
  /** Called when a nav item is chosen, with the route it selects. */
383
411
  onNavigate: (route: Route) => void;
@@ -386,17 +414,20 @@ interface SidebarNavProps {
386
414
  /** Per-register needs-a-human counts — a persistent alert badge on the
387
415
  * register that needs attention (kill lane, overdue plans, tensions; story 20). */
388
416
  needsHuman?: Partial<Record<Collection, number>>;
389
- /** The registers shown under Records, in order. */
417
+ /** The registers shown under a "Registers" group (decisions + glossary keep
418
+ * the legacy records-table surface). The three nav-owned registers
419
+ * (assumptions / experiments / readings) are not duplicated here. */
390
420
  registers: Collection[];
391
421
  }
392
422
  /**
393
- * The sidebar nav across the two groups (OPS-1298): a **Workflow** groupNext
394
- * move (the default landing, badged `home`) and Pipeline above the **Records**
395
- * group of register tables (kept, not subsumed; the browse-everything /
396
- * manual-override surface). A presentational brick: the caller owns the active
397
- * route and supplies the counts. The assembled `<ValidationOSDashboard/>`
398
- * composes this; it's also exported for anyone building their own surface.
399
- * Styled with the package's own token sheet — no host Tailwind.
423
+ * The sidebar nav (DEV-5879 redesign): three top-level itemsAssumptions
424
+ * (the default landing, Lens × Stage grid with a "View all" toggle to the
425
+ * pipeline board), Experiments (the live evidence plans), Readings (the
426
+ * evidence log) above a small "Registers" group for decisions + glossary,
427
+ * which keep the legacy records-table surface. A presentational brick: the
428
+ * caller owns the active route and supplies the counts. The assembled
429
+ * `<ValidationOSDashboard/>` composes this; it's also exported for anyone
430
+ * building their own surface. Styled with the package's own token sheet.
400
431
  */
401
432
  declare function SidebarNav({ route, onNavigate, counts, needsHuman, registers, }: SidebarNavProps): react.JSX.Element;
402
433