docs: describe the product as the block protocol left it - #191
Open
mroops0111 wants to merge 6 commits into
Open
mroops0111 wants to merge 6 commits into
mroops0111 wants to merge 6 commits into
Conversation
The README last changed substantially in #105. Four merges since then moved what it describes: #164 gave a run's output a typed block protocol and put AG-UI on the wire, #179 wired the view axis end to end and added Documents, #178 named a Handoff, and #182 retired the Actions surface. Root README: Features gains typed blocks and AG-UI, Design gains a section for each of the three mechanisms, Architecture stops saying a run travels over SSE, and The Loop stops routing a reader through an Actions tab and two review surfaces that no longer exist. A Deployment section names the two variables whose absence costs an afternoon. Two shipped packages were missing from the table. Package READMEs: studio described seven surfaces and a run it reads over SSE, schema listed a module that does not exist and omitted eight that do, core still called a Clarification a ClarifyTicket, server claimed a per-run gateway reads the whole spec, which forRuns ended, ontology-ddd omitted scan, and source-loader-mcp never followed the shape the other packages use. The demo gif and the architecture diagram still show the old surfaces. Both are follow-ups. Closes #172. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The first pass fixed what was false. This fixes what it spends its space on. A worked example, which the README never had. `examples/conciergent` has been in the repository the whole time: 120 nodes and 159 edges derived from one real codebase with no intent documents, the reviewed clarifications and proposals alongside. Every claim above it was abstract, so a reader could only believe or not. One rule quoted in full, with the two source lines it was drawn from, is the shortest way to show what a model a PM can read actually looks like. Five features, not seven. Past five a reader stops ranking and starts skimming, and the most distinctive item gets the weight of the most generic. Blocks and AG-UI were one story told twice, so they are one bullet. Git-versioned history becomes a clause of the gate it belongs to. AG-UI moves to a badge. "We speak a standard protocol" is a credibility claim, and a badge is where a project makes one. It costs no space in a list whose job is to say why a reader should care. The Deployment section goes. It is operator documentation, and `packages/server/README.md` has held it since #117. Quick Start's job is to get something running, and twelve lines about containers and a bare 401 belong after that, not inside it. One sentence points at the two places that have it. Quick Start now says what is needed first. A reader could install, create a workspace, press run, and watch nothing happen, because a skill run is a `claude` subprocess and the README never mentioned it. Motivation gains the objection a reader actually has now. The two failure modes it argued against were the 2024 ones. "Why not point an agent at the repository" is the current one, and the answer is the thesis: the graph is not an index that makes retrieval faster, it is where judgement is put so it outlives the conversation. A Status section, because a public repository at 0.6.0 that never says where it stands reads as either abandoned or overclaiming. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The Features list had five bullets and did not contain the one the tagline sets up. "They drift apart every sprint, and the team ends up arguing about which one is right" is the problem statement, and nothing below it said Braid finds the disagreement or names who settles it. Named Disagreement is new. CoverageState keeps `sourceChanged` and `conflicted` apart on purpose, because reading a changed source again is mechanical and a model contradicting its own evidence is not. A DriftIssue carries at least two references for the same reason: the point is to name which two things disagree. A person fixes the source or records the difference as intended. This is the thesis, and it was the missing bullet. Evidence-Backed Claims said a node traces back to "the file or document it was drawn from", which is neither the vocabulary (a source) nor the useful part (the line range). It now says both, and says that a node missing evidence for a source role the ontology asks for names the gap. Typed Output led on not being a wall of text, which is the least of it. The point is that the model fills in a schema instead of choosing a presentation, so a surface lays the result out, and the audiences an ontology declares decide how much of a reference each reader sees. AG-UI stays, as the clause it should always have been. Docs That Never Drift promised something stronger than the code does. A document is not regenerated on a graph change, it is marked stale, and the honest claim is the one worth making: it is projected rather than maintained, and it cannot go quietly wrong. Continuous Reaction leaves the list. The reactor is `enabled: false` by default, so a headline feature overstated it. Architecture still covers it. The Architecture Model bullet gains the drift clause, so the new feature has somewhere to land. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Four corrections, all from review. The reactor should not have left the Features list. Default-off is a deployment choice, not a statement about whether the feature matters, and a graph that does not keep up with its sources is a snapshot of the day it was built. That is the whole premise, so it goes back as its own bullet. "Documents Regenerated, Not Maintained" named an implementation detail and sold nothing. The point is the axis: a view kind is a plugin, so a document is one kind of view rather than the only one there can be, and the next kind is a plugin rather than a fork. The bullet is now Any Kind of View. Typed Blocks and AG-UI were two sections for one mechanism, and they sat at the same heading level as Framework and Architecture, which organise the section rather than belonging to it. They merge into A Run's Output: a skill fills in a schema, the surface lays it out, the ontology's audiences decide how much each reader sees, and AG-UI carries the result. One purpose, one section. Reading the Graph is new, and covers what a reader asked for: Ask, views of whatever kind a generator declares, and the read-only MCP endpoint, which exchanges each caller's own token so a person's MCP client reads the graph as them. That endpoint has been serving since #148 and appeared nowhere but the server package. Retrieval Alone was unreadable. It now says the plain thing: an agent pointed at a repository answers the question and answers it again from scratch next time, because nothing a reviewer concluded is written down where the next question can reach it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The section duplicated the recording. The gif already shows this workspace, so a second telling in prose, with an 838KB graph render pushing Motivation and Design down the page, bought nothing the reader had not just watched. What was worth keeping is that the example is reachable, so one line sits under the gif and says what is in it. It names no scene in the recording, so re-recording against a different workspace does not make it wrong. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A caption competing with the recording above it is not a caption. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #172.
The README last changed substantially in #105. Four merges since then moved what it describes, and a reader arriving today is told to do things that no longer exist and told nothing about the mechanisms that now decide what Braid feels like to use.
Two commits. The first fixes what is false. The second fixes what the front door spends its space on.
What Was False
Two mechanisms get a section each, because they are what a reader can check.
Typed Blockssays a skill renders by calling a tool, that each call is a route on Braid's own spec and therefore an MCP tool with a schema, and that a block carries no layout.AG-UI on the Wiresays Studio consumes/aguiwith the protocol's ownHttpAgent, which is the only objective test that the endpoint is the protocol rather than something shaped like it.Documents as Projectionssays the deterministic half of a document never passes through model output, and that staleness falls out of the split rather than being tracked.The Loop described a product that changed underneath it. It routed a reader to an Actions tab that left the rail, and to a Proposal surface and a Clarification surface as two separate acts. It now routes through Build, one Inbox holding both kinds of card, and Documents.
Architecture no longer says a run travels over SSE, nor that the CLI reads one. The CLI has
init,serve,dev, andworkspace, and nothing that streams a run.A skill's
categorydecides what it is offered, which is the reader-facing half of the narrowed spec.ask,build, andgenerateeach get a line, and the frontmatter example declares one.@braidhq/source-loader-mcpand@braidhq/view-generator-docwere missing from the package table.Package READMEs
These drifted the same way and were not in the issue's scope, but they are what somebody reads after the root one.
exposes the whole spec.forRunsended that, and the gateway readsGET /openapi/runs/:category/openapi.json. Role gains the run wire and the render calls, andinfrastructure/agui/joins the tree.clarifymodule that does not exist and omittedblock,handoff,capability,coverage,reference,locale,embedding, andsource-sync.ClarifyTickethas beenClarificationfor a while, andViewServicewas missing from the services.defineViewGeneratorPluginsaid a view kind renders a snapshot into an artifact, which predatessubjectsandformat.scanwas missing from the skills, andrenderHintnow orders a document as well as colouring a canvas.Role/Structure/Boundaries/Dependenciesshape the other fifteen use. Restructured onto it with nothing removed.What It Spends Its Space On
The root README is the project's front door, not its manual, and a correct document can still be the wrong one.
A worked example, which it never had.
examples/conciergenthas been in the repository the whole time: 120 nodes and 159 edges derived from one real codebase with no intent documents, the reviewed clarifications and proposals alongside, and a rendered graph. Every claim above it was abstract, so a reader could only believe it or not. One rule is quoted in full with the two source lines it was drawn from, because that is the shortest way to show what a model a PM can read actually looks like.Five features, not seven. Past five a reader stops ranking and starts skimming, and the most distinctive item gets the weight of the most generic. Blocks and AG-UI were one story told twice, so they are one bullet. Git-versioned history becomes a clause of the gate it belongs to.
AG-UI moves to a badge. "We speak a standard protocol" is a credibility claim, and a badge is where a project makes one. It costs no space in a list whose job is to say why a reader should care, and the Design section still carries the detail.
The Deployment section goes. The issue asked for the full variable table in the root README, and that was the one recommendation not taken.
packages/server/README.mdhas held that table since #117, and a second copy would drift against the first. It is also operator documentation: Quick Start's job is to get something running, and twelve lines about containers and a bare401belong after that, not inside it. One sentence points atcompose.yamland the server package.Quick Start now says what is needed first. A reader could install, create a workspace, press run, and watch nothing happen, because a skill run is a
claudesubprocess and the README never mentioned it.Motivation gains the objection a reader actually has now. The two failure modes it argued against were the 2024 ones. "Why not point an agent at the repository" is the current one, and the answer is the thesis: the graph is not an index that makes retrieval faster, it is where judgement is put so it outlives the conversation that produced it.
A Status section, because a public repository at
0.6.0that never says where it stands reads as either abandoned or overclaiming.Not in This PR
architecture.penis editable JSON andarchitecture.pngis the rendered export, which needs the design app. Held for a separate pass rather than landing a half-updated pair.Verified
eslintover every changed file, which is whatlint-stagedruns on.md. Every relative link resolves,examples/conciergent/graph.pngis tracked so the image renders, and thepackages/server/README.md#deploymentanchor exists. No arrows or em-dashes in any file touched.🤖 Generated with Claude Code