Concept space reader

projects/dkr-agency/concept-space-2026-08-01-video-corpus/manus-pack/CONCEPT-SPACE-READER.md

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:

  1. Absence. Topics conspicuously missing given the stated goals, at coverage below five percent.
  2. Bridge. Connections between clusters that are never explicitly made.
  3. Decay. Topics that dropped off and stayed relevant, meaning more than fifty percent decline over four weeks or more.
  4. Contradiction. Unresolved tensions across conversations.
  5. 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.

  1. 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."
  2. 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.
  3. 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.
  4. 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."
  5. 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.

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.