Local dashboard and throughput
Local dashboard and throughput
Use this reference when preparing a model for graphical exploration or serving the bundled local dashboard.
Dashboard-ready model
Keep ltp/ltp-model.yaml authoritative. In addition to the shared-model fields,
include:
analysis:
current_constraint: RC-1
recommended_next_action: ACT-1
expected_effect: DE-1
updated_at: 2026-07-12T14:32:00Z
links:
- id: L-1
from: RC-1
to: UDE-1
relation: causes
confidence: high
views:
current-reality:
title: Why delivery is unpredictable
purpose: The causes behind the observed effects.
entities: [RC-1, UDE-1]
links: [L-1]
Use stable link IDs. Define only views supported by the analysis. Reuse entity and link IDs rather than copying entities into view-specific structures.
Supported view keys are:
goal-treecurrent-realityevaporating-cloudfuture-realityprerequisite-treetransition-tree
Validate the contract against references/ltp-model.schema.json when a JSON
Schema validator is available.
Throughput versus flow indicators
Do not equate completed tasks with Theory of Constraints throughput unless the project explicitly defines completed tasks as its goal unit.
Create ltp/throughput.yaml only when a defensible definition and real periods
are available:
definition:
name: Validated decisions adopted by participating groups
unit: adopted decisions
period: week
goal_entity: G-1
constraint_entity: RC-1
source: manual activity log
periods:
- date: 2026-07-06
throughput: 3
completed: 8
work_in_progress: 14
blocked: 5
median_cycle_time_days: 6.2
constraint_queue: 9
Treat completed, work_in_progress, blocked, median_cycle_time_days, and
constraint_queue as supporting flow indicators. Never fabricate missing
periods or silently mix different units.
Validate against references/throughput.schema.json when possible.
Automatic Git-derived node throughput
Use Git-derived node throughput only when the recipient project explicitly defines adopted changes to another project's LTP model as its goal unit. A committed change is treated as adoption into the canonical model; proposed, uncommitted, formatting-only, and generated Markdown changes do not count.
The bundled dashboard configures this relationship for the 2R projects:
- source project:
second-renaissance - canonical source: repository-root
ltp/ltp-model.yaml - recipient project:
2r-research-circle - baseline: the initial committed Second Renaissance model
- unit: one stable entity ID created, semantically updated, or deleted in one first-parent revision
The semantic projection for an entity contains the entity fields, its incident causal links, and its tree-view memberships. YAML mapping order and set-like list order are normalized away. A stable ID counts at most once per revision, even when several of its fields change:
throughput = created IDs + updated IDs + deleted IDs
dashboard/throughput.config.json declares the relationship. Both npm run build and npm run dev generate the recipient's throughput.yaml before
starting. Run it directly with:
cd skills/project-ltp/dashboard
npm run generate:throughput
The generated file contains consecutive weekly aggregates—including observed zero-change weeks through the built revision—and a revision ledger with the affected IDs. The generator also synchronizes the static source-project model from the same Git revision, so the displayed tree and measured tree cannot silently diverge. Because the calculation uses repository history, builds must have the configured baseline revision available rather than a history truncated after that revision.
Serve locally
From the skill's repository, run:
python skills/project-ltp/scripts/serve_dashboard.py --project /path/to/project --open
The server binds to loopback, prefers 127.0.0.1:8765, serves only the bundled
frontend and the two known YAML files, and is read-only. If the preferred port
is occupied and --port was not supplied, it tries subsequent ports and prints
the selected URL. An explicit --port remains strict. The dashboard polls file
metadata so model changes appear without restarting the server.
Use --host with --allow-network only after the user explicitly requests
network exposure.