<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: dotdot</title>
    <description>The latest articles on DEV Community by dotdot (@dotdotgod).</description>
    <link>https://dev.to/dotdotgod</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3692480%2Fe47154fc-d671-4a21-893d-ef3d6f8c6bad.jpg</url>
      <title>DEV Community: dotdot</title>
      <link>https://dev.to/dotdotgod</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dotdotgod"/>
    <language>en</language>
    <item>
      <title>What Should Developers Practice When AI Writes the Code?</title>
      <dc:creator>dotdot</dc:creator>
      <pubDate>Wed, 05 Aug 2026 20:39:50 +0000</pubDate>
      <link>https://dev.to/dotdotgod/what-should-developers-practice-when-ai-writes-the-code-46ni</link>
      <guid>https://dev.to/dotdotgod/what-should-developers-practice-when-ai-writes-the-code-46ni</guid>
      <description>&lt;p&gt;As AI generates code, the weight of the skills developers need is changing. Typing code quickly matters less, while understanding the work, evaluating generated code, and managing design and complexity matter more. &lt;strong&gt;Using AI well requires distinguishing the practice that can shrink from the practice that must deepen.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI lowers several early barriers on the path to expertise. As a result, what one person can build and attempt expands dramatically. Turning that change into real capability requires training thought and judgment alongside generation speed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Typing Speed Matters Less
&lt;/h2&gt;

&lt;p&gt;When developers entered code directly, the ability to translate an idea into exact syntax quickly had a major effect on productivity. Memorizing common syntax and APIs, becoming fluent with editors and shortcuts, and increasing typing speed reduced real working time.&lt;/p&gt;

&lt;p&gt;When AI writes the first draft, the time spent entering code falls sharply. A developer can describe a requirement in natural language or request a change against existing code, and AI can produce an implementation across several files. Typing remains useful, but it is moving away from the center of productivity.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;before: think → recall syntax and APIs → type → run
now:    think → describe the work → AI generates → review and revise → run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The mechanical cost of expressing code has fallen. Understanding what should be built and deciding whether the result is appropriate still take time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Work Before Coding Becomes Easier
&lt;/h2&gt;

&lt;p&gt;Before implementation begins, developers must understand unfamiliar code and requirements. They find related files, follow call relationships, identify the intent and constraints of the existing design, and estimate the reach of a change. Slow information retrieval can consume much of the time before implementation even starts.&lt;/p&gt;

&lt;p&gt;AI compresses this exploration. It can locate relevant parts of a codebase, summarize the roles of several files, explain unfamiliar libraries and concepts, and suggest possible change points. A developer can see the overall shape of a problem sooner.&lt;/p&gt;

&lt;p&gt;This resembles an extension of cognition. AI searches a wider field for signals and proposes relationships. The developer uses those candidates to distinguish meaningful differences and select the context needed for the task. Areas that were previously expensive to explore enter a reviewable range.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practice Evaluation More Deeply Than Generation
&lt;/h2&gt;

&lt;p&gt;As code generation accelerates, the ability to evaluate the generated result determines productivity and quality. A developer must be able to read the code, explain its behavior, and decide whether it satisfies the requirements, preserves existing contracts, and avoids defects and security risks.&lt;/p&gt;

&lt;p&gt;Evaluation goes beyond finding syntax errors. It asks whether the code understood the actual problem, whether responsibilities sit in the right place, whether tests verify important boundaries, and whether the result will remain maintainable.&lt;/p&gt;

&lt;p&gt;This practice becomes more important as generated code looks more polished and convincing. Readable expression and sound design are separate qualities. Code that runs and code that can be operated and maintained are also separate outcomes. Developers need the judgment to verify evidence instead of accepting surface-level completeness.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design and Complexity Management Become More Valuable
&lt;/h2&gt;

&lt;p&gt;AI can add code quickly. It can continue producing plausible implementations even when direction and boundaries are unclear, allowing complexity to grow just as quickly. As generation becomes cheaper, choosing what to build and where to stop becomes more important.&lt;/p&gt;

&lt;p&gt;Good design divides requirements into narrow, explicit responsibilities, limits how far a change can spread, and makes relationships explainable. Complexity management distinguishes present needs from possible future needs, finds where duplication and exceptions accumulate, and chooses what to delete or simplify.&lt;/p&gt;

&lt;p&gt;These abilities retain their value in AI-assisted work. Faster generation makes the consequences of design decisions appear sooner and at a larger scale. Good design amplifies AI productivity. Poor design amplifies the complexity AI can produce.&lt;/p&gt;

&lt;h2&gt;
  
  
  Distinguish Shrinking Practice from Deepening Practice
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Practice that matters less&lt;/th&gt;
&lt;th&gt;Practice that must deepen&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Typing code and boilerplate quickly&lt;/td&gt;
&lt;td&gt;Defining the purpose of the work and its success conditions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memorizing every syntax form and API&lt;/td&gt;
&lt;td&gt;Finding information and selecting relevant context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Decoding unfamiliar code entirely from scratch&lt;/td&gt;
&lt;td&gt;Verifying the explanations and relationships proposed by AI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Completing the first implementation draft by hand&lt;/td&gt;
&lt;td&gt;Evaluating the behavior and quality of generated code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performing repetitive transformations manually&lt;/td&gt;
&lt;td&gt;Managing design boundaries and complexity&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The skills on the left continue to provide useful foundations. Experience writing and debugging code helps build the judgment on the right. The important change is the purpose of practice and the proportion of time invested in each side.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lowering a Few Barriers Expands the Possibilities
&lt;/h2&gt;

&lt;p&gt;The path to expertise has included entry costs separate from depth of knowledge. Learning syntax, configuring a development environment, interpreting unfamiliar error messages, and writing repetitive code all slowed early attempts.&lt;/p&gt;

&lt;p&gt;AI lowers several of these barriers. It reduces the time from an idea to an executable draft and makes a first result possible in an unfamiliar domain. Developers can run more experiments, small teams can cover a wider product surface, and individuals can approach larger problems.&lt;/p&gt;

&lt;p&gt;Lower barriers broaden access to the starting line. Experts can apply their existing knowledge and judgment across a much wider field. This is why productivity and possibility grow together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Guard Against Laziness in Thought and Judgment
&lt;/h2&gt;

&lt;p&gt;Immediate answers and code make it easy to accept a result before understanding it. A developer can request implementation before clarifying the requirement, skim generated code, or stop evaluating once tests pass.&lt;/p&gt;

&lt;p&gt;When this habit repeats, output speed increases while the ability to structure a problem and detect errors weakens. Time saved through AI should be reinvested in better questions, design review, code reading, and result verification.&lt;/p&gt;

&lt;p&gt;Knowing the limits of AI means understanding which errors are possible, checking the evidence required for important decisions, and keeping human responsibility for the result. More capable tools also make skipped judgment more tempting, so deliberate review habits become essential.&lt;/p&gt;

&lt;h2&gt;
  
  
  Type Less and Judge More Deeply
&lt;/h2&gt;

&lt;p&gt;Developers in the AI era can move time from entering code to understanding problems, choosing designs, and reviewing results. Lower entry barriers let more people explore greater possibilities, while experts can apply their judgment across a wider range.&lt;/p&gt;

&lt;p&gt;The center of practice moves with that change. Typing and memorization receive less emphasis. Problem definition, context selection, code evaluation, design, and complexity management receive more. Understanding this shift lets developers capture AI productivity while keeping ownership of thought and judgment.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The more code AI writes, the more deeply we must practice deciding what to build, recognizing good code, and knowing what to trust.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>Using AI Well Means Extending Our Cognition</title>
      <dc:creator>dotdot</dc:creator>
      <pubDate>Wed, 05 Aug 2026 20:28:26 +0000</pubDate>
      <link>https://dev.to/dotdotgod/using-ai-well-means-extending-our-cognition-30f</link>
      <guid>https://dev.to/dotdotgod/using-ai-well-means-extending-our-cognition-30f</guid>
      <description>&lt;p&gt;Using AI well goes beyond delegating more work to a machine. It begins with using our ability to perceive information, preserve memory, discover relationships, and make judgments more deliberately. It then extends those abilities into a range that would be difficult to handle alone. &lt;strong&gt;The essence of using AI is applying and extending our cognition.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From this perspective, the central question is how we direct that expansion. We decide what we are trying to understand, which information should become memory, and which relationships matter. AI becomes a cognitive tool that explores and compares a wider field of information, then presents it back to us for judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cognition Selects Information and Builds Relationships
&lt;/h2&gt;

&lt;p&gt;Cognition receives external signals, distinguishes differences, preserves memory, and discovers relationships.&lt;sup id="fnref1"&gt;1&lt;/sup&gt; Thinking assigns importance and priority to perceived information, then arranges and combines it for the current purpose.&lt;sup id="fnref2"&gt;2&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;We assign different importance to different information. The goal we want to achieve, events that have already happened, and our interests select the memory we need. Two people can read the same document and notice different passages or connect different experiences because they are solving different problems.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;perceive a signal
  → distinguish meaningful differences
  → recall memory and relationships
  → combine them for the current goal
  → choose the next action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This flow remains when we use AI. Defining the question, selecting context, comparing results, and choosing the next action are cognitive activities performed by us. AI increases the range we can explore at each step and the amount of information we can compare at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Becomes an External Cognitive Tool
