md2hd

Use cases

Node types are yours to invent.

md2hd has no opinion about what you are mapping. It reads the types your notes declare and draws them. That one decision is why the same canvas reads as a pipeline, an architecture diagram, an argument or a plot outline — without being told which.

Business development

Who actually decides

A pipeline is not a list of companies. It is a handful of people, the bodies they sit inside, and the one relationship every other one routes through. The list view hides that; the map is the shape of it.

what you wrote
---
id: dana-whitfield
type: person
weight: lead
title: Dana Whitfield
subtitle: City Clerk
works_at: "[[riverside-council]]"
rel:
  owns: open-records-portal
---

Replies within a day, ignores form
letters. met:: [[kickoff-call]]
what md2hd drew
ORGANIZATIONRiverside City CouncilMunicipal · 9 membersPERSONDana WhitfieldCity ClerkPROGRAMOpen Records PortalLegacy system, no APITHREADKickoff Call — May 14Forty minutesemploysownsattended
  • Type by what a thing is — org, person, thread, program — and the categories separate themselves on sight.
  • Weight the two or three that decide the outcome as lead, and the supporting cast recedes without being deleted.
  • Meetings are nodes too. A thread linked to the people who attended keeps the history attached to the relationship.

Engineering

What depends on what

The architecture diagram in the wiki is eight months out of date because keeping it current is somebody else’s job. The notes you took while learning the system are current, because you took them last week.

what you wrote
---
id: notify
type: service
title: Notification Service
subtitle: Go · 3 instances
runtime: go1.23
oncall: platform
rel:
  depends_on: [events-queue, user-db]
---

Fans out to email and push. Retries
three times, then dead-letters.
what md2hd drew
SERVICENotification ServiceGo · 3 instancesQUEUEEvents QueueKafka · 6 partitionsDATASTOREUser DBPostgres 16SERVICEIngest WorkerPythondepends ondepends onwrites to
  • Types are services, datastores, queues, jobs — whatever your estate actually contains.
  • depends_on: in the frontmatter of a service note is both documentation and an edge.
  • A dependency you have not documented yet draws as a grey placeholder, so the gap is visible rather than assumed away.

Research and reporting

How the evidence connects

Sources, the claims they support, and the claims they undercut. The argument is the graph; the prose in each node is the working. Reporting a story is mostly finding out which node everything else hangs off.

what you wrote
---
id: admin-precedent
type: claim
weight: lead
title: Clerks can designate
  administratively
confidence: high
rel:
  supported_by: [precedent-scan]
  contradicts: vote-required
---

Three comparable municipalities,
2019–2023. No council vote in any.
what md2hd drew
CLAIMClerks can designateConfidence: highSOURCEPrecedent ScanThree municipalitiesCLAIMA vote is requiredAssumed, unverifiedSOURCERCW 65.16.020Statutesupportscontradictscites
  • A source node carries its own provenance as ordinary frontmatter — url, date obtained, who provided it.
  • Written as supported_by: on the claim, drawn as supports from the source — passive voice always points backwards, so md2hd stores it the other way round.
  • Select a claim and every source that bears on it appears on one side, everything it implies on the other.

Writing

Who knows what, and when

A cast list tells you who exists. It does not tell you who has met whom, who is lying to whom, or which two threads have to collide before chapter nine. That is a graph, and you have already written it in your notes.

what you wrote
---
type: map
symmetric: [knows]
inverse:
  serves: employs
---

---
id: mira
type: character
weight: lead
title: Mira Halloway
subtitle: Archivist · unreliable
rel:
  knows: [tomas]
  wants: the-ledger
---
what md2hd drew
CHARACTERMira HallowayArchivist · unreliableCHARACTERTomás EnrightHarbour masterOBJECTThe LedgerObject · contestedBEATThe harbour fireChapter 9knowswantsdestroys
  • Characters, places, objects and beats are types. knows, betrays, wants are relations.
  • symmetric: [knows] in the map block, and a mutual acquaintance draws as one line with a chevron at each end.
  • Weight the protagonists as lead and the walk-ons as faint, and the cast sorts itself visually.

None of these are templates.

There is nothing to install and no schema to pick. Every map above is plain markdown with atype: on each block — start with whatever vocabulary your notes already use.