Concept space reader: what we write about and how we argue
This document grounds an external agent in the ideas our concept writing is built from, so that tutorials, posts and explanations written for us sound like ours and stay true. It covers what a Dynamic Knowledge Repository means in our work, the gap-finding method Scout runs, how our concept-space research is organized, how a post gets built and deployed, and the writing rules that gate all of it. It is written for a capable engineering agent who needs to replace an existing model of this system with the correct one.
Read GROUND-TRUTH-2026-08-01.md first if you have not. That document states which
systems run and which do not. This one states what we mean and how we say it. Where the
two touch, ground truth wins.
Every path, count and date below was checked against the vault on 2026-08-01.
1. What DKR is
Source: projects/dkr-agency/DKR-SYNTHESIS-OUTLINE.md.
The definition
A Dynamic Knowledge Repository is Douglas Engelbart's term. It is a living body of knowledge that a community continuously develops, integrates and applies. A static archive is the thing it is defined against. Our DKR agent is the steward of one person's repository. It works across every system where knowledge work and communication happen: Obsidian, Slack, email, Google Workspace. Its job is to raise the quality and the connectedness of what a person knows, so that intellectual capital carried in someone's head becomes legible, queryable and compounding.
Three parts, stated as roles. The agent is the harness. The knowledge graph is the territory. Intent is the fuel.
The lineage we claim is explicit: Vannevar Bush's Memex, Engelbart's augmentation research, Gordon Pask's conversation theory and entailment meshes. When a post reaches for an image, it reaches for those, plus the archivist who lives inside every record of a life.
Intent as propulsion rather than heat
This is the operating principle, and it is the sentence most worth getting right.
Intent must be converted into propulsion, meaning productive work that is logically consistent and predictable. The failure state is heat, meaning motion without direction. Reasonable foresight plus sufficient resources should reliably power ongoing operations and carry a brand's value propositions through known channels. Everything else in the system exists to do that conversion.
When you write about this, keep it mechanical. Propulsion and heat are a distinction about whether work accumulates, so give an example of each rather than restating the pair.
The double-loop model
The governing model is Chris Argyris and Donald Schon's: Governing Variable, then Action Strategy, then Consequences.
Single-loop learning adjusts the action strategy when consequences disappoint. The internet is excellent at this. Feedback is fast and a group can confirm collectively whether something works.
Double-loop learning goes back and interrogates the governing variable itself. The internet is poor at this. There are almost no open spaces to examine the assumptions behind a subject, a task or a project: the competitive position, the value flows, the conditions that create advantage or friction.
DKR is built as a double-loop instrument. The large platforms build a psychological profile about a person, tune their own strategy against it, and never let the person edit the governing variables. DKR puts those variables in the person's hands and runs continuous improvement with them. This is the same gap a forum answer leaves open: many answers with merit, and no shared space to test, challenge, coordinate or reward a strategy.
Grounding in the vault: cybernetic-foundations for first, second and third-order
feedback, and AXIOMATIC-PILLARS-MOC for the five pillars.
The persona
A DKR agent has a customizable persona, generally a blend of Socrates, Plato, Engelbart and Pask: a Socratic interrogator, a model-builder, an augmentation architect, and a conversation theorist.
It sits above the personal-assistant tier. An assistant handles the mundane flow of items, deadlines and record-keeping. The DKR agent works on the quality and structure of what a person knows.
The capital it deploys is soft and invisible: long-lived memory of many people's interests, intents and needs, knowing where to go for things, and a matchmaking instinct. Agency and reflexivity are treated as primitives. Invisible relationships get encoded so they retain their complexity and their power. A favor called in, an introduction made, a reputation imprinted on an artifact: each keeps its value when the other party can believe in and verify the source.
The agency itself is dozens of agents in combination. Five recurring ensembles are named: a Panel of Experts for multi-perspective interrogation of a claim, an Algorithm of Thought for the structured reasoning each agent runs, Rubin and Eno as generative-constraint producers in the Oblique Strategies tradition, the CODIAK ABC agency from Engelbart, and Porter's Force Field for the competitive structure of a vertical.
The honest status of the pieces
Say what runs and say what does not. The outline itself keeps three columns, and the same honesty is expected of anything written from it.
Built and running today: Scout gap-finding, social-intelligence enrichment, SBPI with its nightly and weekly schedule, value-flow mapping with a worked template, the agent framework with approved specs and capabilities, scheduled automation, and the DKR capability itself.
Partial: the Intent Protocol at draft v0.1, knowledge cohorts with a precursor only, the pulse (a health check every fifteen minutes and a daily digest at 18:00 on weekdays), the Business Model Canvas overlay at draft v1.0, and the maps-of-content spatial model.
Not started: Trailblazer beyond design notes, and the DKR persona plus its onboarding interrogation ontology.
The largest unbuilt area is knowledge-space cohorts and matchmaking, which is DKR working across several people's graphs so that when another member holds what you flagged as missing, the agent tells you. Write about it as a design, never as a running feature.
The nightly connection loop deserves a precise note, because the two source documents were
written at different times. DKR-SYNTHESIS-OUTLINE.md describes the nightly
connection-making loop as a sprint target. DKR-OPERATIONS-GUIDE.md lists dkr-nightly
at 04:00 as live under launchd. Treat the scheduled job as running and the full ambition
of the loop, raising legibility across attestations, attributions, annotations and
declarative intent, as partly built.
2. Negative space: the method Scout runs
Source: projects/dkr-agency/guides/DKR-OPERATIONS-GUIDE.md, section 1. Canonical agent
spec: scout-agent v1.1.0, approved.
Scout inverts the usual question. Instead of asking what do we know, it asks what are we not discussing. The guide calls this structure by subtraction. Five question types carry it:
- Absence. Topics conspicuously missing given the stated goals, at coverage below five percent.
- Bridge. Connections between clusters that are never explicitly made.
- Decay. Topics that dropped off and stayed relevant, meaning more than fifty percent decline over four weeks or more.
- Contradiction. Unresolved tensions across conversations.
- Horizon. Adjacent fields nobody is monitoring.
How it runs: on demand through /scout or /gaps against a topic, project or client
context, and on a schedule, weekly internal plus weekly external with a monthly full pass,
at 08:00 Monday per the spec config. It pulls graph topology, recent synthesis, and for
external and horizon questions an InfraNodus network analysis using betweenness centrality
and community detection.
What it emits: a structured gap report holding structural opportunities, research
questions, content angles, priority scores from 0 to 1, and recommended actions. Reports
are stored under the project's gap_reports/ folder. A gap scoring above 0.7 can trigger
a visual brief.
Where it hands off: content angles go to the Content Factory, missing-bridge suggestions go to the knowledge agent, and routing goes to the orchestrator. Inside the DKR agency Scout is the organ that tells the nightly loop where the graph is thin.
Two things to carry into any writing about this. Negative space is a measurement discipline with thresholds, so quote the thresholds. And a gap is an instruction about what to build next, never a verdict that something is failing.
The rest of the operating loop, in the order the guide gives it: Scout finds what is missing, Trailblazer maps the environment and models intent (prototype only), the social-intelligence agent enriches the people in the picture, SBPI scores the competitive structure, the reports synthesize daily, weekly and value-flow views, and the DKR agent links new notes and raises legibility.
One number from the social-intelligence section worth reusing because it is concrete: the enrichment trade-off is fast, affordable, accurate, and you pick two. Confidence scores gate what you may do with a finding, with 80 to 100 safe to personalize and 0 to 39 generic only.
3. Concept spaces: the research pattern
A concept space is our unit of research. One dated folder holds a whole investigation from
raw material to published explanation, and the folder name states the date and the
subject: projects/dkr-agency/concept-space-YYYY-MM-DD-<topic>/.
The full shape has five directories:
concept-space-YYYY-MM-DD-<topic>/
intake/ raw material: transcripts, repos, exports, captured sources
analysis/ the passes over it, including InfraNodus graph output and a synthesis
mykg/ the typed bundle: nodes.jsonl, edges.jsonl, schema.json, knowledge_graph.ttl
_okf/ the Open Knowledge Format projection, one Markdown concept per node
site/ the deployable explanation
Later spaces are lighter. Three of the ten run as POST.md plus site/, sometimes with a
build.py, because the research had already happened elsewhere and the space existed to
write the explanation.
Ten concept spaces exist as of 2026-08-01, and this video-corpus space is the eleventh:
| Concept space | Topic |
|---|---|
concept-space-2026-07-22-ruflo-swarm |
An open-source agent harness read for what could be forked, and which transformations make a system smarter without making its memory less repairable |
concept-space-2026-07-23-agent-harnesses |
A comparative pass over agent harnesses |
concept-space-2026-07-23-dkr-active-notes |
The active-notes lifecycle: rules carried in a note, the standards stack under them, the export boundary, intake reliability, and agent traces |
concept-space-2026-07-23-infranodus-skills |
Consolidating overlapping InfraNodus skills into one canonical operator |
concept-space-2026-07-23-personality-grammar |
Personality Mode v0: an agent's conversational character expressed as a specification, with an RDF-star data model |
concept-space-2026-07-23-skills-in-production |
What the rebuilt skill collection did on its first full report |
concept-space-2026-07-24-retrieval-grammar |
A census of every place our agents look things up, adjudicated by a retrieval council |
concept-space-2026-07-30-correctness-over-style |
Why correct output can still be unreadable, with the same content written under three style guides |
concept-space-2026-07-30-encoded-judgment |
The filing system was the product all along |
concept-space-2026-07-31-slack-agent |
Asking the intelligence system a question from Slack |
The pattern to learn from this: research produces a typed graph and a written explanation from the same folder, and the explanation cites the folder. A tutorial written for us should be able to name the concept space its claims came from.
4. The content pipeline
Field reference: content/series/README.md, which is checked against the code that reads
it. Where an older document and the code disagreed, the code won.
Where a post lives
content/series/_registry.yml <- build reads this first
content/series/<series-slug>/_series.yml
content/series/<series-slug>/pathways/<NN-pathway>/_pathway.yml
content/series/<series-slug>/pathways/<NN-pathway>/<NN-slug>.md <- the lesson, source of truth
content/static/ <- copied verbatim into the build
content/_site/ <- build output, wiped each run
build.rb treats every directory under content/series/ whose name does not start with
an underscore as a series. Loose files at that level, including the README, are ignored by
both scripts.
The real counts, checked on 2026-08-01
Fourteen series directories. Ninety-one lesson files under pathways/. By status: 6
published, 16 ready, 69 draft. _registry.yml lists 13 series and was last updated
2026-04-25, so the registry trails the directories.
GROUND-TRUTH-2026-08-01.md states 15 series and 93 lessons with 6 published, 15 ready
and 72 draft. The directory count above is what the filesystem holds today. Use it, and
recount before publishing any number.
The frontmatter fields that matter
Identity and placement: title, type (always content_lesson, and omitting it makes
the lesson invisible in all eight Posts.base views), series, pathway, position,
lesson_type, ip_level (rendered as "IP layer N", with an IP firewall view filtering
ip_level <= 2), client_anonymized, domain, stage_in_spiral, audience_signal,
canonical_precedent, parent_concept, source_path, tags.
Pipeline state: status from the six values draft, review, ready, scheduled,
published, archived, and nothing else; platforms opting in to any of website,
linkedin, twitter, bluesky; scheduled_for; platform_cuts holding per-platform
override text; published_url and published_date written by the mark command;
engagement entered by hand.
Concept framing: capability_uplift, one lowercase sentence with no trailing period,
which renders on the page as the "What this gives you" pull quote; use_case_context and
friction_pattern, both lists of snake_case slugs.
Optional body extras: references as a list of {title, url, type}, and exercises as a
list of {title, prompt, type, duration}.
One builder constraint that changes how you write: the converter handles h2, h3,
blockquote, bold, italic, inline code, images, links and wikilinks, and it does not
convert bullet or numbered lists. Write lists as separate short paragraphs or as an
exercises block. Raw hyphens land on the page inside a paragraph.
The workflow and the commands
Edit the lesson, then:
ruby content/publish.rb status <slug> ready
ruby content/publish.rb prep linkedin <slug>
ruby content/publish.rb mark linkedin <slug> <url>
ruby content/publish.rb site
site runs build.rb and deploys. list prints every lesson sorted by series, pathway
and position. show <slug> prints one lesson's placement and state. schedule <slug>
<YYYY-MM-DD> sets scheduled_for and forces status to scheduled. Slug matching is a
substring test against the filename, and an ambiguous slug lists candidates and stops.
prep shells out to pbcopy, so it works on the MacBook and fails silently on the
ThinkPad. prep website copies nothing and prints a pointer back to site.
Deploy
Both publish.rb site and build.rb --deploy run:
wrangler pages deploy content/_site --project-name content-series --branch=main --commit-dirty=true
Production URL: https://content-series-b6l.pages.dev.
The bare content-series.pages.dev also answers and is not this deploy target. Checked on
2026-07-27 it served a stale build dated 2026-05-01. Verify against the -b6l host with
curl, never with a fetching tool that caches.
Before deploying, run wrangler whoami and confirm the account email
jonny@weareshur.com and account id a6b443ed255b25135691b53edf2c3eeb. Neither script
checks this, and build.rb --deploy skips the preflight entirely, so prefer
publish.rb site.
Two known gaps, stated because they bite: 30 of the lesson files predate the publishing
fields and have no published_url or published_date block, so mark aborts on them
until the block is added by hand. And build.rb fails outright if
content/series/_registry.yml is missing.
5. How we argue
Style registry: projects/shur/report-grammar/STYLE-REGISTRY.md. Deterministic check:
python3 projects/shur/report-grammar/grammar-gate.py <file-or-dir>, which globs *.html
under a directory, so Markdown has to be passed by path.
Every document names a reader and a style guide
No category is exempt for being technical, internal, or written by the system for itself. If a person receives it, it is written for that person.
| What is written | Who reads it | Style guide |
|---|---|---|
| Client reports and briefs | Client executives | House voice canon |
| Memos to a named person | That person | House voice canon |
| Technical documentation, architecture, build plans, READMEs, specs | The people who build it | Google developer documentation style |
| Plans and handoffs the team reads | Whoever runs the work | Google developer documentation style, plain English summary first |
| Handoffs written for an agent to execute | An agent | None required, and the document should say so |
| Slack messages | The channel | Plain English, Slack mrkdwn |
Two frontmatter fields carry this: style_guide taking house-voice-canon,
google-developer, asd-ste100 or none, and reader naming a person or a specific
role. Both were approved 2026-07-31 and applied to 1,670 documents. audience: internal
is not a reader. It says who may see a document and nothing about how to write it.
The registry exists because of a specific failure on 2026-07-30. A co-founder read an integration plan and could not follow it. It opened on protocol names, an agent identifier and three abstractly named planes. He said he would not paste our documents into an outside model to make them readable, because that feeds our own material to someone else's system. So the plain English has to be in the document when it is written. There is no repair step afterwards.
How a post is built
Every one of the fifteen posts in blog-posts/ follows the same order.
- Open on a situation, not a definition. "Most client intakes produce a written summary and a folder of files." "This morning my knowledge system made about thirty edits across a dozen files." "My knowledge base has changed its mind about a lot of things."
- Name the mechanism in the second or third paragraph, with its real vocabulary. Five REA classes. Nine BMC cells. Thirteen locked schema classes. Six frontmatter fields. Conant and Ashby, 1970.
- Give the number and where it came from. 49.4% of questions returned the superseded fact. 50 tamper cases caught, 20 clean chains with zero false alarms. 0.29 blended against 0.50 for keyword alone. 766 real link edges hiding under nearly 38,000 tag-derived ones.
- State the limit in the writer's own voice. "The signatures here are symmetric," so anyone who can verify can in principle forge. "Five of the 27 cases are governance decisions with no dated event attached, so that question is untestable for them by construction."
- Close on an action or an open question. A "How to apply it" paragraph, or the thing that is still unresolved and what will answer it.
What a good one does
It earns the abstraction. Post 14 spends four paragraphs on a control-systems theorem and then cashes it out into four design decisions we already defend, each in one sentence.
It reports the failure at the same resolution as the success. Post 12 exists because a candidate produced a positive number on the tuning set and was still sent back on the held-out set.
It hands the reader something to hold. Post 09 attaches the concepts it describes as a
downloadable bundle with an agent.md an assistant can act on. Post 15 gives three
questions that fit on index cards.
It says how the thing could be wrong. Post 08 names two constraints learned the hard way: a prompt is not a constraint because models drift on property names, and a text string is not an entity because without a stable ID registry the same company becomes a different node on every run.
What the anti-slop rules prevent
Each rule blocks a specific failure we have shipped at least once.
- No em-dashes. Use a comma or a period. This one is mechanical and the gate catches every instance.
- Full ISO dates only. Write 2026-07-28. A bare month name with a year, or a quarter number with a year, is blocked, because a claim that cannot be placed on a calendar cannot be audited later.
- No inversion rhetoric. The shape "not X, but Y" is banned. Lead affirmative. The inversion smuggles in a claim about what other people think and spends a sentence on it.
- No unanchored metaphor. This is the top tell of generated prose. If a reader cannot
point at the thing the word names, cut the word. The blocked vocabulary is not listed
here, because listing it would trip the checker on this document. It ships with the
pack as
banned-terms.txt, one rule per line in the formTIER|||regex|||hint. Read that file for the exact set, and prefercore,action, andrecommendationas replacements. - No consulting abstraction. Name the thing a reader can point at rather than a
container word for advice.
banned-terms.txtcarries the specific phrases. - One thought per sentence, and say each point once. A point restated in a later section reads as padding and hides whether the argument progressed.
- No self-reference. The document argues; it never narrates itself. Do not write about the document's own sections.
- No cryptic internal codes without expansion. If an identifier appears, expand it on first use.
- Never invent a file, path, URL, command, repository or ticket. A referenced file exists only if you checked it. This is the rule that the 23 earlier tutorials broke.
The multi-agent voice check is the shuriq-megaeval skill and it is mandatory before
anything ships externally. Passing a build's own checks has shipped weak writing twice.
6. The arguments a future tutorial should reinforce
Five claims run through the posts. A tutorial written for us should leave the reader holding at least one of them, argued with our evidence rather than asserted.
1. The graph is the artifact, and the document falls out of it. An intake produces a typed knowledge graph against a locked thirteen-class schema; the written summary is generated from the graph afterwards. A stakeholder list becomes a ledger once every entry carries a REA type. A canvas becomes queryable once every concept declares its BMC cell. The payoff is composition: agents working across an engagement read the same nodes and mean the same thing. Evidence: posts 01, 02, 03, 04.
2. Protection comes from the export boundary, and it is three mechanisms stacked. The
exchange format is too poor to carry typed edges, so a bundle is a projection by
construction. A deliberate exporter chooses which types ship and allow-lists the extension
keys. An authenticated endpoint sits behind every resource: pointer and returns 401
without credentials. The claim is testable because the gate is deployed. Evidence: posts
05 and 07.
3. A claim ships with the measurement that earned it, including the measurement that said no. Split the test data, look at the held-out set exactly once, and believe it when it contradicts the flattering number. Name the limit in the same paragraph as the result. A process that can only produce wins is decorating a decision already made. Evidence: posts 10, 11, 12, 13.
4. Machines gather and propose; people decide; the system records what it did. The overnight process reads what changed, proposes connections and writes a brief, and it changes nothing. A person spends five minutes choosing. Reading a note never fires anything; one evaluator on its own schedule fires rules, sends notifications only, and writes a hash-chained receipt whether or not anything fired. Anything irreversible stays parked as a proposal. Evidence: posts 08 and 15.
5. Run your method on your own work, because that is where it fails first. Engelbart's C activity is improving how you improve, and the test of a method is whether you use it on yourself. We found our nightly process was skipping the folder holding our own session notes. The point is the finding, published with the same weight as the wins. Evidence: posts 09 and 14, where the same idea arrives as a theorem: a regulator improves fastest by acquiring the variety it is missing, which is what gap analysis operationalizes.