&lt;/h2&gt;

&lt;p&gt;Humans have long extended cognition through external tools. Writing preserves memory outside the body. Tables of contents and indexes retrieve that memory. Maps and diagrams place relationships in front of us that would be difficult to hold entirely in the mind. Calculators and computers handle repetitive calculation and transformation so we can focus on higher-level problems.&lt;/p&gt;

&lt;p&gt;AI belongs to this history of cognitive tools. Through natural language, it can search many documents for relevant information, compare different perspectives, and organize scattered clues into an explanation. Earlier tools accelerated specific cognitive operations. AI connects activities such as retrieval, summarization, comparison, and expression through a shared natural-language interface.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;memory in the mind
  + knowledge recorded outside it
  + candidates retrieved and reorganized by AI
  → a wider space for human reasoning and review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This expansion lets us examine broader evidence, compare more possibilities, and test our thinking in several forms. External tools support detailed memory while we focus on judgment and understanding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cognitive Extension Begins with an Environment We Can Perceive
&lt;/h2&gt;

&lt;p&gt;As AI handles a wider field of information, people must still be able to understand and manage that environment. Ambiguous names, mixed responsibilities, and hidden relationships produce unclear signals for both people and AI.&lt;/p&gt;

&lt;p&gt;An environment that is easy to perceive makes the role of information visible. Names and locations reveal what information concerns. Headings and indexes show where it belongs in the whole. Links and explicit relationships connect information that should be read together. Structures that distinguish current decisions from historical records help assign priority to memory.&lt;/p&gt;

&lt;p&gt;These structures are the language we already use to find, explain, and review information. AI uses the same human-readable structure as cues for exploring a wider range.&lt;/p&gt;

&lt;h2&gt;
  
  
  People Set Goals and Expand the Search Together with AI
&lt;/h2&gt;

&lt;p&gt;Assigning importance to perceived information requires a criterion. I believe that criterion begins with the subject—&lt;code&gt;we&lt;/code&gt;—and the desires that subject holds.&lt;sup id="fnref2"&gt;2&lt;/sup&gt; What we want to create, which problem we want to solve, and which outcomes we can accept are values that guide the use of a tool.&lt;/p&gt;

&lt;p&gt;People set goals and evaluate results. AI searches broadly for information connected to those goals, proposes relationships that are easy to miss, and quickly unfolds possible explanations and options. This collaboration applies human cognition to a broader field of information and possibility.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;person: set purpose → select context → evaluate results → make accountable judgments
AI:     expand range → retrieve candidates → propose relationships → support expression and comparison
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Effective use keeps these roles connected. We compare AI output with our memory and experience, supply missing context, and refine the question. Our own understanding changes through that repeated exchange.&lt;/p&gt;

&lt;h2&gt;
  
  
  Extension Requires Better Questions and Review
&lt;/h2&gt;

&lt;p&gt;The reasoning space opened by AI contains useful and inaccurate candidates together. Better judgment comes from checking the evidence behind a result, looking for missing perspectives and incorrect relationships, and applying accountable criteria to important decisions.&lt;/p&gt;

&lt;p&gt;AI literacy therefore includes several connected abilities: structuring a problem, selecting relevant context, verifying results, and integrating new information into one's own understanding. Prompt writing is one part of that broader practice.&lt;/p&gt;

&lt;p&gt;As AI develops, our role becomes clearer. We establish purpose and criteria, select meaningful signals from the range expanded by the tool, and connect the result to the next action. AI becomes an interface that reflects and extends our cognitive activity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Applying Cognition to a Wider World
&lt;/h2&gt;

&lt;p&gt;Using AI well begins with using our own cognition well. The ability to clarify what we want to know, manage memory, inspect relationships, and judge results determines the direction of AI use.&lt;/p&gt;

&lt;p&gt;From that foundation, AI explores more signals than we can sense or remember at once, compares more relationships, and expresses more possibilities. This extension becomes a practical ability when we preserve structures we can understand and criteria we can apply.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The essence of using AI is applying our cognition to a wider field of information and possibility.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;In this article, cognition broadly means finding differences, patterns, and relationships in signals. AI extends cognitive function into the range of finding and comparing patterns in anything we can define as a signal, including signals that living beings cannot sense.&amp;nbsp;↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;In this article, thinking is the process of deciding the importance and relationships of perceived information for a current purpose. I believe those criteria begin with the position and desires of the subject—&lt;code&gt;we&lt;/code&gt;.&amp;nbsp;↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>What If a Project Had Psychometry?</title>
      <dc:creator>dotdot</dc:creator>
      <pubDate>Wed, 05 Aug 2026 20:16:21 +0000</pubDate>
      <link>https://dev.to/dotdotgod/what-if-a-project-had-psychometry-58bo</link>
      <guid>https://dev.to/dotdotgod/what-if-a-project-had-psychometry-58bo</guid>
      <description>&lt;p&gt;After changing code, the harder question is often not what changed, but what else should be reviewed with it. A project must preserve readable traces of its work so that specifications, architectural constraints, and tests connected to a changed file are not overlooked. Dotdotgod treats &lt;code&gt;graph impact&lt;/code&gt;, which reads those traces backward from changed files, as a form of &lt;strong&gt;project psychometry&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explicit project memory maintained by people creates two routes: one from a task goal to relevant documents at the start of work, and another from changed files back to the review scope after the work is done.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Memory Has Two Retrieval Directions
&lt;/h2&gt;

&lt;p&gt;Living beings use present signals to recall past experience and choose what to do next. Could a project also retrieve the memory it needs from a current goal or an event that has already happened? This article uses cognition as an explanatory analogy, not as a rigorous model from cognitive science.&lt;/p&gt;

&lt;p&gt;At the start of a task, the desired outcome is the retrieval seed. We interpret the request and find the relevant rules, specifications, architecture, and past decisions. After the task, the changed files become the seed. We inspect the result and find the documents, tests, and verification commands that should be reviewed alongside it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Task start:  goal and request → required project memory
Task finish: changed files    → documents, tests, and source to review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dotdotgod's &lt;code&gt;query&lt;/code&gt; supports the first route by moving from a natural-language question to semantically related documents. &lt;code&gt;graph impact&lt;/code&gt; creates the second route from changed files and maintained relationships. Both narrow the maintained sources that should be read now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maintained Traces Are the Source of Memory
&lt;/h2&gt;

&lt;p&gt;In fiction, psychometry reads memories from traces left on an object. A project needs readable traces before it can offer anything similar. Dotdotgod keeps project memory in documents that people can read and edit.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Specifications describe the behavior the product currently guarantees.&lt;/li&gt;
&lt;li&gt;Architecture documents preserve design rationale and constraints.&lt;/li&gt;
&lt;li&gt;Test documents explain what is verified and how.&lt;/li&gt;
&lt;li&gt;README indexes and Markdown links create routes to the next document.&lt;/li&gt;
&lt;li&gt;Traceability explicitly connects specifications, implementation, tests, and verification commands.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Graph indexes and vector caches are derived retrieval data built over those sources. Maintained project memory remains in documents when a cache is deleted, and graph and vector data can be rebuilt from documents and repository structure. Search results provide addresses to source documents, while graph scores indicate review priority. Actual behavior is judged by examining the relevant sources, code, and tests together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Graph Impact Reads Traces in Reverse
&lt;/h2&gt;

&lt;p&gt;When a document points to implementation and tests, a changed file can follow those relationships in reverse.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotdotgod graph impact &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--changed&lt;/span&gt; packages/cli/src/commands/query.mjs &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--yml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repeat &lt;code&gt;--changed&lt;/code&gt; when several files make up one change. Each changed file becomes a graph seed, and specifications or tests shared by several seeds are merged into one overall review ranking.&lt;/p&gt;

&lt;p&gt;The graph uses relationships that people maintain or that the repository can derive deterministically: structured traceability, Markdown links, README routes, and package and test structure. The default ranking combines Personalized PageRank seeded by changed files with traceability, verification signals, memory-area policy, and direct proximity. The &lt;code&gt;semantic_similarity&lt;/code&gt; relationship is also computed deterministically from paths, filenames, headings, and package names. &lt;code&gt;query&lt;/code&gt; uses a separate natural-language embedding search.&lt;/p&gt;

&lt;p&gt;The following abbreviated example shows the essential output shape. Actual paths, scores, and reasons depend on repository state and configuration.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;impact&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;changed_files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;packages/cli/src/commands/query.mjs&lt;/span&gt;
  &lt;span class="na"&gt;groups&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;docs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docs/spec/cli/QUERY.md&lt;/span&gt;
          &lt;span class="na"&gt;score&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;65.4&lt;/span&gt;
          &lt;span class="na"&gt;reasons&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;implemented_by&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;routes_to&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;tests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;packages/cli/test/e2e.test.mjs&lt;/span&gt;
          &lt;span class="na"&gt;score&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;58.1&lt;/span&gt;
          &lt;span class="na"&gt;reasons&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;verified_by&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;recommended_actions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;review_related_docs&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;run_related_tests&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;run_dotdotgod_validate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;score&lt;/code&gt; indicates the value of reviewing a candidate early. &lt;code&gt;reasons&lt;/code&gt; exposes why a candidate appears, such as structured traceability or a direct relationship. Grouping results into documents, tests, source files, and commands gives an agent a bounded set of next actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Limits of the Psychometry Analogy
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;graph impact&lt;/code&gt; returns a bounded list of top review candidates. Related items may remain outside the result, and whether a high-scoring file needs modification is decided by reading its connected sources and tests.&lt;/p&gt;

