Explore the demo
https://demo.telecraft.dev is a read-only Telecraft console over a curated
synthetic estate. Nothing on the site is hand-written: the cards, drawers,
findings, and rendered artefacts are all output of Telecraft's own evaluators
over the YAML in telecraft-dev/estate-demo. Push to that repository and the
demo rebuilds. The demo pipeline is the product pipeline.
The estate is a mid-sized retailer's observability setup, authored to show the governance states that are interesting rather than the ones that are common.
What read-only means
There is no server behind the site. The console is built in demo mode and
reads a demo-snapshot.json beside it, holding the documents the Telecraft
API would serve. With no server to write to, the site is read-only.
The forms still work, and the refusal tells you where the boundary is. Fill in a Grant, click Propose as a pull request, and you get:
This is a read-only demo, so proposing this policy change stops here. On a real instance the console never writes to the estate. Instead it opens a pull request, rendered and attributed to you, and the review decides. Everything up to this point (the evaluation, the refusals, and the rendered preview) is the same code that runs on a real instance.
The header carries the same message permanently, beside the commit the site was built from and the moment the estate was evaluated.
The chrome and the context strip
Two controls sit in the chrome above every Workspace:
- Jump to object (
⌘K) is how you reach a specific Tier, Service, Blueprint, or Catalogue entry. There is no object-first navigation tree. - The user chip shows whose team scopes the shelf. The demo signs you in as the root Team, so the first view is the whole estate. Its panel also names the version the console was built from.
A context strip sits beneath the chrome, on every Workspace:
- Lens picks the leading Environment,
productionby default. It sets emphasis and evaluation context rather than filtering: surfaces that show several Environments keep every row visible. - Beside the lens, the strip reads the estate under it: the finding count with its worst mark and any exempt count, the active Catalogue version with anything on offer, and the ungoverned collector count. Each reading opens the surface that shows it in full, and a quiet summary at the right edge covers the other Environments.
Estate
The landing Workspace has three views: Shelf, Roll-up, and Flat list.
The Shelf is a grid of card faces, grouped by team subtree. The view and scope switchers share the title row with Add a Tier. Within each team section, the Environment the lens names leads with its cards drawn in full, and every other Environment sits beside them as a segment carrying its name, its Tier count, its finding count, and its worst mark, with an Expand control that draws its cards in place. Each card shows three bands: Delivery, Expectation, and Conformance. Cards sort worst severity first, from the face alone. A Tier that is still waiting for its first collector carries a Set up its first collector door where its readings would be; it opens the card's setup guidance.
Below the cards, a Collectors band shows the scope's collectors: with a card selected, that Tier's matched collectors first, then the rest of the scope. It shows a fixed number of rows, says how many it did not show, and links to the Flat list, which holds the filters.
A banner sits above the grid:
4 ungoverned collectors: 2 served the Unmatched artefact, 2 foreign. They don't match any Tier.
Click a card to open its drawer. The data-flow/gateway drawer names the
Tier, its owning team, its Environment, its Service Class, and its population
(6 matched, floor 6 (declared)), then lists every finding with its
remediation and a link to whoever acts on it:
trace-identity: not delivered in production (storefront/catalogue-web)traces-delivered: broken pipeline in production (storefront/catalogue-web)metrics-delivered: broken pipeline in production (storefront/search), marked waivedpins infosec/pii-redaction@2, but the owning team's head is version 3
Claims carry a why? control that opens their provenance: the file, the line, and the commit the claim was computed from.
The Roll-up view shows the same verdicts as ratios per team, with waived counts at every level:
Team Tiers Delivery Expectation Conformance All Environments
Engineering 5 / 6 4/5 ✗ 3/4 ✗ 1/4 ✗ 1 exempt 14 findings, 1 exempt
Platform Engineering 4 / 5 3/4 ✗ 2/3 ✗ 1/3 ✗ 1 exempt 10 findings, 1 exempt
Data Flow 2 / 3 2/2 1/2 ✗ 0/2 ✗ 1 exempt 9 findings, 1 exempt
Edge Operations 2 / 2 1/2 ✗ 1/1 1/1 1 finding, 0 exempt
Storefront 1 / 1 1/1 1/1 0/1 ✗ 4 findings, 0 exempt
Teams with no Tiers read no verdicts rather than a misleading 100%.
The Flat list is the collector table: one row per collector, with filters for Tier, team, and Environment, and an Ungoverned only checkbox. Select it to show the four collectors the banner counts:
Collector Tier Environment State Version
legacy-agg-1 ungoverned · served the Unmatched artefact production reporting 0.152.0
legacy-agg-2 ungoverned · served the Unmatched artefact production reporting 0.152.0
mktg-otel-1 ungoverned · foreign production reporting 0.152.0
mktg-otel-2 ungoverned · foreign production reporting 0.152.0
Each row has a checkbox, which starts the claim flow: select the collectors, and the console suggests a selector generalised over the identity attributes they share.
Topology
Two views: Flow canvas and Rollouts.
The canvas draws the Tier graph in bands: ungoverned arrivals at the top, then
production, then staging. Sources (internet, workloads) sit beside the
Tiers they feed. Every Hop is drawn once per signal, so a Hop carrying three
signals is three routed edges.
Each Tier node carries its Service Class, its matched count, and the split by delivery path:
gateway C1 6 matched 6 served · 0 git
kafka-bridge C2 5 matched 5 served · 0 git
edge C1 24 matched 0 served · 24 git
edge-arm 0 matched 0 served · 0 git
mobile-edge C2 3 matched 3 served · 0 git
edge is the git-delivered Tier, and it shows up as legitimately as the
served ones.
A row of buttons above the canvas traces one Service's Paths through the graph, and Simulate flow animates them.
The Rollouts view currently reports:
No Rollout is active.
The demo estate does carry an active Rollout, data-flow/bridge-canary, but
its effect is visible in the estate repository rather than in this view: the
Kafka bridge Tier is dual-bound, and rendered/data-flow/[email protected]
renders beside the base artefact. The snapshot the demo console reads does not
carry Rollout state. To see how a Rollout behaves, read stage a
Rollout and run the renders yourself.
Compose
The Blueprint authoring Workspace. The landing is a table of the estate's
five Blueprints: each row shows the version and owning team, the signal lanes
the Blueprint declares, its satisfies claims, the Tier that uses it, and its
Allow-list standing. A Blueprint whose lanes use a component outside its
team's effective Allow-list reads save disabled, with the offending
reference named beside it; a Blueprint bound to no Tier says so. A
Requirements section beneath lists each claim with the Blueprint that makes
it, and → verdict opens the judgement on the Requirement-first surface.
A rail on the right carries what you would check before composing: your team's effective palette summary with any Grants in force, and the active Catalogue version with the impact report behind any version on offer. Each reading is a door into Catalogue & Governance.
Picking a Blueprint opens three surfaces, Composer, Requirement-first, and Node canvas, plus a YAML toggle, with the list beside them.
The Composer shows the palette and the lanes side by side. The palette is what this team can use, and it says why each entry is offered:
data-flow/gateway-exporterandinfosec/pii-redactionappear as shared Components, named by their owning team.kafkaunder exporters is annotatedvia Grant kafka-egress-for-data-flow (platform → data-flow).- Entries below the floor carry the reason inline, for example
alpha on profiles: below this Service's C1 floor in production (beta). They are greyed, not hidden, so you can see the cost of the choice. - A line at the foot reads
258 components hidden by your allow-list.
The lanes show the pipeline in order. Each Component links to its Catalogue
entry and is tagged with its stability for that signal, under a header naming
the floor in force (floor beta (C1 · production)). Above them, the
satisfies claims link to the verdict on the Requirement-first surface.
A Save: propose v5 as a pull request button sits at the top, with the line
You can edit this Blueprint: data-flow is one of your teams. A Blueprint
another team owns is read-only, and the same line says so.
Catalogue & Governance
Three views: Browse, Effective palette, and Governance.
Browse is the Catalogue: 268 entries in the active v0.158.0 artefact, with
v0.156.0 kept beside it in the selector. Installed Catalogues are kept, never
replaced, because a collector is judged against the Catalogue for the version
it runs. Filters narrow by stability, by signal, and by a name search, and
each row shows stability by signal rather than one overall rating. A row
whose signals all sit at one level shows a single all signals chip; mixed
rows keep a chip per signal. Below the table, a Governed Components
section lists the estate's configured instances at their pinned versions.
Effective palette is telecraft palette as a page: pick a team and see every
entry it can use, with its origin (default-allow, allow-list, or a named
Grant) and a why? control.
Governance is where you edit Allow-lists and Grants. Each declared list is a
text area of class/type-pattern shapes, with a note that an emptied list is
refused: to inherit unchanged, a team declares no list at all. Below that sit
the existing Grant and a form for a new one, gated on the rule that a Grant's
owner's team must sit above its target.
What the estate deliberately contains
Every state in this table is authored on purpose. It is the list worth checking your own estate against.
| State | Where to look |
|---|---|
| A healthy Tier, all three bands green | edge-ops/edge, 24 node agents at their declared floor |
| A requirement violation | storefront/catalogue-web stopped delivering traces: configured and not working |
| A waived finding | storefront/search misses metrics-delivered under an authored Exemption. The count is waived, the diagnosis is not |
library_drift |
data-flow/gateway-standard pins infosec/pii-redaction@2 while its owner is at v3 |
| A stability-floor breach | storefront/mobile-collector routes metrics through a processor upstream rates alpha, below the C2 production floor |
| Ungoverned collectors | Four collectors match no Tier selector: two served the Unmatched artefact, two read through the estate provider |
| A never-seen Tier | edge-ops/edge-arm was authored ahead of a migration and nothing has ever matched it |
| A silent component | The Kafka bridge's batch processor emits no self-telemetry past the Settle window |
| Delivery divergence | One staging collector reports an artefact other than the one git holds |
| An active Rollout | data-flow/bridge-canary is mid-stage across the Kafka bridge |
Two drawers repay a visit. edge-ops/edge-arm shows a Tier with a floor and
no population:
no collector matches this Tier's selector
Check the Tier's selector against what the collectors actually report, or delete the Tier if the workload it was authored for never arrived.
Its population line has a why? control, and opening it gives the whole chain:
population floor 4, declared on the Tier as min_expected: a minimum, not an exact count
teams/edge-ops/tiers/edge-arm.yaml:12min_expected: 4judged at
870c9b8a26458402c1982359bcdea90fdb7ef73d
data-flow/gateway-staging shows all three bands finding at once:
[conformance/violation] pins infosec/pii-redaction@2, but the owning team's head is version 3
[expectation/advisory] unbacked arrival claim on the logs lane for checkout/payments
[delivery/advisory] 1 of 2 collectors report an artefact other than head
Three different questions, three different owners, on one card.
Flow is declared, and shape still is not
Every card's flow table carries figures: what each signal lane accepted, what
it sent, the difference between them, and how long ago the counters were
read. storefront/mobile-edge sheds four fifths of the metrics it accepts
through a filter. The table reports that as a reduction, never as a loss,
because a filter dropping most of what it sees is doing the job it was
authored to do.
A repository can't hold a running collector estate or the telemetry that
arrived from it. The demo doesn't invent either: it declares them, and
telecraft snapshot plays them back through the same seams a live instance
reads (demo/readings.yaml in the estate repository). Everything judged from
them is judged by the product's own evaluators.
Three things are still rendered as something other than a figure, and all three are worth a look, because they are the point:
-
edge-ops/edge-armreads unknown on every lane. Nothing has ever matched that Tier, so no counters exist to read. A zero would be a claim about a Tier Telecraft can't see, and the contract keeps "we can't see" and "nothing arrived" apart. -
Some lanes read "no lane on this Tier".
data-flow/kafka-bridgewires no metrics pipeline andstorefront/mobile-edgewires no traces pipeline, so there is nothing on those lanes to meter. Their counters would truthfully readin 0 / out 0, which is identical tostorefront/catalogue-web's traces lane: a lane that is wired, broken, and a genuine finding. Two opposite meanings can't share one rendering, so a lane with no pipeline behind it carries no numbers at all. -
Shape reads unknown on every card, and the drawer says why:
no shape reading exists at pipeline grain: self-telemetry counts items, not what is inside them, and service-grain conformance is never blended into pipeline grain
Self-telemetry counts items passing through a pipeline; it doesn't open them. The service-grain reading that would answer the question is a different grain, and metering never blends the two.
Run the same estate locally
Everything the site shows is reproducible from the two public repositories:
git clone https://github.com/telecraft-dev/estate-demo.git
Download the CLI from the latest release beside it, as the quickstart does.
The quickstart takes it from there.