&lt;p&gt;Result quality depends on the quality of the traces a project preserves. Stale README files, missing implementation relationships, and large files responsible for many behaviors make the review scope broader and less specific. Clear document roles and traceability and test relationships that describe the current state produce more useful candidates from changed files.&lt;/p&gt;

&lt;p&gt;Use the &lt;code&gt;graph impact&lt;/code&gt; result as the next review list. Make the final decision after checking the connected sources and tests.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;change files
  → graph impact
  → review related sources and tests
  → update the necessary code and documents
  → run tests and dotdotgod validate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  People Maintain Project Memory
&lt;/h2&gt;

&lt;p&gt;Names, paths, document roles, and relationships that are easy for people to understand also become cognitive cues for AI. At the start of work, the route runs from a goal to the required sources. At the end, it runs from changed files back to the sources that should be reviewed.&lt;/p&gt;

&lt;p&gt;Both directions begin with the same maintained sources. When people update documents and traceability to match the current state, the agent's retrieval and change-review routes change with them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Project psychometry is the ability to read the next review route that people might otherwise miss from the memory they have maintained.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/dotdotgod/ai-agent-memory-starts-with-a-documentation-table-of-contents-4h3"&gt;Project Structure Becomes Cognitive Cues for AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/dotdotgod/how-dotdotgod-keeps-a-documentation-table-of-contents-current-l0i"&gt;A Documentation Directory Is an AI Agent's Table of Contents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/dotdotgod/the-role-of-vector-search-in-docs-first-project-memory-p2p"&gt;The Role of Vector Search in Docs-First Project Memory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/dotdotgod/how-dotdotgod-load-turns-a-documentation-table-of-contents-into-a-reading-route-3bi7"&gt;How Graph Impact Finds What to Review Alongside a Changed File&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/dotdotgod/how-dotdotgod-query-finds-relevant-documents-from-a-natural-language-question-43do"&gt;How Dotdotgod Query Finds Related Documents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/dotdotgod/how-graph-impact-finds-what-to-review-alongside-a-changed-file-2kke"&gt;How Graph Impact Finds What to Review Alongside a Changed File&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dotdotgod/dotdotgod-kit/blob/main/docs/spec/cli/GRAPH_IMPACT.md" rel="noopener noreferrer"&gt;Graph impact command specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dotdotgod/dotdotgod-kit/blob/main/docs/test/GRAPH_IMPACT_QUALITY.md" rel="noopener noreferrer"&gt;Graph impact quality tests&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>documentation</category>
      <category>agents</category>
      <category>dotdotgodkit</category>
    </item>
    <item>
      <title>How Graph Impact Finds What to Review Alongside a Changed File</title>
      <dc:creator>dotdot</dc:creator>
      <pubDate>Sun, 02 Aug 2026 06:33:56 +0000</pubDate>
      <link>https://dev.to/dotdotgod/how-graph-impact-finds-what-to-review-alongside-a-changed-file-2kke</link>
      <guid>https://dev.to/dotdotgod/how-graph-impact-finds-what-to-review-alongside-a-changed-file-2kke</guid>
      <description>&lt;p&gt;Semantic search can find documents related to a natural-language question. After an implementation change, the central question becomes which specifications, architecture notes, tests, and verification commands should be reviewed alongside the changed file. &lt;strong&gt;&lt;code&gt;dotdotgod graph impact&lt;/code&gt; starts from changed files, produces a bounded review list with explicit reasons, and uses the documentation table of contents as a reverse map from a change back to its maintained sources.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A filename search alone has difficulty answering this question. Code and documentation may use different names, and one change may connect to several packages and verification paths.&lt;/p&gt;

&lt;p&gt;The essential foundation is project memory that people can review and maintain directly. Specifications, architecture notes, test documents, README indexes, and traceability relationships remain in the repository, so people and agents can read and update the same evidence. Graph impact calculates the next review route from these maintainable sources.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Changed Files as Graph Seeds
&lt;/h2&gt;

&lt;p&gt;For a single changed file, use the following command to find related items:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotdotgod graph impact &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--changed&lt;/span&gt; packages/cli/src/commands/query.mjs &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--yml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repeat &lt;code&gt;--changed&lt;/code&gt; when several files belong to the same change:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotdotgod graph impact &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--changed&lt;/span&gt; packages/cli/src/commands/query.mjs &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--changed&lt;/span&gt; packages/cli/src/query/chunks.mjs &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--yml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command deduplicates paths in first-seen order and accepts up to 20 unique, equally weighted changed-file seeds. Changed files appear first, while items connected to several seeds are merged into one ranking. This finds specifications and tests that matter across the whole change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Graph Relationships Come from Maintained Project Evidence
&lt;/h2&gt;

&lt;p&gt;The project graph is built from relationships that people maintain or that the repository structure exposes deterministically. &lt;code&gt;query&lt;/code&gt; handles repository-wide semantic similarity search, while graph impact uses connections whose review rationale can be traced. The graph is a derived map of this evidence, and the team directly manages relationship accuracy by reviewing the Markdown sources and traceability information.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Structured traceability&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;implemented_by&lt;/code&gt;, &lt;code&gt;verified_by&lt;/code&gt;, &lt;code&gt;related_doc&lt;/code&gt;, and verification commands&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Documentation relationships&lt;/td&gt;
&lt;td&gt;Markdown links, headings, and README navigation routes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Project structure&lt;/td&gt;
&lt;td&gt;Relationships among packages, source, tests, configuration, and resources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory policy&lt;/td&gt;
&lt;td&gt;Roles and priorities for current specifications, architecture, tests, and archives&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deterministic routing&lt;/td&gt;
&lt;td&gt;Matches among paths, filenames, headings, README files, memory areas, and package names&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Human-authored traceability has higher confidence than routing hints inferred from paths or names. When explicit connections are sparse, README files and stable project terms provide secondary navigation routes.&lt;/p&gt;

&lt;p&gt;Graph impact quality therefore depends on both the graph algorithm and the condition of the maintained project evidence. Results become more specific when specifications and tests point to the real implementation, README files route to current documents, and files have narrow responsibilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rank by Review Value
&lt;/h2&gt;

&lt;p&gt;Returning every related node would turn impact analysis into another repository-wide search. The default &lt;code&gt;balanced&lt;/code&gt; policy combines Personalized PageRank seeded by changed files with project review policy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;changed files
  → bound the candidate scope
  → multi-seed Personalized PageRank
  → apply traceability and verification policy
  → build a bounded result ranked by review value
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The base score begins with PPR calculated from the changed files. Explicit traceability, test and verification signals, and direct proximity through Markdown links and README files add weight. Deterministic routing hints act as secondary signals when paths, headings, memory areas, or package names match.&lt;/p&gt;

&lt;p&gt;Memory policy applies the current area's priority and its &lt;code&gt;fresh&lt;/code&gt; or &lt;code&gt;stale&lt;/code&gt; classification, then penalizes archive bodies. The first screen favors traceability, tests, and direct proximity over lower-confidence routing-only items. When enough actionable files exist, low-actionability metadata such as dependencies is kept out of the result.&lt;/p&gt;

&lt;p&gt;The default policy favors current specifications and verification routes over archive bodies. Here, &lt;code&gt;fresh&lt;/code&gt; and &lt;code&gt;stale&lt;/code&gt; are memory-area classifications unrelated to file modification time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Result Is a Review List with Reasons
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;--yml&lt;/code&gt; returns a bounded structure that an agent can read directly. The following example illustrates the output shape; actual paths, scores, and reasons depend on repository state and configuration.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;impact&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;ok&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;changed_files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;packages/cli/src/commands/query.mjs&lt;/span&gt;
  &lt;span class="na"&gt;groups&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;docs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docs/spec/cli/QUERY.md&lt;/span&gt;
          &lt;span class="na"&gt;score&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;65.4&lt;/span&gt;
          &lt;span class="na"&gt;reasons&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;implemented_by&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;routes_to&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;tests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;packages/cli/test/e2e.test.mjs&lt;/span&gt;
          &lt;span class="na"&gt;score&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;58.1&lt;/span&gt;
          &lt;span class="na"&gt;reasons&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;verified_by&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;recommended_actions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;review_related_docs&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;run_related_tests&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;run_dotdotgod_validate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result groups documents, behavior contracts, tests, files, commands, and package resources. &lt;code&gt;score&lt;/code&gt; and &lt;code&gt;reasons&lt;/code&gt; explain each inclusion, while omitted-item counts indicate candidates beyond the bounded output.&lt;/p&gt;

&lt;p&gt;The default output or &lt;code&gt;--compact&lt;/code&gt; works well for quick human reading. Agent workflows can use &lt;code&gt;--yml&lt;/code&gt;, while &lt;code&gt;--json&lt;/code&gt; provides detailed scores and automation diagnostics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Graph Impact and Vector Search Have Different Roles
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;dotdotgod query&lt;/code&gt; finds documents semantically close to a natural-language question. Graph impact finds review items connected to changed files through maintained relationships.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Seed&lt;/th&gt;
&lt;th&gt;Primary signals&lt;/th&gt;
&lt;th&gt;Meaning of the result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;query&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Natural-language question&lt;/td&gt;
&lt;td&gt;Multilingual embeddings&lt;/td&gt;
&lt;td&gt;Documents semantically close to the question&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;graph impact&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Changed files&lt;/td&gt;
&lt;td&gt;Traceability, links, PPR, and policy&lt;/td&gt;
&lt;td&gt;Items to review first after a change&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The default graph impact ranking does not use embedding similarity. Lexical routing through paths, headings, README files, memory areas, and package metadata is calculated deterministically. Embedding search and the graph index have separate caches and failure boundaries.&lt;/p&gt;

&lt;p&gt;This separation keeps results explainable. Each result can be identified as coming from semantic similarity or from implementation and test relationships, README routes, and other maintained evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  A High Score Is a Review-Priority Signal
&lt;/h2&gt;

&lt;p&gt;A higher impact score indicates greater value in reviewing an item early. The score does not determine whether a file is broken, and affected items may remain outside the bounded result.&lt;/p&gt;

&lt;p&gt;Sparse traceability or a large file that owns several behaviors produces broader results. After graph impact identifies a route, read the specifications, update implementation and tests, run regressions, and confirm that links and traceability still point to the current state.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;change a file
  → run graph impact
  → review related specifications and tests
  → update the necessary code and documentation
  → run tests and dotdotgod validate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The graph cache is also derived data. Graph commands refresh it from repository files when it is missing or stale, while the source specifications and code remain the basis for judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure Impact Quality Against Expected Results
&lt;/h2&gt;

&lt;p&gt;Explaining why a score was calculated and placing genuinely useful files near the top each require verification. dotdotgod evaluates graph impact ranking against checked-in expected results for representative cases.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;What it measures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Precision@5/10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The share of top results that must or should be reviewed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Recall@10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The share of must-review items found in the top ten&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MRR&lt;/td&gt;
&lt;td&gt;How early the first must-review item appears&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;nDCG@10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ranking quality across required and recommended relevance grades&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The evaluation script compares current results with a baseline and returns a verdict. As real cases accumulate, these measurements provide evidence for choosing project-appropriate CI thresholds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Change Review Starts from a Reverse Table of Contents
&lt;/h2&gt;

&lt;p&gt;A documentation table of contents is a forward map from a product question to relevant specifications and tests. Graph impact is a reverse map from code and documentation changes back to the sections that should be reviewed with them.&lt;/p&gt;

&lt;p&gt;Connecting both directions lets specifications, implementation, and tests continue to describe the same project state after a change. The essential property is that although the navigation map is calculated automatically, its evidence remains in documents and relationships that people can read and correct. When the team maintains those sources, the agent's review routes update with them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Graph impact finds review routes that people may otherwise miss within human-maintained project memory. Final impact decisions come from reviewing the connected sources and tests together.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="//../document-directory-as-table-of-contents/ENGLISH.md"&gt;AI Agent Memory Starts with a Documentation Table of Contents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//../how-dotdotgod-maintains-document-toc/ENGLISH.md"&gt;How dotdotgod Maintains a Documentation Table of Contents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//../docs-first-project-memory/ENGLISH.md"&gt;Why Project Memory Should Stay Docs-First Even with Vector Search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//../how-query-finds-related-docs/ENGLISH.md"&gt;How dotdotgod Query Finds Relevant Documents from a Natural-Language Question&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//../../spec/cli/GRAPH_IMPACT.md"&gt;Graph Impact Command Specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//../../spec/IMPACT_RANKING_CONFIG.md"&gt;Impact Ranking Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//../../test/GRAPH_IMPACT_QUALITY.md"&gt;Graph Impact Quality Tests&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>dotdotgodkit</category>
      <category>documentation</category>
      <category>agents</category>
    </item>
    <item>
      <title>How dotdotgod Query Finds Relevant Documents from a Natural-Language Question</title>
      <dc:creator>dotdot</dc:creator>
      <pubDate>Sun, 02 Aug 2026 05:29:43 +0000</pubDate>
      <link>https://dev.to/dotdotgod/how-dotdotgod-query-finds-relevant-documents-from-a-natural-language-question-43do</link>
      <guid>https://dev.to/dotdotgod/how-dotdotgod-query-finds-relevant-documents-from-a-natural-language-question-43do</guid>
      <description>&lt;p&gt;A documentation table of contents is the fastest retrieval method when an agent knows the relevant role and path. A user's question may use different language from a document's filename, and the question and document may even be written in different human languages. &lt;strong&gt;&lt;code&gt;dotdotgod query&lt;/code&gt; searches locally for document passages that are semantically close to a natural-language question and routes the agent to the maintained sources worth reading.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Documents remain the source of project memory. Embeddings and search results are derived retrieval data that connect a question to those sources.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start from Meaning When the Path Is Unknown
&lt;/h2&gt;

&lt;p&gt;Consider this question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why does Load exclude old plans from its default context?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The relevant explanation may live in &lt;code&gt;LOAD_PROJECT.md&lt;/code&gt;, &lt;code&gt;MEMORY_AREA_CONFIG.md&lt;/code&gt;, or a document about context curation. A filename search may not connect “old plans” from the question with terms such as &lt;code&gt;archive&lt;/code&gt;, &lt;code&gt;local memory&lt;/code&gt;, or &lt;code&gt;stale&lt;/code&gt; in the documents.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;query&lt;/code&gt; accepts a free-form question and finds semantically related Markdown passages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotdotgod query &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"Why does Load exclude old plans from its default context?"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--limit&lt;/span&gt; 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Multiple arguments after &lt;code&gt;&amp;lt;root&amp;gt;&lt;/code&gt; are joined into one query. &lt;code&gt;--limit&lt;/code&gt; accepts values from 1 through 100 and defaults to 30. The limit applies to distinct Markdown files rather than passage count.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the Search Corpus within Docs-First Boundaries
&lt;/h2&gt;

&lt;p&gt;Query searches Markdown documents under &lt;code&gt;docs/&lt;/code&gt; and applies the &lt;code&gt;load.documentationSummary.exclude&lt;/code&gt; policy to define its scope.&lt;/p&gt;

&lt;p&gt;The default corpus excludes these bodies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/plan/
docs/archive/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Active plans and historical records are read through README indexes and explicit paths when needed. Hidden paths, paths that appear to contain secrets, and configured skip directories are also excluded from embedding.&lt;/p&gt;

&lt;p&gt;This scope preserves the different roles of current shared documentation and local working records during retrieval.&lt;/p&gt;

&lt;h2&gt;
  
  
  Split Markdown along Its Heading Hierarchy
&lt;/h2&gt;

&lt;p&gt;A useful search unit needs both the meaning of one section and enough context to interpret it. dotdotgod splits Markdown along its heading hierarchy, limits each body fragment to 1,600 characters, and attaches path and heading information.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/spec/LOAD_PROJECT.md
└── Focused Query
    └── query searches shared documentation ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each passage contains its repository-relative path, heading hierarchy from the top level through the current section, and a bounded body fragment. The path and headings provide an address for interpreting a result, while the body provides meaning to compare with the question.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run the Multilingual E5 Model Locally
&lt;/h2&gt;

&lt;p&gt;Query currently supports one model: &lt;code&gt;Xenova/multilingual-e5-small&lt;/code&gt;. It runs locally through &lt;code&gt;@huggingface/transformers&lt;/code&gt;, so document bodies are not sent to a remote embedding API.&lt;/p&gt;

&lt;p&gt;Following the E5 input format, Query adds a different prefix to each kind of input.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;query: Why does Load exclude old plans from its default context?
passage: path: docs/spec/LOAD_PROJECT.md ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The query receives the &lt;code&gt;query:&lt;/code&gt; prefix and document passages receive &lt;code&gt;passage:&lt;/code&gt;. The model converts both into normalized 384-dimensional float32 vectors.&lt;/p&gt;

&lt;p&gt;If the model files are absent, the runtime may download them to its user-level cache on first use. Remote provider selection and alternative embedding-model profiles are not currently supported.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compare Semantic Distance across Every Passage
&lt;/h2&gt;

&lt;p&gt;Query directly compares how closely the question matches every document passage in meaning (cosine similarity). For the current small local corpus, it does not need a separate index that quickly narrows the search to likely nearby candidates (approximate nearest neighbor).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;convert the question into semantic coordinates
  → compare semantic distance with every passage
  → add a small bonus for matching words in titles and paths
  → sort consistently by score and path
  → select the highest result for each Markdown path
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a word from the question appears directly in a result path or title, Query adds a small bonus (lexical boost). Semantic proximity remains the primary signal, while explicit filename and heading matches also contribute.&lt;/p&gt;

&lt;p&gt;After sorting, Query deduplicates results by Markdown path. Even when several passages from one document score highly, only the highest passage represents that file. This keeps one or two long documents from filling the result set and gives the agent a broader set of documents to review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reuse Embeddings for Unchanged Passages
&lt;/h2&gt;

&lt;p&gt;Derived vector data lives in a repository-specific cache excluded from Git.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.dotdotgod/vectors/
├── manifest.json
├── chunks.jsonl
└── embeddings.f32
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;manifest.json&lt;/code&gt; records the schema, model, dimensions, exclusion policy, and refresh information. &lt;code&gt;chunks.jsonl&lt;/code&gt; stores passage and path metadata, while &lt;code&gt;embeddings.f32&lt;/code&gt; stores float32 vectors.&lt;/p&gt;

&lt;p&gt;When a passage fingerprint remains the same, Query reuses the existing vector. It embeds only new or changed passages and removes deleted passages when rewriting the cache.&lt;/p&gt;

&lt;p&gt;If the cache is damaged, incomplete, or incompatible with the current schema, model, or dimensions, Query rebuilds it. Each artifact is written to a temporary file and replaced with an atomic rename to reduce the risk of partial writes.&lt;/p&gt;

&lt;p&gt;The cache is derived data that can be rebuilt from maintained documents at any time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Return a Bounded Set of Candidates for Source Reading
&lt;/h2&gt;

&lt;p&gt;The default human-readable output stays concise. With &lt;code&gt;--json&lt;/code&gt;, callers can inspect structured query, model, dimension, index, and result data.&lt;/p&gt;

&lt;p&gt;Each result provides a chunk ID, repository-relative Markdown path, heading hierarchy, and bounded body excerpt. The final score includes the small bonus for matching expressions, and the original semantic-similarity score remains available.&lt;/p&gt;

&lt;p&gt;A high score identifies a maintained-source candidate whose meaning is close to the question. A product contract under &lt;code&gt;docs/spec/&lt;/code&gt; and an explanatory document under &lt;code&gt;docs/concept/&lt;/code&gt; may use the same words while serving different roles. The agent checks the result path and heading to identify that role, then reads the maintained source.&lt;/p&gt;

&lt;h2&gt;
  
  
  Query and Graph Impact Answer Different Questions
&lt;/h2&gt;

&lt;p&gt;Both features find related documents, but they begin from different inputs and use different signals.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Starting point&lt;/th&gt;
&lt;th&gt;Primary signals&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;query&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Natural-language question&lt;/td&gt;
&lt;td&gt;Multilingual semantic retrieval with a small bonus for matching expressions&lt;/td&gt;
&lt;td&gt;Find documents close in meaning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;graph impact&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Changed file&lt;/td&gt;
&lt;td&gt;Traceability relationships, links, PPR, and project policy&lt;/td&gt;
&lt;td&gt;Find items to review together&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Query uses its own local vector cache. Graph impact's default ranking uses deterministic relationships and word-match routing (lexical routing); embedding similarity is not part of its default route.&lt;/p&gt;

&lt;p&gt;Load combines Query results with the documentation map when a natural-language focus is present. After code or documentation changes, graph impact identifies the next review route.&lt;/p&gt;

&lt;h2&gt;
  
  
  Semantic Retrieval and the Documentation Map Form One Reading Route
&lt;/h2&gt;

&lt;p&gt;Semantic retrieval finds candidates when the path is unknown. Paths and README files then explain the role of each candidate document.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;question
  → find candidate paths with query
  → identify their roles through README files and memory areas
  → read the necessary sections from maintained sources
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Vector search finds the source address an agent should read even when the question and the document use different expressions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/dotdotgod/the-role-of-vector-search-in-docs-first-project-memory-p2p"&gt;The Role of Vector Search in Docs-First Project Memory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/dotdotgod/how-dotdotgod-keeps-a-documentation-table-of-contents-current-l0i"&gt;How dotdotgod Load Turns a Documentation Table of Contents into a Reading Route&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dotdotgod/dotdotgod-kit/blob/main/docs/spec/cli/QUERY.md" rel="noopener noreferrer"&gt;Query command specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dotdotgod/dotdotgod-kit/blob/main/docs/spec/LOAD_PROJECT.md" rel="noopener noreferrer"&gt;Load Project specification&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>dotdotgodkit</category>
      <category>agents</category>
      <category>documentation</category>
    </item>
    <item>
      <title>How dotdotgod Load Turns a Documentation Table of Contents into a Reading Route</title>
      <dc:creator>dotdot</dc:creator>
      <pubDate>Sun, 02 Aug 2026 03:59:30 +0000</pubDate>
      <link>https://dev.to/dotdotgod/how-dotdotgod-load-turns-a-documentation-table-of-contents-into-a-reading-route-3bi7</link>
      <guid>https://dev.to/dotdotgod/how-dotdotgod-load-turns-a-documentation-table-of-contents-into-a-reading-route-3bi7</guid>
      <description>&lt;p&gt;Docs-first project memory keeps its source material in documents that people can review. An agent still needs to select the part relevant to the current task. &lt;strong&gt;The dotdotgod Load workflow creates a short reading route through the maintained documentation table of contents for the current request.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The previous article separated maintained documents from derived retrieval data. This article follows the sequence Load uses to narrow the reading scope when an agent starts a session or refreshes its context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check the Project Entry Points
&lt;/h2&gt;

&lt;p&gt;Load begins with the primary entry points for project memory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AGENTS.md
the current agent entry point
README.md
docs/README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; provides working rules shared across agents. The repository README explains the project's purpose and usage, while &lt;code&gt;docs/README.md&lt;/code&gt; is the top-level index for specs, architecture, tests, and local-memory areas.&lt;/p&gt;

&lt;p&gt;Load also identifies the repository root and existing user changes. When the session already contains clear baseline information, it reuses that context and preserves the user's worktree changes.&lt;/p&gt;

&lt;p&gt;These entry points establish a stable address for the next stage of retrieval.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start from the Table of Contents
&lt;/h2&gt;

&lt;p&gt;Running Load without arguments displays shared Markdown paths below &lt;code&gt;docs/&lt;/code&gt; as a prefix-compressed tree.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/load
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The documentation map counts &lt;code&gt;docs/&lt;/code&gt; as depth 1 and expands through directory depth 5. A deeper subtree is summarized with exact recursive directory and Markdown-file counts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/
├── spec/
│   ├── README.md
│   └── cli/
│       ├── README.md
│       └── QUERY.md
├── arch/
│   └── README.md
└── test/
    └── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The directory structure lets an agent choose a retrieval area, and README indexes guide it to the next document. Paths expose document roles early enough to distinguish relevant areas before opening their bodies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Narrow the Reading Route with a Question
&lt;/h2&gt;

&lt;p&gt;Free-form Load arguments become one natural-language query.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/load command routing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When local query is available, Load runs the equivalent of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotdotgod query &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;"command routing"&lt;/span&gt; &lt;span class="nt"&gt;--limit&lt;/span&gt; 30 &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Focused Load reduces the documentation map to depth 3 and presents at most 30 semantically related Markdown files. When several passages from one file match, the highest-ranked passage represents that file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;natural-language question
  → semantically related document paths
  → path role and README context
  → relevant sections from maintained sources
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Query results provide routes to source documents likely to matter for the question. A follow-up article explains how the embedding model, passage splitting, and vector cache produce those routes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Current Work and History When Needed
&lt;/h2&gt;

&lt;p&gt;The shared documentation map and default query corpus exclude these subtrees:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/plan/
docs/archive/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This default scope prioritizes current shared documentation. When an active plan matters, Load inspects the entries under &lt;code&gt;docs/plan/&lt;/code&gt; and reads the relevant plan. When a past decision matters, it uses &lt;code&gt;docs/archive/README.md&lt;/code&gt; as the history map and follows it to the relevant archive body. Current work and historical records enter the context through separate reading routes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the Documentation Route Available When Search Fails
&lt;/h2&gt;

&lt;p&gt;Load exposes this optional CLI discovery hint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Help: dotdotgod --help
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The hint is available independently of CLI execution status. In environments without the CLI or shell access, README indexes and the documentation map continue the retrieval route.&lt;/p&gt;

&lt;p&gt;If model download, inference, or cache access fails during a focused query, Load returns to the base documentation table of contents. Source files, maintained documents, and project configuration remain intact. Query may refresh the ignored &lt;code&gt;.dotdotgod/vectors/&lt;/code&gt; cache and download the local embedding model into the user-level cache on first use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Good Context Comes from a Short Reading Route
&lt;/h2&gt;

&lt;p&gt;Load narrows the reading scope in five steps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check the maintained project and documentation entry points.&lt;/li&gt;
&lt;li&gt;Show the retrieval scope through a depth-bounded documentation map.&lt;/li&gt;
&lt;li&gt;Use semantic retrieval to narrow candidate documents when a question is present.&lt;/li&gt;
&lt;li&gt;Select only the plans and history relevant to the current task.&lt;/li&gt;
&lt;li&gt;Read the necessary sections from the maintained sources.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The same source documents can produce a different reading route for each session and question.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Current project context stays useful when the route from trusted sources to the documents worth reading now remains short.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/dotdotgod/ai-agent-memory-starts-with-a-documentation-table-of-contents-4h3"&gt;AI Agent Memory Starts with a Documentation Table of Contents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/dotdotgod/how-dotdotgod-keeps-a-documentation-table-of-contents-current-l0i"&gt;How dotdotgod Keeps a Documentation Table of Contents Current&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/dotdotgod/the-role-of-vector-search-in-docs-first-project-memory-p2p"&gt;The Role of Vector Search in Docs-First Project Memory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dotdotgod/dotdotgod-kit/blob/main/docs/spec/LOAD_PROJECT.md" rel="noopener noreferrer"&gt;Load Project specification&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>dotdotgodkit</category>
      <category>documentation</category>
    </item>
    <item>
      <title>The Role of Vector Search in Docs-First Project Memory</title>
      <dc:creator>dotdot</dc:creator>
      <pubDate>Sun, 02 Aug 2026 03:12:40 +0000</pubDate>
      <link>https://dev.to/dotdotgod/the-role-of-vector-search-in-docs-first-project-memory-p2p</link>
      <guid>https://dev.to/dotdotgod/the-role-of-vector-search-in-docs-first-project-memory-p2p</guid>
      <description>&lt;p&gt;When designing project memory for AI agents, it is tempting to choose the retrieval technology first. Before embedding documents, storing conversations, or building a graph, a project needs to decide where its durable knowledge will live. &lt;strong&gt;The dotdotgod approach keeps that knowledge in documents that people can review and version, then uses search and graphs as derived layers that route agents to the documents they need.&lt;/strong&gt; This is the basic structure of docs-first project memory.&lt;/p&gt;

&lt;p&gt;The previous articles explained how directories, filenames, and README files form a documentation table of contents for AI agents, and how dotdotgod keeps that table of contents current. This article takes the next step by separating the authoritative source of project memory from the retrieval data that can be rebuilt from it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate Sources from Derived Data
&lt;/h2&gt;

&lt;p&gt;Project memory contains several layers with different lifetimes.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Examples&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Shared sources&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;docs/spec/&lt;/code&gt;, &lt;code&gt;docs/arch/&lt;/code&gt;, &lt;code&gt;docs/test/&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Rules, product behavior, design rationale, and verification knowledge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local working memory&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;docs/plan/&lt;/code&gt;, &lt;code&gt;docs/archive/&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Current intent and relevant historical records&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Derived retrieval data&lt;/td&gt;
&lt;td&gt;Graph index, vector cache, manifest&lt;/td&gt;
&lt;td&gt;An acceleration layer for finding related source documents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Session context&lt;/td&gt;
&lt;td&gt;Load output and selected document bodies&lt;/td&gt;
&lt;td&gt;A temporary reading scope for the current request&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Maintained documents can be read, changed, and reviewed by people. When those documents are committed to Git, a project can trace when their contents changed and review the relationships between specs and tests in the same change.&lt;/p&gt;

&lt;p&gt;The vector cache under &lt;code&gt;.dotdotgod/&lt;/code&gt; is calculated from selected Markdown passages. The graph cache indexes documentation relationships as well as package, source, test, and configuration metadata. Both improve retrieval speed and quality, while authority over product behavior and design decisions remains in maintained documents and code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Maintained documents
  ├── relationship extraction → graph index
  ├── passage embedding       → vector cache
  └── selective reading       → session context
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The direction of these arrows matters. Maintained documents preserve meaning; the graph, vector cache, and session context retrieve and deliver that meaning for the current task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Derived Data Should Be Rebuildable
&lt;/h2&gt;

&lt;p&gt;Separating sources from derived layers creates a clear failure boundary. Deleting the vector cache leaves the Markdown sources intact, and a stale or corrupt graph index can be rebuilt from repository files. When semantic retrieval is unavailable, an agent can still navigate through the directory documentation map and README indexes. Shared rules and specs also remain in the repository after an individual agent session ends.&lt;/p&gt;

&lt;p&gt;This recoverability preserves essential project knowledge as models, embedding formats, and agent tools change. Local vector and graph caches stay separate from their sources so they can be recalculated from source files, maintained documents, and project configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Search Result Is an Address, Not the Answer
&lt;/h2&gt;

&lt;p&gt;Natural-language retrieval is useful when a question and a filename use different wording. A user might ask, “Why are old plans excluded from the default context?” while the relevant documents are named &lt;code&gt;LOAD_PROJECT.md&lt;/code&gt; and &lt;code&gt;MEMORY_AREA_CONFIG.md&lt;/code&gt;. Multilingual embedding search can find passages with related meaning even when their wording differs.&lt;/p&gt;

&lt;p&gt;Semantic proximity alone does not reveal whether a passage is a current spec, a historical plan, or an unverified idea. Directory paths expose document roles, and each README provides a local index for its area. Memory areas describe scope and &lt;code&gt;fresh&lt;/code&gt; or &lt;code&gt;stale&lt;/code&gt; classification, while explicit traceability connects specs to implementation and tests.&lt;/p&gt;

&lt;p&gt;A search result is therefore &lt;strong&gt;a candidate address for a source document worth reading&lt;/strong&gt;. The agent checks the result's path and role, reads the relevant source, and then makes a decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Graph Creates Review Routes Back to Source Documents
&lt;/h2&gt;

&lt;p&gt;The relationship graph finds specs, tests, and commands that deserve review alongside a changed file. Markdown links, README routes, package relationships, and structured traceability provide those connections.&lt;/p&gt;

&lt;p&gt;A graph score sets review priority. Results vary with the scope and quality of the recorded relationships, so the final decision comes from reading and verifying the highest-ranked specs, code, and tests.&lt;/p&gt;

&lt;p&gt;Vector retrieval and the relationship graph begin from different inputs.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Retrieval method&lt;/th&gt;
&lt;th&gt;Starting point&lt;/th&gt;
&lt;th&gt;Routes it returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Directory documentation map and README indexes&lt;/td&gt;
&lt;td&gt;A known documentation area&lt;/td&gt;
&lt;td&gt;Child directories, documents, and the next local index&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vector retrieval&lt;/td&gt;
&lt;td&gt;A natural-language question&lt;/td&gt;
&lt;td&gt;Documents with semantically related passages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graph impact&lt;/td&gt;
&lt;td&gt;A changed file&lt;/td&gt;
&lt;td&gt;Documents, code, and tests that deserve review together&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each method provides a route from a different starting point back to maintained source documents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Load Creates a Reading Scope Without Copying the Sources
&lt;/h2&gt;

&lt;p&gt;A docs-first structure becomes most useful when agents read selectively. The dotdotgod Load workflow narrows the reading scope for the current task in five steps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check entry points such as &lt;code&gt;AGENTS.md&lt;/code&gt;, the repository README, and &lt;code&gt;docs/README.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Build a depth-bounded documentation map before reading broad document bodies.&lt;/li&gt;
&lt;li&gt;Use semantic retrieval to narrow document routes when the user provides a question.&lt;/li&gt;
&lt;li&gt;Select only the plans or history relevant to the current task.&lt;/li&gt;
&lt;li&gt;Read the relevant sections of the required source documents.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Load output is temporary retrieval context shaped for the current session and question. A later task can create a different reading route from the same source documents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trust Starts with Where Project Memory Lives
&lt;/h2&gt;

&lt;p&gt;Retrieval accuracy alone cannot establish the quality of AI project memory. People must be able to review the source behind a result. Paths must distinguish current specs from historical records. Project knowledge must survive deletion of the search index, and different agents must be able to reach the same sources and rules.&lt;/p&gt;

&lt;p&gt;Docs-first project memory uses vector retrieval, graphs, and Load as navigation tools built on a reviewable source.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Maintained documents preserve project memory. Retrieval results point to the part of that memory worth reading now.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/dotdotgod/ai-agent-memory-starts-with-a-documentation-table-of-contents-4h3"&gt;AI Agent Memory Starts with a Documentation Table of Contents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/dotdotgod/how-dotdotgod-keeps-a-documentation-table-of-contents-current-l0i"&gt;How dotdotgod Keeps a Documentation Table of Contents Current&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dotdotgod/dotdotgod-kit/blob/main/docs/concept/CONTEXT_CURATION.md" rel="noopener noreferrer"&gt;Context curation concept&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dotdotgod/dotdotgod-kit/blob/main/docs/arch/DOCS_STRUCTURE.md" rel="noopener noreferrer"&gt;Documentation structure architecture&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>dotdotgodkit</category>
      <category>documentation</category>
      <category>agents</category>
    </item>
    <item>
      <title>How dotdotgod Keeps a Documentation Table of Contents Current</title>
      <dc:creator>dotdot</dc:creator>
      <pubDate>Tue, 21 Jul 2026 12:51:41 +0000</pubDate>
      <link>https://dev.to/dotdotgod/how-dotdotgod-keeps-a-documentation-table-of-contents-current-l0i</link>
      <guid>https://dev.to/dotdotgod/how-dotdotgod-keeps-a-documentation-table-of-contents-current-l0i</guid>
      <description>&lt;p&gt;dotdotgod does not create a documentation table of contents once and leave it behind. It combines initialization, README indexes, automated validation, traceability, impact analysis, and archiving with the normal development workflow. The navigation structure can therefore stay current as documents are added, moved, split, and completed.&lt;/p&gt;

&lt;p&gt;The previous article described project directories and filenames as a book-like table of contents for AI agents. That structure can still decay as a project grows: new documents disappear from README indexes, links keep pointing to old paths, and completed plans remain mixed with active work.&lt;/p&gt;

&lt;p&gt;dotdotgod treats documentation structure as more than a recommendation. It puts a maintenance mechanism at every stage where a document is created, changed, or completed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create the Initial Index, Then Expand It with the Project
&lt;/h2&gt;

&lt;p&gt;dotdotgod creates a baseline documentation structure during project initialization.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AGENTS.md
CLAUDE.md
CODEX.md
docs/
├── README.md
├── spec/
│   └── README.md
├── arch/
│   └── README.md
├── test/
│   └── README.md
├── plan/
│   └── README.md
└── archive/
    └── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are not empty directories. Each README explains the area's role and the rules for placing documents there. The project starts with the major parts of the book and their initial table of contents before individual chapters are written.&lt;/p&gt;

&lt;p&gt;Different agents use the same structure. &lt;code&gt;AGENTS.md&lt;/code&gt; provides shared working rules, while &lt;code&gt;CLAUDE.md&lt;/code&gt; and &lt;code&gt;CODEX.md&lt;/code&gt; are thin entry points into those rules. Documentation discovery starts at &lt;code&gt;docs/README.md&lt;/code&gt;, so Pi, Claude Code, and Codex can share paths and terminology instead of creating separate documentation systems.&lt;/p&gt;

&lt;p&gt;dotdotgod does not list every document in one enormous index. Each directory's &lt;code&gt;README.md&lt;/code&gt; acts as the local table of contents for that area.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/README.md
    ↓
docs/spec/README.md
    ↓
docs/spec/cli/README.md
    ↓
docs/spec/cli/LOAD_SNAPSHOT.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each README records important documents, child directories, status, and a one-line purpose. Adding, renaming, splitting, or archiving a document also requires updating the nearest README in the same change. A README is therefore not just an introduction; it is an active routing table.&lt;/p&gt;

&lt;p&gt;A small subject begins as one focused document.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/spec/PAYMENT.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the domain grows, it can be promoted into a directory with its own README and supporting documents.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/spec/payment/
├── README.md
├── LIST_API.md
├── SUMMARY_API.md
└── REFUND_POLICY.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This keeps one index from becoming too long and prevents one large document from accumulating unrelated responsibilities. As documentation grows, the navigation hierarchy grows with it.&lt;/p&gt;

&lt;p&gt;After extending the structure, a project can configure the memory role of each path. &lt;code&gt;dotdotgod config .&lt;/code&gt; shows the resolved policy, and &lt;code&gt;dotdotgod config init .&lt;/code&gt; writes the built-in defaults to &lt;code&gt;dotdotgod.config.json&lt;/code&gt; for editing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"memory"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"areas"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"decision"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Decisions"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"paths"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"docs/decision/**"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"scope"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"shared"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"freshness"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"fresh"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"decision-record"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"priority"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"includeBodiesByDefault"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A project can register additional paths, change the paths and priorities of the default &lt;code&gt;spec&lt;/code&gt;, &lt;code&gt;architecture&lt;/code&gt;, and &lt;code&gt;test&lt;/code&gt; areas, or remove areas it does not need. This configuration does not create or delete files. It classifies existing documents by memory role and scope. The &lt;a href="https://github.com/dotdotgod/dotdotgod-kit/blob/main/docs/spec/MEMORY_AREA_CONFIG.md" rel="noopener noreferrer"&gt;Memory Area Config specification&lt;/a&gt; defines the fields and priority rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validate Names and Structure Automatically
&lt;/h2&gt;

&lt;p&gt;Documentation rules do not survive for long when they depend only on author discipline. The dotdotgod CLI checks whether project documentation follows the configured structure.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotdotgod validate &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--include-local-memory&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--check-index&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Validation checks whether:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;required baseline documents and README indexes exist;&lt;/li&gt;
&lt;li&gt;Markdown links and structured traceability data are valid;&lt;/li&gt;
&lt;li&gt;document names, paths, and sizes follow project rules; and&lt;/li&gt;
&lt;li&gt;the index matches the current files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Document size is also part of maintaining the table of contents. The default limit for one Markdown file is 200 lines and 10,000 characters. Exceeding either limit reports &lt;code&gt;FILE_TOO_LONG&lt;/code&gt; or &lt;code&gt;FILE_TOO_LARGE&lt;/code&gt;. Instead of extending one document indefinitely, split it by subject and update the nearest README index.&lt;/p&gt;

&lt;p&gt;Projects can adjust size limits and excluded paths in &lt;code&gt;dotdotgod.config.json&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"validation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"markdown"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"maxLines"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"maxChars"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"exclude"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"docs/archive/README.md"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exclusions should remain narrow and cover only files that are difficult to split, such as intentionally large indexes or generated documents. One-off validation can override the limits with &lt;code&gt;--max-lines&lt;/code&gt; and &lt;code&gt;--max-chars&lt;/code&gt;. Generated traceability-link sections and &lt;code&gt;json dotdotgod&lt;/code&gt; blocks are excluded from size measurement so generated metadata does not distort the document's body size.&lt;/p&gt;

&lt;p&gt;This resembles proofreading a book before publication: check its table of contents, cross-references, and missing pages. Automated validation finds missing or oversized entries before the navigation structure collapses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect Specs, Implementation, and Tests
&lt;/h2&gt;

&lt;p&gt;Even a well-structured index loses trust when its documents drift away from the code. dotdotgod can record structured traceability on important behavior specifications, connecting them to implementation files, tests, related documents, and verification commands.&lt;/p&gt;

&lt;p&gt;For example, after changing a CLI implementation, &lt;code&gt;graph impact&lt;/code&gt; can identify the specs and tests that deserve review.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotdotgod graph impact &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--changed&lt;/span&gt; &amp;lt;path&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The graph and index do not replace the source documents. The follow-up article &lt;a href="//../how-graph-impact-finds-related-docs/README.md"&gt;How to Find the Documents That Belong in a Change Review&lt;/a&gt; explains how changed files lead to related documents and how those results are ranked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate Current Plans from Historical Records
&lt;/h2&gt;

&lt;p&gt;As documentation ages, the distinction between current and historical information becomes more important. Active work lives at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/plan/&amp;lt;task-slug&amp;gt;/README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A plan records its goal, scope, target files, risks, implementation sequence, verification, and current status. When the work is complete, the plan moves to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/archive/plan/&amp;lt;task-slug&amp;gt;/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;docs/archive/README.md&lt;/code&gt; remains the historical index for completed work. The history is preserved without mixing it into the current work queue.&lt;/p&gt;

&lt;p&gt;Agents do not load every archive body by default. They inspect the historical index first and open a specific record only when a past decision is relevant. Archiving preserves history while removing completed work from the active table of contents.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Table of Contents Is Maintained by the Workflow
&lt;/h2&gt;

&lt;p&gt;dotdotgod creates the baseline index through initialization and shared agent rules, then uses each README as a local index. As documentation grows, domains are promoted into directories. Validation and impact analysis check links and traceability, while the plan lifecycle separates current intent from historical records. Load can then use the maintained index as a project-memory map for selective reading.&lt;/p&gt;

&lt;p&gt;A documentation system does not stay useful because its initial structure was tidy. Every operation that adds, changes, splits, or completes a document also needs a rule for updating the table of contents.&lt;/p&gt;

&lt;p&gt;dotdotgod is not trying to maintain a pile of Markdown files. It maintains a &lt;strong&gt;living project-memory system&lt;/strong&gt; that people and multiple AI agents can read, change, and verify in the same way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/dotdotgod/ai-agent-memory-starts-with-a-documentation-table-of-contents-4h3"&gt;AI Agent Memory Starts with a Documentation Table of Contents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dotdotgod/dotdotgod-kit/blob/main/docs/spec/LOAD_PROJECT.md" rel="noopener noreferrer"&gt;Load Project specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dotdotgod/dotdotgod-kit/blob/main/docs/spec/VALIDATION_CONFIG.md" rel="noopener noreferrer"&gt;Markdown validation configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dotdotgod/dotdotgod-kit/blob/main/docs/spec/cli/GRAPH_IMPACT.md" rel="noopener noreferrer"&gt;Graph impact command specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dotdotgod/dotdotgod-kit/blob/main/docs/spec/IMPACT_RANKING_CONFIG.md" rel="noopener noreferrer"&gt;Impact ranking architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dotdotgod/dotdotgod-kit/blob/main/docs/arch/DOCS_STRUCTURE.md" rel="noopener noreferrer"&gt;Documentation structure architecture&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>dotdotgodkit</category>
      <category>agents</category>
      <category>documentation</category>
    </item>
    <item>
      <title>AI Agent Memory Starts with a Documentation Table of Contents</title>
      <dc:creator>dotdot</dc:creator>
      <pubDate>Sun, 19 Jul 2026 08:13:24 +0000</pubDate>
      <link>https://dev.to/dotdotgod/ai-agent-memory-starts-with-a-documentation-table-of-contents-4h3</link>
      <guid>https://dev.to/dotdotgod/ai-agent-memory-starts-with-a-documentation-table-of-contents-4h3</guid>
      <description>&lt;p&gt;Good project memory for AI agents is not a larger pile of documents. It is a &lt;strong&gt;hierarchical table of contents&lt;/strong&gt; that helps an agent reach the right document quickly and ignore irrelevant ones. Directories identify document roles and parent topics, filenames name individual entries, and each &lt;code&gt;README.md&lt;/code&gt; routes the agent to the next level. When a subject grows, a single file can be promoted into a directory with its own README and supporting documents. Paths, filenames, README indexes, and headings can therefore work like a book, letting an agent find the relevant specs, architecture, tests, and plans without reading the entire project.&lt;/p&gt;

&lt;h2&gt;
  
  
  More Documentation Does Not Mean Better Memory
&lt;/h2&gt;

&lt;p&gt;When documents are mixed in one directory or stored under names such as &lt;code&gt;NOTES.md&lt;/code&gt; and &lt;code&gt;FINAL.md&lt;/code&gt;, an agent cannot tell which file contains the current spec, architecture, or test strategy without opening it. When the path exposes the role, as in &lt;code&gt;docs/spec/CLI_INTERFACE.md&lt;/code&gt;, &lt;code&gt;docs/arch/CLI_ARCHITECTURE.md&lt;/code&gt;, and &lt;code&gt;docs/test/CLI_INTERFACE.md&lt;/code&gt;, the table of contents distinguishes the spec, architecture, and tests before any body is loaded.&lt;/p&gt;

&lt;p&gt;Good project memory does not expose everything all the time. Paths and indexes help an agent find what the current task needs and exclude documents with different roles before reading them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Documentation Is a Book
&lt;/h2&gt;

&lt;p&gt;We rarely read a book from the first page to the last when looking for one answer. We inspect the table of contents and move to the relevant part and chapter. Project documentation can follow the same model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/
├── README.md                         # Table of contents for the whole book
├── concept/                          # Part 1: Core concepts
│   ├── README.md                     # Part 1 index
│   └── CONTEXT_CURATION.md           # Chapter: Context curation
├── spec/                             # Part 2: Product behavior
│   ├── README.md                     # Part 2 index
│   ├── PROJECT_INITIALIZER.md        # Chapter 1: Project initialization
│   └── cli/                          # Chapter 2: CLI
│       ├── README.md                 # Chapter 2 index
│       └── CONFIG_COMMAND.md         # Chapter 2, section 1: config command
├── arch/                             # Part 3: Architecture and constraints
│   ├── README.md                     # Part 3 index
│   └── DOCS_STRUCTURE.md             # Chapter: Documentation structure
└── test/                             # Part 4: Tests
    ├── README.md                     # Part 4 index
    └── CLI_INTERFACE.md              # Chapter: CLI regression tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read this structure as a route through nested indexes. &lt;code&gt;spec/&lt;/code&gt; is the top-level index for product specs, and &lt;code&gt;PROJECT_INITIALIZER.md&lt;/code&gt; is one entry beneath it. When the CLI subject grows, &lt;code&gt;cli/&lt;/code&gt; becomes a new child index and &lt;code&gt;cli/README.md&lt;/code&gt; routes readers within it. &lt;code&gt;CONFIG_COMMAND.md&lt;/code&gt; is one entry in that child index. In book terms, these correspond to Part 2, Part 2 Chapter 1, Part 2 Chapter 2, and Part 2 Chapter 2 Section 1.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Full path&lt;/th&gt;
&lt;th&gt;Role in the table of contents&lt;/th&gt;
&lt;th&gt;Book notation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docs/README.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Top-level index for the whole book&lt;/td&gt;
&lt;td&gt;Full table of contents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docs/spec/README.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Area index for product behavior&lt;/td&gt;
&lt;td&gt;Part 2 index&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docs/spec/PROJECT_INITIALIZER.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Project initialization entry&lt;/td&gt;
&lt;td&gt;Part 2, Chapter 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docs/spec/cli/README.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Child index for CLI documents&lt;/td&gt;
&lt;td&gt;Part 2, Chapter 2 index&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docs/spec/cli/CONFIG_COMMAND.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;config command entry&lt;/td&gt;
&lt;td&gt;Part 2, Chapter 2, Section 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docs/arch/DOCS_STRUCTURE.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Architecture of the documentation system&lt;/td&gt;
&lt;td&gt;A chapter in Part 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docs/test/CLI_INTERFACE.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Test strategy for CLI behavior&lt;/td&gt;
&lt;td&gt;A chapter in Part 4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A small subject starts as one indexed file. When it grows, it becomes a directory with a &lt;code&gt;README.md&lt;/code&gt; and its own child entries. The filename names the entry, while the full path is its address from the top-level index.&lt;/p&gt;

&lt;h2&gt;
  
  
  Directory Names Explain Document Roles
&lt;/h2&gt;

&lt;p&gt;A directory does more than group documents by topic. It tells an agent how to interpret the information inside.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;concept/&lt;/code&gt; explains mental models and core concepts.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;spec/&lt;/code&gt; defines the product's current specs.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;arch/&lt;/code&gt; explains architectural rationale, structure, and technical constraints.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;test/&lt;/code&gt; records regression tests and manual test procedures.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;report/&lt;/code&gt; preserves evidence from research and measurement.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;plan/&lt;/code&gt; records the intent of active work.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;archive/&lt;/code&gt; preserves completed work and historical context.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Consider this path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/spec/cli/CONFIG_COMMAND.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;This document describes the CLI config command in the current product specs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Paths change the meaning even when documents cover the same subject.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/arch/CLI_ARCHITECTURE.md
docs/test/CLI_INTERFACE.md
docs/archive/plan/cli-refactor/README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first explains architecture, the second explains testing, and the third records historical work. Their paths reveal role and freshness even when their bodies use similar terms.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Filename Is a Chapter Title
&lt;/h2&gt;

&lt;p&gt;The following filenames distinguish files but do not explain their contents.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DOCUMENT_1.md
NOTES_NEW.md
FINAL_V2.md
MISC.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These names expose scope before the files are opened:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PROJECT_INITIALIZER.md
CLI_INTERFACE.md
LOAD_SNAPSHOT.md
VALIDATION_ARCHITECTURE.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A good filename works like a chapter title that is meaningful in the table of contents. Dotdotgod uses kebab-case for directories and UPPER_SNAKE_CASE for durable Markdown documents. &lt;code&gt;README.md&lt;/code&gt; is the predictable entry point for every directory.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;CONFIG_COMMAND.md&lt;/code&gt; is more useful than &lt;code&gt;API_1.md&lt;/code&gt; because it names behavior and domain instead of writing order. Stable, specific names let people and agents use the same vocabulary when finding and referencing documents.&lt;/p&gt;

&lt;h2&gt;
  
  
  README Is the Local Table of Contents
&lt;/h2&gt;

&lt;p&gt;Each directory's &lt;code&gt;README.md&lt;/code&gt; is a local index rather than a generic introduction.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Product specifications&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; &lt;span class="sb"&gt;`CLI_INTERFACE.md`&lt;/span&gt;: user-facing CLI specs
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`PROJECT_INITIALIZER.md`&lt;/span&gt;: project initialization behavior
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`cli/`&lt;/span&gt;: detailed specs for individual CLI commands
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`plan-mode/`&lt;/span&gt;: plan mode and staged execution specs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An agent can read this README and choose the next document without opening every file in the directory. This is why adding, moving, or renaming a document should update the nearest README in the same change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Increase the Depth of the Index as Documentation Grows
&lt;/h2&gt;

&lt;p&gt;Do not begin with a complex hierarchy. If a subject has one document, start with one file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/spec/PAYMENT.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the domain grows into multiple documents, promote it to a directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/spec/payment/
├── README.md
├── LIST_API.md
├── SUMMARY_API.md
└── REFUND_POLICY.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;payment/README.md&lt;/code&gt; becomes the intermediate index between the spec area and its individual documents. An agent narrows the search in four steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select a documentation area in &lt;code&gt;docs/README.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Select a product domain in &lt;code&gt;docs/spec/README.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Find the relevant behavior in &lt;code&gt;docs/spec/payment/README.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Read only the necessary section of the selected document.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The amount of possible context grows with the project, but an index keeps the context required for the current task small.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Good Index Also Says What Not to Read
&lt;/h2&gt;

&lt;p&gt;When changing the current behavior of a CLI command, inspect &lt;code&gt;docs/spec/cli/&lt;/code&gt; first. Read &lt;code&gt;docs/arch/&lt;/code&gt; when implementation constraints matter, &lt;code&gt;docs/test/&lt;/code&gt; when regression coverage matters, and &lt;code&gt;docs/archive/&lt;/code&gt; only when a historical decision is relevant.&lt;/p&gt;

&lt;p&gt;The documentation structure answers two questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What should the agent read now?&lt;/li&gt;
&lt;li&gt;What can the agent ignore for this task?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Good project memory is not a system that injects every document into every prompt. It provides a route to relevant information and a boundary that excludes irrelevant information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Designing Project Memory Means Designing Addresses
&lt;/h2&gt;

&lt;p&gt;It is natural to begin project-memory design by asking what to store. First ask whether the information has a useful address.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can a path and filename reveal a document's role and contents?&lt;/li&gt;
&lt;li&gt;Does every directory contain an index to the next relevant document, while separating current and historical information?&lt;/li&gt;
&lt;li&gt;Can the table of contents expand as documentation grows without making the agent read everything?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Directories divide the book into parts, filenames name chapters, README indexes route readers, and headings narrow a document into sections.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Designing documentation for AI is not cosmetic file organization. It is designing a table of contents that lets an agent reach the chapter required by the current question without reading the whole project.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>dotdotgodkit</category>
      <category>documentation</category>
      <category>agents</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
