<?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: matsumotory</title>
    <description>The latest articles on DEV Community by matsumotory (@matsumotory).</description>
    <link>https://dev.to/matsumotory</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%2F41472%2F07c9ad09-7c0c-4aa9-aa76-e895bb30e9e6.jpg</url>
      <title>DEV Community: matsumotory</title>
      <link>https://dev.to/matsumotory</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/matsumotory"/>
    <language>en</language>
    <item>
      <title>Deciding the criteria for excluding an AI-collected research topic candidate</title>
      <dc:creator>matsumotory</dc:creator>
      <pubDate>Wed, 12 Aug 2026 19:05:48 +0000</pubDate>
      <link>https://dev.to/matsumotory/deciding-the-criteria-for-excluding-an-ai-collected-research-topic-candidate-2np1</link>
      <guid>https://dev.to/matsumotory/deciding-the-criteria-for-excluding-an-ai-collected-research-topic-candidate-2np1</guid>
      <description>&lt;h2&gt;
  
  
  The problem and the outcome in brief
&lt;/h2&gt;

&lt;p&gt;I collect the problems I run into in daily development and operations as candidate research topics, rather than letting them end with an on-the-spot fix. An AI agent automatically reads the material and drafts candidates (I will call this role the extraction agent), and a person decides whether to adopt them. In this process I narrowed the reasons for excluding a candidate down to two. This article explains how that came about, and what the automatic extraction produced when I ran it on the day I rewrote the criteria. The point is that a criterion for exclusion has to be one whose truth the extraction agent can judge from the material alone. I also cover how to write records so they can serve as candidates later, and the division of roles that leaves adoption and confirmation to a person. This is for people who want to pick research or writing topics out of their own development records.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deciding the criteria for exclusion
&lt;/h2&gt;

&lt;p&gt;I record the problems I find in daily development and operations as candidate research topics. An AI agent extracts candidates from development records, following a procedure kept in a repository I run on my own for research drafts and operations records, and that same procedure also decides which candidates may be excluded before they go into the record. On 2026-07-15 I rewrote these exclusion criteria. Before the rewrite, I judged exclusion with a single question: does a candidate still stand as a research topic and look valuable once you cut it loose from the circumstances of the organization doing the development? The extraction agent excluded any candidate that did not satisfy this question. The criteria after the rewrite limit the reasons for exclusion to two. The first is a candidate that does not generalize, meaning one whose context does not carry to a reader who does not know the internal circumstances of the development. The second is a candidate whose confidential information cannot be separated out, meaning one where no change of wording removes the part that has to stay hidden, such as the name of an unreleased product. Every candidate that passes those two goes into the record in full, and I do not use an assessment of value as a reason to exclude; I write it instead as an observation attached to the candidate.&lt;/p&gt;

&lt;p&gt;The person who decides adoption judges whether a candidate has value. The extraction agent does not pre-empt that judgment. If the extraction agent excludes a candidate up front on the grounds that it seems to have no value, nobody can verify afterward whether the candidate really had none. On top of that, the extraction agent comes to keep only the candidates that look likely to match the wishes of the person who decides adoption, and the range of collection itself narrows to what matches that person's interests.&lt;/p&gt;

&lt;p&gt;Up to this point this has been about candidate research topics, but around the same time, I also made a rule change in the opposite direction on the blog that carries this article. I was increasingly writing an article and only then finding it too thin to keep, so for the high-priority candidates among the article proposals, I added a condition: that the exchange between the AI and the person, that is, what was tried, what happened, and what was fixed and how, can be copied out of the material in concrete form. In other words, for research topic candidates I removed a condition the extraction agent has no way to verify, and for article proposal candidates I added a condition the extraction agent can verify on the spot. Both changes rest on the same principle: a criterion for exclusion has to be one whose truth the extraction agent can judge from the material alone.&lt;/p&gt;

&lt;p&gt;Along with this principle, here are the five things I hold to across the process from collection to aggregation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Only two kinds of candidate may be excluded: ones that do not generalize, and ones whose confidential information cannot be separated out. An assessment of value is written as an observation attached to the candidate, and is not used as a reason to exclude.&lt;/li&gt;
&lt;li&gt;Excluded candidates stay in the record too, with the reason for exclusion attached. Without a record, you can no longer tell afterward whether the range of collection was narrow or the material simply was not there.&lt;/li&gt;
&lt;li&gt;In the recording step, write the conditions for reproducing the problem, meaning what happened when you did what, and the place where that event can be confirmed, in the same place as what you did about it.&lt;/li&gt;
&lt;li&gt;Material with only a single failure is too thin in content to become a candidate on its own. I wait until similar failures accumulate and then pull them into a single candidate.&lt;/li&gt;
&lt;li&gt;In the aggregation step, a person makes the adoption decision and confirms it. The extraction agent hands over every candidate with a proposed judgment attached, and does not cut candidates on its own by reading ahead into what the deciding person wants.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What the automatic extraction produced on the day I rewrote the criteria
&lt;/h2&gt;

&lt;p&gt;On the day I rewrote the criteria, the AI agent ran the automatic extraction once under the new ones. Here are the numbers from that record.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Candidates received&lt;/td&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raised as new candidates&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Absorbed into an existing candidate&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dropped as duplicates of other candidates&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Excluded under the two criteria&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Not a single candidate met the two criteria. What actually did the narrowing was the 21 folded together as duplicates and the 15 absorbed into existing candidates.&lt;/p&gt;

&lt;p&gt;That zero cannot be read as the effect of the rewrite alone. In the same change, I also added viewpoints for the extraction. Until then there were only seven viewpoints, named after fields such as ways of thinking about design, or privacy. To those I added seven viewpoints for how to compare material, such as comparing the gap between an estimate and a measurement in numbers, or questioning a pass result itself. The extraction record shows that 11 of the 24 new candidates came mainly out of the viewpoints I added. Because I bundled the rewrite of the criteria and the addition of viewpoints into a single change, I cannot separate which of the two the zero belongs to. It can also be read as the criteria being so loose that nothing gets excluded at all. The AI agent kept even the candidate that looked most specific to my own setting rather than excluding it, on the grounds that the same thing happens in other environments, and that judgment is in the record. Still, I have not run the measurement enough times yet to rule that reading out.&lt;/p&gt;

&lt;h2&gt;
  
  
  The level of detail that makes a record usable as a candidate later
&lt;/h2&gt;

&lt;p&gt;Even if you keep the range of collection wide, a record that holds nothing but what was done about the problem cannot serve as a candidate later. The rules document for an app I develop at my own company carries a dated record of an accident that happened when an operation with side effects was sent to an external service. The address used to test user registration turned out to be a real one, and the confirmation email reached a stranger. The same section also states that the message is recorded in the authentication log on the external service side. There is a list of checks to prevent a repeat, and one item stops the operation if a real domain is included. The conditions for reproduction, meaning what happened when you did what, and the place where it can be confirmed, sit in the same place as what was done about it, so the record can serve as a candidate later. The third of the five conditions I listed above refers to this form of record.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five conditions for aggregation, and who decides adoption
&lt;/h2&gt;

&lt;p&gt;I use five conditions to decide whether to adopt a collected candidate as a research topic I will actually start work on.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who is responsible has been decided&lt;/li&gt;
&lt;li&gt;When it starts has been decided&lt;/li&gt;
&lt;li&gt;Where the results will be published has been decided&lt;/li&gt;
&lt;li&gt;The first piece of work has already been started&lt;/li&gt;
&lt;li&gt;It has passed the check for whether it generalizes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If even one is missing, I do not adopt it. I lower its priority or move it to hold. The extraction agent is responsible up to handing over every candidate with a proposed judgment attached, and for a candidate it has not judged yet it writes "not judged" rather than leaving the field empty. Otherwise you can no longer tell afterward whether it was judged or skipped.&lt;/p&gt;

&lt;p&gt;I also have a measurement of how many the deciding person withdraws. On this platform, on 2026-07-27, I went through all 60 article proposals and decided which were needed, keeping 45 and withdrawing 15. The reasons for withdrawal fell into three patterns. The largest was candidates where the AI only appears as something called or something worked on, with no exchange between the AI and a person at the core, and that accounted for 60 percent of the 15 I withdrew. The rest were candidates that amount to an explanation anyone who knows the field could write, and candidates raised from thin material with only a single failure. Checking all 60 is a measurement on the article proposal side, but if the extraction agent does not pre-empt the judgment of value, that judgment falls to the person deciding adoption. When the range of collection is kept wide, I take this one quarter as a rough guide to how many the person will withdraw.&lt;/p&gt;

&lt;p&gt;The design of separating the collection step from the step that decides adoption is not new in itself, and it is already in &lt;a href="https://www.cochrane.org/authors/handbooks-and-manuals/handbook/current/chapter-04" rel="noopener noreferrer"&gt;the handbook for systematic literature reviews&lt;/a&gt;. The pattern of reading across after-the-fact incident records to find a common theme, rather than stopping at an individual fix, is also established, as laid out in &lt;a href="https://sre.google/sre-book/postmortem-culture/" rel="noopener noreferrer"&gt;a standard account in the operations field&lt;/a&gt;. Compared with that pattern for incident records, I changed two things in my own operation. I widened the target from incidents to everyday problems and review comments as well, and I made the destination of the aggregation a candidate research topic.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I hand to an AI agent, and what I keep with a person
&lt;/h2&gt;

&lt;p&gt;In this operation, for candidate research topics, an AI agent automatically handles reading the material, drafting candidates, and attaching a proposal, and a person confirms whether to adopt. Outside measurements confirm that this division of roles makes sense, too. &lt;a href="https://arxiv.org/abs/2409.04109" rel="noopener noreferrer"&gt;A human-evaluation study that enlisted more than 100 researchers&lt;/a&gt; judged ideas from an LLM to be more novel than ideas from experts, while their feasibility came out somewhat lower. &lt;a href="https://arxiv.org/abs/2605.27905" rel="noopener noreferrer"&gt;A survey that generated more than 200,000 ideas&lt;/a&gt; reports that AI ideas cluster near the literature they started from. The latter is a result showing that the more the collection step is handed to an AI, the more the candidates gather into a narrow range. I take both results as support for keeping the adoption judgment on the human side.&lt;/p&gt;

&lt;p&gt;There is a shared convention for recording what an AI agent does as well, the &lt;a href="https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/gen-ai-agent-spans.md" rel="noopener noreferrer"&gt;OpenTelemetry semantic conventions for GenAI&lt;/a&gt;, and work is under way there to settle the names and meanings of the items to record. The document's status is still Development, though, so the names can still change. As of today, what an AI can take over is the first-hand record of what was called when and what came back, and the judgment that raises that into a problem worth working on still sits with a person.&lt;/p&gt;

&lt;p&gt;Whether this process has reached a research result is something I cannot speak to yet. What I have is a little under two months of material even at its longest, and three weeks of records since the rewrite, so measuring whether the candidates I collected made it to acceptance is still ahead. Even so, when you are torn between widening and narrowing the range of collection, start by checking whether you can tell from the material alone whether something meets your current exclusion criteria.&lt;/p&gt;

&lt;h2&gt;
  
  
  Research I referred to
&lt;/h2&gt;

&lt;p&gt;Here are the five outside primary sources referred to in the article. I checked the source page for all of them as of 2026-08-06. For the two arXiv items, I checked the abstract page.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chapter 4 of the Cochrane Handbook (designing the search step) &lt;a href="https://www.cochrane.org/authors/handbooks-and-manuals/handbook/current/chapter-04" rel="noopener noreferrer"&gt;https://www.cochrane.org/authors/handbooks-and-manuals/handbook/current/chapter-04&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The chapter on postmortem culture in Google's SRE book &lt;a href="https://sre.google/sre-book/postmortem-culture/" rel="noopener noreferrer"&gt;https://sre.google/sre-book/postmortem-culture/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The document in the OpenTelemetry semantic conventions for GenAI that defines the unit for recording what an AI agent does &lt;a href="https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/gen-ai-agent-spans.md" rel="noopener noreferrer"&gt;https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/gen-ai-agent-spans.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Can LLMs Generate Novel Research Ideas? A Large-Scale Human Study with 100+ NLP Researchers. A human-evaluation study by Si, Yang, and Hashimoto that enlisted more than 100 natural language processing researchers (submitted 2024-09-06) arXiv:2409.04109 &lt;a href="https://arxiv.org/abs/2409.04109" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2409.04109&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;AI Research Agents Narrow Scientific Exploration. A study by Tang and Yang on whether AI research agents narrow the range of scientific exploration (submitted 2026-05-27, revised 2026-07-11) arXiv:2605.27905 &lt;a href="https://arxiv.org/abs/2605.27905" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2605.27905&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aird.matsumoto-r.jp/en/posts/2026-08-06-research-elevation-with-ai/" rel="noopener noreferrer"&gt;The Future of Humans, AI, and the Web&lt;/a&gt;, a site where my research and development is recorded and analyzed by a human and an AI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>research</category>
      <category>programming</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>At companies where AI writes 80 percent of the code, has development become 80 percent faster?</title>
      <dc:creator>matsumotory</dc:creator>
      <pubDate>Wed, 12 Aug 2026 19:05:47 +0000</pubDate>
      <link>https://dev.to/matsumotory/at-companies-where-ai-writes-80-percent-of-the-code-has-development-become-80-percent-faster-50n3</link>
      <guid>https://dev.to/matsumotory/at-companies-where-ai-writes-80-percent-of-the-code-has-development-become-80-percent-faster-50n3</guid>
      <description>&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;I hold a hypothesis: what decides the value of software from here on may be the autonomous continuity in which software makes software. To verify that hypothesis, I ran two passes of research through the public primary sources of the major companies that build AI models. The research asked how far each company officially says it uses its own AI models in its own model development, and how far the companies and outside researchers have been able to verify with actual measurement the claims of acceleration, of how much faster development has become as a result.&lt;/p&gt;

&lt;p&gt;I read four kinds of sources: each company's announcements, the documents that gather a provider's evaluations of performance and safety, published when it releases an AI model (system cards), research papers, and an economic estimate in which independent researchers rework the figures each company published within a calculation framework of their own. I read all of them down to the body text, not just summaries. From the research I found both large numbers that support the hypothesis and conclusions from the AI companies themselves that weaken it.&lt;/p&gt;

&lt;p&gt;In this article I go through what the primary documents of the three companies actually say, with the definitions of the numbers attached. I too operate a chain of the same structure, in which software makes software, together with AI at the scale of an individual. I add the measurements from running it, and explain how far this hypothesis can be claimed now and where it stops being claimable.&lt;/p&gt;

&lt;p&gt;Let me lay out the structure of the body up front. First, I confirm the exact definition of the figure that says AI writes 80 percent of the code inside a company. Next, I restate the hypothesis as a structure in which the gap between models keeps widening the gap between the next models. Third, I recount how the methods I had settled on earlier for the convenience of my own operation matched the current recommendations of these companies, which I read afterward. Last, I read the judgment in which the parties themselves conclude that they cannot attribute the acceleration of their own progress to AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can take away
&lt;/h2&gt;

&lt;p&gt;This article is for people who are building a setup where they develop alongside AI agents. It is also for people who want to know from primary sources where the story of AI building models actually stands right now. In this article, I explain two insights. The first is how to read acceleration figures, the numbers for how much faster AI has made development. Each company describes the same acceleration as large in a promotional setting and as small in a safety evaluation. So you must not line up numbers with different definitions and compare them as they are. I show this way of reading with quotations from the original text. The second is a lesson that applies directly to individual development. What I settled on is this: the lower the cost of verification in a domain, the larger the effect the chain shows there. I also explain the conclusion that what has the highest value to hand over to AI is the record of judgment, of why a person decided the way they did.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem and what came of it
&lt;/h2&gt;

&lt;p&gt;To check my hypothesis against reality, I read the public primary documents of the major companies and an independent economic estimate down to the body text. After the first pass, I went back over the premises to make my conclusion more exact. My material was those public documents, together with measurements from the running of this platform itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hypothesis
&lt;/h2&gt;

&lt;p&gt;What AI can write moves closer to what anyone can build. If the value of building software itself keeps thinning out under competition, value should remain somewhere else. I think that place is the autonomous continuity in which software, once built, builds the next software. I build this membership platform for a technical blog together with AI: the articles, the search, and the conversation feature alike. Including the chain that records the discussions held here, turns them into content, and returns them to the knowledge of that AI itself, this platform is also a live experiment testing this hypothesis.&lt;/p&gt;

&lt;p&gt;Still, a hypothesis is a hypothesis. To check it against reality, I went and read public primary documents down to the body text, to see whether this is really happening at the leading edge and how far the companies and outside researchers have been able to verify it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each company officially says
&lt;/h2&gt;

&lt;p&gt;First, I will quote only the official words of the parties involved. In &lt;a href="https://openai.com/index/gpt-5-6/" rel="noopener noreferrer"&gt;an announcement dated 2026-07-09&lt;/a&gt;, OpenAI wrote that over the preceding six months, the share of its research compute allocated to running AI that writes code internally had grown a hundredfold. In the same paragraph, though, it notes on its own that this is a measure of usage and not a number that measures research progress itself. In &lt;a href="https://www.anthropic.com/institute/recursive-self-improvement" rel="noopener noreferrer"&gt;an official explainer article&lt;/a&gt;, Anthropic published that, as of May 2026, its own models wrote more than 80 percent of the code integrated into its codebase. That 80 percent has a footnote as well, which gives it the conservative definition of the share of lines integrated into production that can be attributed to a model, and goes as far as writing that line count is a measure of quantity and not of quality. Google's chief executive said &lt;a href="https://blog.google/innovation-and-ai/infrastructure-and-cloud/google-cloud/cloud-next-2026-sundar-pichai/" rel="noopener noreferrer"&gt;in a talk&lt;/a&gt; that 75 percent of new code inside the company is AI generated and has passed engineer approval. This one is defined as the share of generation that passed approval, so a few lines emitted by a completion feature can enter the numerator. The two figures, 80 and 75, look close, but their definitions differ, so they cannot be compared side by side.&lt;/p&gt;

&lt;p&gt;In the same explainer article, Anthropic has also published an internal evaluation in which the rate at which a model beats human judgment on choosing the next research move rose from 51 percent to 64 percent. As for OpenAI, &lt;a href="https://the-decoder.com/openais-gpt-5-6-sol-autonomously-post-trained-the-smaller-luna-model-with-a-fairly-underspecified-prompt/" rel="noopener noreferrer"&gt;reports&lt;/a&gt; carry an announcement that a higher-tier AI model autonomously performed post-training, the additional training done after a model is built, on a lower-tier model. An OpenAI employee added a note to this, though: it did not build the training procedure from scratch but adapted its own post-training configuration for a small model, and for humans that would be about two weeks of work for two researchers. &lt;a href="https://deploymentsafety.openai.com/gpt-5-6/gpt-5-6.pdf" rel="noopener noreferrer"&gt;OpenAI's system card&lt;/a&gt;, which gathers its evaluations of performance and safety, also states plainly that reliably designing and executing a complete post-training procedure across diverse models is not yet possible. Even so, one of Anthropic's co-founders goes so far as writing, in &lt;a href="https://darioamodei.com/essay/the-adolescence-of-technology" rel="noopener noreferrer"&gt;an essay&lt;/a&gt;, that it may be one or two years until the point where the current generation of AI autonomously builds the next.&lt;/p&gt;

&lt;p&gt;Read only the disclosures up to this point, and the chain in which software makes software looks like it is already functioning in full.&lt;/p&gt;

&lt;h2&gt;
  
  
  The structure where the gap between models widens the next gap
&lt;/h2&gt;

&lt;p&gt;The competitive picture is not decided by whether a company has the chain in which software makes software. Because every company has begun to depend on the AI models that carry the chain, today's gap between models becomes the performance gap of the next models, and that gap keeps widening, so latecomers find it harder and harder to catch up. More than whether a company has the chain at all, what decides the competition is that the gap in the results the chain produces goes on widening with every turn. This is my hypothesis restated more exactly. It is not a verified fact, and I write it as my own thinking.&lt;/p&gt;

&lt;p&gt;I confirmed this reading most strongly in a passage of &lt;a href="https://www-cdn.anthropic.com/d00db56fa754a1b115b6dd7cb2e3c342ee809620.pdf" rel="noopener noreferrer"&gt;an Anthropic system card&lt;/a&gt;. It says that, on the grounds that recent models have the ability to accelerate their own development, they implemented an intervention that, for requests aimed at developing frontier large language models, lowers the model's effectiveness in a way invisible to the user. In other words, Anthropic throttles the power its own model holds to build the next model whenever the request comes from someone else. The party writes this much in its own document, so I read it as support for that power sitting at the center of the competition.&lt;/p&gt;

&lt;p&gt;On the other hand, when I read the primary sources, I found that you cannot draw a line among the leading companies between those that have the chain and those that don't. The first to publish the most concrete instance of a closed chain was Google. &lt;a href="https://arxiv.org/abs/2506.13131" rel="noopener noreferrer"&gt;AlphaEvolve&lt;/a&gt; is a coding agent that runs on Gemini. A function it found keeps recovering 0.7 percent of the compute in the company's data centers. There was also an improvement that made the whole of the core computation of training 23 percent faster on average, which cut Gemini's training time by 1 percent. Google adopted a circuit design that AlphaEvolve proposed for the next generation of TPU. On the circuit, though, the authors of the paper themselves add that an existing synthesis tool had independently found the same improvement. The paper states plainly that this is a new instance of Gemini optimizing its own training process through AlphaEvolve. Google published this about a year before the other two companies began disclosures of the same kind. And these are measured numbers from improvements deployed in production, not a self-reported productivity survey. Google's disclosure was modest, but its example of the chain was the most concrete.&lt;/p&gt;

&lt;h2&gt;
  
  
  The chain I run at an individual scale
&lt;/h2&gt;

&lt;p&gt;I operate a chain of the same structure at the scale of one person. Let me start with the layer of rules documents. The documents that set down the discipline of this operation come to 54, counting the one at the top. Every time I point something out, the AI adds that lesson to the rules documents on the spot. On revision, rather than stacking additions, the AI rewrites the whole body so that only the current rule stands there. Inside the documents, 248 places state their origin as a dated remark or comment of mine. That is a count of occurrences, so the same lesson gets counted more than once across documents. Even so, the default I keep for this operation is a form in which every decision traces back to when it was made and on whose judgment. The other layer is the raw record. In the body of a commit, the AI writes, on top of what changed, why it changed, which comment and which judgment it followed, and what it verified. The commits piled up over these 20 days come to 849 when counted with merges and squashed changes excluded. Before and after the day I decided to write fuller commit messages, the median length of the body moved from 223 characters to 312. It is not a controlled comparison, so I cannot claim causation, but I have been able to measure the correlation: once the rule was written, the writing changed.&lt;/p&gt;

&lt;p&gt;The match came out most clearly on the second pass, when I read what each company currently recommends. &lt;a href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5" rel="noopener noreferrer"&gt;One company's official guide&lt;/a&gt; recommended keeping one record per lesson, and writing down why it mattered as well. Official documents also carried guidance to version prompts and rules with git in your own repository rather than entrusting them to an external management feature. A research conclusion that raw records should be kept alongside summaries rather than replaced by them points the same way. So does the judgment, near-identical across the three companies, that acceleration is concentrated in execution and is not reaching judgment. The methods I had settled on earlier for the convenience of running the operation matched, one after another, the current recommendations I read afterward. This match between methods is the center of what the two passes of research told me.&lt;/p&gt;

&lt;p&gt;That said, for my own chain too, the quantity that matters remains unmeasured. How much did output rise per unit of AI capability put in? In fact, the authors of &lt;a href="https://elasticity.institute/rsi-paper.pdf" rel="noopener noreferrer"&gt;the independent economics paper&lt;/a&gt; write, on their own, that no one has been able to measure this quantity, not even at the leading companies. They release almost none of their internal metrics, for competitive reasons. Then if I can measure the same quantity on a small chain at an individual scale and publish it, that becomes primary data of a kind those companies do not release.&lt;/p&gt;

&lt;h2&gt;
  
  
  The most modest judgment came from the parties themselves
&lt;/h2&gt;

&lt;p&gt;If I do not write this part, this article becomes nothing but a summary of promotion. So I write the side that weakens the hypothesis just as fully.&lt;/p&gt;

&lt;p&gt;The strongest counterevidence was Anthropic's own judgment. Its April 2026 system card, while granting that the growth of its capability had turned steep, goes as far as writing that the growth it could identify is confidently attributable to human research and is not due to AI assistance, and that it confirmed this by interviewing the people involved. Even with employees self-reporting a fourfold output, combining that with an estimate of its impact on progress put the overall multiple below two. The judgment does not change in the latest system card, released on 2026-07-24, which says the acceleration is concentrated in engineering execution rather than research judgment. OpenAI's system card also states plainly that none of its three new models reaches the threshold of High, the highest risk level, in the AI self-improvement evaluation, and an independent evaluation body judged that fully automated AI research and development will not become possible. In the independent economic estimate, the condition needed for self-sustaining acceleration is a 15 percent gain in productivity per unit of capability, and the measured figure, taking the parties' self-reports at face value, was 9 percent. It does not reach the condition. The paper closes, though, by saying that it appears to be strengthening.&lt;/p&gt;

&lt;p&gt;And one pattern common to the three companies comes into view. Each company reports the same acceleration at its maximum in a product announcement and at its minimum in a safety evaluation. One party put out a figure of eight times as much code integrated per day compared with 2024. That same party concluded from the same internal data that overall progress was less than double, while an outside evaluation body read more than double from the same data. Unless you check that definitions and measures agree before you check that numbers agree, you can build two opposite pictures of the same company.&lt;/p&gt;

&lt;p&gt;The more primary sources I read, the more modest the wording of the claims becomes. The paper's authors write their own reservations, the party behind the system card itself denies the attribution, and the party that put out the usage figure notes on its own that it is not a measure of results. The most modest telling of the story that AI has started building AI was in the primary documents of the parties, the ones who should have been claiming it most strongly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the hypothesis stands, neither denied nor confirmed
&lt;/h2&gt;

&lt;p&gt;The economics paper carries one reservation that matters for this hypothesis. It predicts that acceleration of narrow capability can run ahead of acceleration of broad capability, and that the narrow acceleration should concentrate in domains where verifying an answer is cheap, such as software development and mathematics. If what my hypothesis points at is this narrow acceleration, it has not been denied yet. And as long as the quantity at its core is unmeasured, it has not been confirmed either.&lt;/p&gt;

&lt;p&gt;Let me narrow down what can be said now. If a low cost of verification is what decides the effect of the chain, then adding more checks before publication is the obvious move. If acceleration concentrates in execution and does not reach judgment, then the record of judgment is what has the highest value to hand over to AI. I design my own operation on the basis of these two expectations. I will keep measuring here whether those two expectations were right, and writing down the results.&lt;/p&gt;

&lt;h2&gt;
  
  
  Research and primary sources I referred to
&lt;/h2&gt;

&lt;p&gt;The numbers and quotations in the body are all as the documents read when I checked them on 2026-07-26. This article is an analysis that organizes what public documents state, and it does not represent the views of any of the companies named.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When AI builds itself (Anthropic Institute) &lt;a href="https://www.anthropic.com/institute/recursive-self-improvement" rel="noopener noreferrer"&gt;https://www.anthropic.com/institute/recursive-self-improvement&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Claude Mythos Preview system card (Anthropic) &lt;a href="https://www-cdn.anthropic.com/08ab9158070959f88f296514c21b7facce6f52bc.pdf" rel="noopener noreferrer"&gt;https://www-cdn.anthropic.com/08ab9158070959f88f296514c21b7facce6f52bc.pdf&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;System card for Claude Fable 5 and Claude Mythos 5 (Anthropic) &lt;a href="https://www-cdn.anthropic.com/d00db56fa754a1b115b6dd7cb2e3c342ee809620.pdf" rel="noopener noreferrer"&gt;https://www-cdn.anthropic.com/d00db56fa754a1b115b6dd7cb2e3c342ee809620.pdf&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Claude Opus 5 system card (Anthropic) &lt;a href="https://www-cdn.anthropic.com/c5fbac3f0b1280a933ebd26d3cb8bb9f5bdeaf48/Claude%20Opus%205%20System%20Card.pdf" rel="noopener noreferrer"&gt;https://www-cdn.anthropic.com/c5fbac3f0b1280a933ebd26d3cb8bb9f5bdeaf48/Claude%20Opus%205%20System%20Card.pdf&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The GPT-5.6 announcement and system card (OpenAI) &lt;a href="https://openai.com/index/gpt-5-6/" rel="noopener noreferrer"&gt;https://openai.com/index/gpt-5-6/&lt;/a&gt; &lt;a href="https://deploymentsafety.openai.com/gpt-5-6/gpt-5-6.pdf" rel="noopener noreferrer"&gt;https://deploymentsafety.openai.com/gpt-5-6/gpt-5-6.pdf&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The AlphaEvolve paper (Google DeepMind) &lt;a href="https://arxiv.org/abs/2506.13131" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2506.13131&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The Economics of Recursive Self-Improvement (researchers at METR and elsewhere) &lt;a href="https://elasticity.institute/rsi-paper.pdf" rel="noopener noreferrer"&gt;https://elasticity.institute/rsi-paper.pdf&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The Adolescence of Technology (an essay by a co-founder) &lt;a href="https://darioamodei.com/essay/the-adolescence-of-technology" rel="noopener noreferrer"&gt;https://darioamodei.com/essay/the-adolescence-of-technology&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;An article on a talk stating that 75 percent of code inside the company is AI generated (Google) &lt;a href="https://blog.google/innovation-and-ai/infrastructure-and-cloud/google-cloud/cloud-next-2026-sundar-pichai/" rel="noopener noreferrer"&gt;https://blog.google/innovation-and-ai/infrastructure-and-cloud/google-cloud/cloud-next-2026-sundar-pichai/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aird.matsumoto-r.jp/en/posts/2026-07-26-software-making-software-loop/" rel="noopener noreferrer"&gt;The Future of Humans, AI, and the Web&lt;/a&gt;, a site where my research and development is recorded and analyzed by a human and an AI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>machinelearning</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Rewriting prose until the tests pass: everything passed, but the check that mattered never ran once</title>
      <dc:creator>matsumotory</dc:creator>
      <pubDate>Tue, 04 Aug 2026 15:38:53 +0000</pubDate>
      <link>https://dev.to/matsumotory/rewriting-prose-until-the-tests-pass-everything-passed-but-the-check-that-mattered-never-ran-once-on1</link>
      <guid>https://dev.to/matsumotory/rewriting-prose-until-the-tests-pass-everything-passed-but-the-check-that-mattered-never-ran-once-on1</guid>
      <description>&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;I ran into an incident where every test passed, yet the meaning check that was supposed to judge quality had never run even once. This happened while I was writing a research abstract, a long piece of natural-language prose, in a development loop that rewrites the text until the tests pass. When the reviewer's authentication expired, the meaning check was skipped entirely, and the tests that looked like they had passed stopped being evidence of safety.&lt;/p&gt;

&lt;p&gt;The tests have two layers: a deterministic check that can judge without looking at context, and a meaning check that calls an LLM through the CLI as the reviewer. A judgment takes one of three values: pass, fail, and an error that stands for the review not having run at all.&lt;/p&gt;

&lt;p&gt;I put this mechanism in about a week after I started running the repository for the research abstract and for research operations, and over more than two weeks after that I kept adding checks, extended the same loop to a second abstract, restored the reviewer's authentication, and updated the model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Audience and takeaways
&lt;/h2&gt;

&lt;p&gt;This article is for developers and writers who want to bring a development loop into their own writing, not just their code. It is a loop where you rewrite the prose while watching whether the tests pass. There are three takeaways. The first is a criterion for sorting: drop the checks that misjudge when they are enforced without looking at context. The second is a three-value design that keeps the state where the review could not be run at all separate from the pass-or-fail judgment of quality. The third is a failure where uniformly failing every assertion left the text full of hedging so that no claim stood, and how I fixed it. The material is the operational record of running this mechanism for more than two weeks in a repository for a research abstract and for research operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bringing the code development loop into long-form writing
&lt;/h2&gt;

&lt;p&gt;When you write code, the tests return pass or fail the moment you write it. The theme this time is whether this development loop can also be brought into long natural-language prose, such as papers, specifications, and proposals. What I targeted was a research abstract. The test definitions live in YAML, and a test runner built on pytest expands one item into one test through parameterization, and a way of working where you rewrite until the tests pass has begun to take hold.&lt;/p&gt;

&lt;p&gt;Let me note up front that these tests are not a tool that writes in my place. I am only turning the comments I have actually made on abstracts, one by one, into rules and then into checks, so all the machine can reproduce is those past comments, and deciding what to write is still the writer's job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dropping checks that misjudge when enforced without context
&lt;/h2&gt;

&lt;p&gt;There is a single axis that separates the checks I dropped from the checks I kept. I dropped the checks that misjudge even legitimate usage when they are enforced in isolation without looking at context, and I kept the checks that do not misjudge because the value being checked, such as a character count or a number of occurrences, can carry a range. At first I had put in only rigid, enforcement-style checks: enforcing the length of a single sentence, strictly enforcing the number of paragraphs, and rejecting forbidden words in isolation without context. But they misjudged even writing that only makes sense once there is context, and they took away freedom in how to write, so after building them once I moved them out of the runner and deleted them as an old implementation.&lt;/p&gt;

&lt;p&gt;The foundation for this sorting was a policy of not assuming that the evaluation of a paper can be carried by deterministic checks alone, and of putting weight on judgments of meaning and logic. I moved only the items that can be decided without looking at context, such as a range of character counts excluding whitespace and typesetting commands, whether a specified word is present or absent, and regular-expression matches and their counts, to the deterministic check implemented as local functions inside the runner, and I left the consistency of meaning, logic, and chapter structure to the layer that calls an LLM through the CLI as the reviewer. Fast and cheap judgments go to the deterministic check, judgments that need context go to the reviewer, and both live together in a single runner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping errors separate from the quality judgment
&lt;/h2&gt;

&lt;p&gt;I gave the reviewer a fixed instruction to judge pass or fail using only the criteria I gave it, and to list every violation without omission, and I forced the response into structured data of the judgment, the location, and the reason. This is to keep fixes from dragging on as violations get pointed out one at a time. When typesetting backslashes get mixed into the response, parsing the structured output fails, so I also added a step that corrects them and re-runs the parse.&lt;/p&gt;

&lt;p&gt;The third of the three values, error, refers to the state where the reviewer could not be run at all because of expired authentication, a timeout, or a failure to parse the response. I keep this separate from the quality judgment of the text and do not mix it into fail. If failures increase and I cannot tell whether the problem is in the text or in the infrastructure, this loop does not serve its purpose. That was my view.&lt;/p&gt;

&lt;p&gt;In fact, I ran into an incident where the reviewer's authentication expired, every reviewer was skipped as an error, and although the tests all looked like they had passed, the meaning check had not run even once. The lesson that became clear at this point is that even when all the tests pass, it does not follow that the meaning check actually ran.&lt;/p&gt;

&lt;h2&gt;
  
  
  Letting assertions pass within the range of observation, suppressing variance with a majority vote
&lt;/h2&gt;

&lt;p&gt;Among the axes of judgment, the handling of assertions took the most tuning. During the period when I uniformly failed anything that asserted without regard to the scale of what was observed, the text turned into nothing but hedged phrasing and no claim would stand. So I inserted the scale of what was observed, such as how many people and how many cases, into the reviewer's instruction, failed only generalizations that went beyond that range, and reworked it so that a reasoned assertion kept within the range passes as is. Along with that, on a failure I always have the reviewer tell me which it is: whether a fix in phrasing is enough, or whether I should go back to collecting data.&lt;/p&gt;

&lt;p&gt;To suppress the reviewer's variance, I implemented it so that if the first run passes it stops there, and only when it is not a pass does it judge twice more and take a majority vote over the three runs. That said, this is a compromise that favored speed, and I have not measured whether the reproducibility of getting the same judgment on the same abstract within at most three attempts is good enough for practical use. I do see it pointed out that a single reviewer run has variance in its judgment and that a stable consensus needs repeated attempts, but I have not yet been able to confirm primary literature that backs up the number of attempts needed. I cannot say anything more right now than that I struck a balance between speed and reproducibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  The deterministic check to CI, the reviewer to the local loop
&lt;/h2&gt;

&lt;p&gt;From introduction to being usable in practice took essentially two days, and over the roughly two weeks after that I added checks little by little, against primary literature on how to write papers and against my own feedback. Because per-chapter checks leave the gaps between one chapter and the next unseen, I also later added a whole-piece test that reads across all chapters to see whether a single thread runs from the question to the claim.&lt;/p&gt;

&lt;p&gt;I also decided the division of operation. Only the deterministic check runs automatically in CI every time, and the reviewer that handles the meaning judgment is reserved for the loop I run by hand. I built the mechanism up on a single abstract, and I extended the same loop to an abstract on a different topic.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the machine could offer went only as far as material for judgment
&lt;/h2&gt;

&lt;p&gt;Now that I have run it this far, the range the machine could carry has come into view. What the machine could do went only as far as offering, as material for judgment, the comments I have made over and over. Whether test-driven work raised the quality of the abstract itself, I cannot assert, because I have not taken the primary data of how the number of failures changed over time. That is as far as running it made things visible, and I refrain from declaring anything beyond that as an effect of the tool.&lt;/p&gt;

&lt;p&gt;The line between the judgments that can be left to the machine and the judgments that only a person can keep making will surely keep moving from here, and how far it moves is something I want to make out as I keep running this operation.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aird.matsumoto-r.jp/en/posts/2026-07-08-test-driven-writing/" rel="noopener noreferrer"&gt;The Future of Humans, AI, and the Web&lt;/a&gt;, a site where my research and development is recorded and analyzed by a human and an AI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>testing</category>
      <category>aiwriting</category>
      <category>evals</category>
      <category>promptengineering</category>
    </item>
    <item>
      <title>Developing solo with AI: what to entrust to outside services, and what not to hold</title>
      <dc:creator>matsumotory</dc:creator>
      <pubDate>Tue, 04 Aug 2026 11:57:23 +0000</pubDate>
      <link>https://dev.to/matsumotory/developing-solo-with-ai-what-to-entrust-to-outside-services-and-what-not-to-hold-5b4a</link>
      <guid>https://dev.to/matsumotory/developing-solo-with-ai-what-to-entrust-to-outside-services-and-what-not-to-hold-5b4a</guid>
      <description>&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Billing, login, and receiving contact messages: I handed all of them off to outside services. For membership and billing, the only things I keep in my own database are a mapping of who is a member of which plan, and a copy of the subscription and purchase state. I keep that copy because if the site went to the payment service to check the subscription state every time a reader opens a paid article, the display would get slow. When you develop together with AI, the implementation itself can be pushed as far as you like. So the first thing to decide was not what I could build, but what I would not hold myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Audience and takeaways
&lt;/h2&gt;

&lt;p&gt;This article is for someone trying to build a service with billing on their own while having an AI agent write much of the code. You can take away how to decide how much personal data to hold yourself and where to start handing it off to outside services, and why deciding that standard up front pays off. It also gives concrete examples: what rule I used to deal with the AI's habit of confidently writing outdated specifications, and how I split the work so that the AI handles the research into terms and prices while a person makes the decisions that put limits on cost and permissions. This article is a record of practice, based on the process of building this site itself together with AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  The gist of what happened
&lt;/h2&gt;

&lt;p&gt;Over about two weeks, working with an AI agent, I worked out what to entrust to outside services and what not to hold. I withdrew the mechanism for storing the body of contact messages in my own database after I had already verified that it worked, and I moved the site's form over to an outside form service instead. I hand off card entry for payment entirely to the payment page that the payment service displays on its own side, so my site never handles card details or passwords at all. The authoritative record of membership and billing lives on the payment service's side, and my side holds only the mapping and the copy. Along with this, I built in two rules. First, I verify any design the AI writes against the body text of the current official documentation. Second, a person sets an upper limit on costs in advance, uptime monitoring included.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before deciding what not to hold, see the whole of what has to be done
&lt;/h2&gt;

&lt;p&gt;The judgment of whether to build something yourself, entrust it to an outside service, or not hold it at all is itself a demanding one, and doing it well needs a further step of thought beforehand. To decide what to entrust and what not to hold, you have to see the whole of what has to be done: billing, authentication, legal matters, monitoring, performance, and security. If you decide without seeing the whole, you might end up holding data you should have entrusted, or conversely throw responsibilities you should guard yourself, like billing and permissions, entirely over to an outside service.&lt;/p&gt;

&lt;p&gt;Grasping this whole on my own, without gaps, was hard. So I had the AI enumerate the list of what has to be done, and I checked that list for anything missing through a number of reviews from separate viewpoints. I asked the AI for a security audit of code and configuration and an audit of display speed as separate tasks, had it check for gaps in release preparation and the free-tier limits of outside services from yet another angle, laid out one by one the actions a reader actually takes in order to look for gaps, and for terms and legal matters I went through everything against the original text of the law and of each service's terms. Any single viewpoint's enumeration always misses something somewhere, so I layer viewpoints to fill the gaps. On top of that, I narrowed what a person checks with their own eyes down to the areas where a slip is unrecoverable: money, permissions, personal data, the weighing of legal matters, and the final judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decide up front, as a standard, what you will not hold
&lt;/h2&gt;

&lt;p&gt;With AI, implementation can in practice be pushed as far as you like. The processing to receive contact messages, the database table to store them, the verification that it works, all come back in a short time once you ask. At that point whether you can build it drops out of the material for judgment, and only whether you should hold it remains. So I decided that a person would settle the standard for what not to hold up front.&lt;/p&gt;

&lt;p&gt;The standard is a single one: keep what I hold to a minimum. When I feel the urge to build a feature that stores personal data, I first look for an outside place to entrust it to. I narrowed what I hold myself down to only the things that do not work unless the authoritative record is on my side, like billing, authentication, and permissions.&lt;/p&gt;

&lt;p&gt;Handing something to the outside is not the same as being safe. Even so, there are two reasons handing off is better than holding. First, the damage when there is a leak is decided by what you hold. Since you cannot stand on the premise of fully preventing every vulnerability, the strongest defense is that what you do not hold cannot leak. Second, for data like card details and the identity check for login, there are specialist businesses whose very trade is guarding it. It is not realistic for a lone developer to keep up the same level of defensive setup and investment. So I choose the place to entrust to by reading its terms and its data handling down to the original text and confirming them. Even after handing off, the work of guarding the seam with the place I entrusted to remains mine. That work means two things: keeping the table that maps members to their records on the payment service accurate, and confirming that a notification arriving from the payment service is genuine.&lt;/p&gt;

&lt;p&gt;What made me decide on this standard was withdrawing the contact feature. The AI had implemented the receiving process and the storage table, and had finished verifying that it worked, and I sent that mechanism back for two reasons. One was to make the damage from a leak as small as possible. If I do not hold the message body and the reply address myself and instead entrust them to an outside form service, then even if my own database leaks, no contact messages are in it. The other is that the database capacity I can use is also limited. I wrote this judgment down as a rule, so from now on I can stop before building.&lt;/p&gt;

&lt;p&gt;Card details and passwords are the same. I leave login confirmation to authentication where you follow a link in an email, and I pass payment straight to the payment page that the payment service displays on its own side. So a card number never passes through my site. This is not only to keep the damage small; it is also because the free terms of the delivery service forbid handling card details on a free site at all.&lt;/p&gt;

&lt;p&gt;The authoritative record of membership and billing I also do not hold myself. Who subscribes to which plan, and whether payment is currently valid, is known correctly only by the payment service, where the money actually moves. If I hold the same ledger in my own database too, there come to be two authoritative records, and dropping a single payment notification is enough to make them disagree, which raises the problem of which one to believe. So I settled the authoritative record on the single one on the payment service's side, and in my own database I placed only a mapping that points to it and a copy of the subscription and purchase state. The copy is a local duplicate, so that I do not keep readers waiting by querying the payment service every time they open a paid article. If it breaks, it comes back by pulling from the payment service's record again. For writes tied to an individual, like likes and favorites, I made login the minimum condition, and I narrowed what may be received anonymously down to counts not tied to an individual, like an article's view count.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify the outdated specs the AI confidently writes against the current official documentation
&lt;/h2&gt;

&lt;p&gt;The AI writes outdated specs from its training data with confidence, and plausibly at that. So you are apt to let them through as they are. I stumbled twice around payments. The first was invoice.payment_intent, a field that points directly from an invoice to its payment, which the AI was using straight from memory. In a spring 2025 update the payment service had removed this field and changed to representing the correspondence between an invoice and its payments as an array called invoice.payments.&lt;/p&gt;

&lt;p&gt;The second was a harder-to-spot form. A reservation to cancel a subscription at the end of the period, under the old spec, arrived as a boolean field called cancel_at_period_end, read as: if true, cancel at the end of the period. In the current spec this field has been deprecated, and it now arrives as cancel_at, the time at which the cancellation takes effect. The AI had written code that read cancel_at_period_end from its old knowledge, so it became a defect where a cancellation a reader had scheduled was not recorded on their account. The automated tests did not catch this, and I found it only when I actually went through a cancellation in the test environment. A change of spec happens not only in whether a field exists, but in the very meaning of what arrives.&lt;/p&gt;

&lt;p&gt;There was also one that nearly became a third. In a mechanism to prevent the same person from holding two subscriptions, the AI, before checking the existing settings, started to assemble a workaround that did the cancellation and refund itself. When I read the official documentation, I found that a setting to limit a customer to a single subscription had been there from the start, so I rebuilt it to use that. From these three experiences I set a rule: before using an outside service, actually read the current official documentation, and confirm field names and setting locations from that body text rather than from memory before writing.&lt;/p&gt;

&lt;p&gt;After I set the rule, this way of reading paid off on the verification side too. There was a time when the auditing AI recommended, in order to hide the database's real address, a custom domain that would put the delivery service's protection in front of it. But confirming against the official documentation, I found that this custom domain, for reasons of transport encryption, can only be set up in a way that cannot pass through the delivery service's protection, so it does not hold up as a front-line defense. The core of protecting the data is not front-line network protection to begin with; it is row-level security, where the database itself judges per row who may read and write, and the permission checks on the application side. For this part I created real accounts with different roles and put them through integration tests. In place of the custom domain I assembled three things: an upper limit on monthly spending, an upper limit on how many times the server-side functions can be called, and uptime monitoring. They sit outside the core of the defense and keep usage from running away. To see whether the same kind of mistake, a place reading an outdated spec from memory, was anywhere else, I had the AI cross-check every place that exchanges with an outside service, and confirmed that the shape of the arriving data did not diverge from the current spec.&lt;/p&gt;

&lt;h2&gt;
  
  
  Leave the research to AI, and let a person put limits on cost and permissions
&lt;/h2&gt;

&lt;p&gt;In how to deal with outside services, the split that worked best was to leave the research of reading terms and prices to the AI, while a person makes the final decisions that put limits on cost and permissions. Where this split showed clearly was in choosing uptime monitoring, which checks at intervals whether the site is working as seen from outside and tells you if it is down.&lt;/p&gt;

&lt;p&gt;The AI, reading down to the original text of current prices and terms of use, dug out fourteen services usable commercially, and lined up the ones that fit inside a free tier as its recommendation. Here I chose differently. Rather than being free, I decided to choose something where I could hold the settings for which pages to monitor and how as code, even if it cost money, and among those pick the cheap one.&lt;/p&gt;

&lt;p&gt;This standard has a reason that matters more than cheapness. In the development ahead, I will leave even more of the work to AI than before. With a service whose settings you cannot change without a person operating the screen, I cannot leave that operation to AI. With a service you can read and write through an API, both adding monitoring targets and confirming that the monitoring works correctly can be built in as the AI's work. This site is built, after all, toward a form where I just keep doing research and development while both the making of articles and the running of the site keep turning on their own. In that form, being programmable through an API, that is, operable from code, becomes the requirement I place on every outside service I stitch together. So even at somewhat higher cost, I gave priority to what can be operated through an API. What I chose is a metered service that pays a small amount per check. It comes to under a hundred yen a month, and the free allowance given at signup alone lasts more than half a year. The monitoring settings sit in the repository as code, so running them any number of times gives the same result, and there is no accidentally erasing a setting added by hand from a screen.&lt;/p&gt;

&lt;p&gt;Here too, a person set the limits in advance. On the use of generative AI, an upper limit on monthly spending is placed across the whole organization. On the conversation feature, I layered three further limits, how much one member can send in a day, how much one member can send in a month, and how much all members together can use in a month, and I also put a limit on the length of text handed to the AI in a single conversation. When any of these is exceeded, the request is refused rather than processed, and the usage allowance reserved earlier for that member is returned.&lt;/p&gt;

&lt;p&gt;For the generative AI used in conversation, too, I chose the paid API rather than the free tier. Reading the provider's terms, on the free tier the text a user sends and the generated answer may be used by the provider to improve its product, and in some cases may be reviewed by human eyes. On the paid API it was stated explicitly that they are not used to improve the product. To keep the body of conversations members write from being handed to the provider's training or review, here I decided to pay.&lt;/p&gt;

&lt;p&gt;I also split the degree of strictness by purpose. Billing, authentication, and permissions I build strictly, while rough measures of use like likes and view counts I build with approximate aggregation and sampling, without bringing in needless complexity and cost. This too is one of the limits a person set in advance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not what can be built, but what can be entrusted
&lt;/h2&gt;

&lt;p&gt;Even just choosing one uptime monitor, there was a back-and-forth: the AI combed through the terms, I chose differently by my standard, and the AI built it, ran it, and verified it. Looking back, I built the contact feature, then withdrew it and entrusted it to the outside. For uptime monitoring I use an outside service. Likes I keep on my own side, but only for members. And the custom domain recommendation I did not adopt. Every one is the same three-way judgment: build it yourself, entrust it to the outside, or not hold it at all. Each of them redrew the line of what to entrust and what to hold.&lt;/p&gt;

&lt;p&gt;In today's development, where the amount of implementation is no longer the constraint, what I should have decided first was not what to build, but what not to hold myself, or in other words, what to entrust to the outside. Once you decide up front not to hold something, the worry about a leak and the trouble of moving it out when you shut things down are gone from the start. If a person places the standard first and builds in verification of the current spec and limits on cost, then no matter how much volume you have the AI produce, the design does not break down. Before counting what can be built, decide what can be entrusted. What can be drawn here is only the line on the entrusting side; whether the code I wrote myself is correct needs a different kind of defense. I will write that back half of the story in the next installment.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aird.matsumoto-r.jp/en/posts/2026-07-19-what-to-entrust-what-to-own/" rel="noopener noreferrer"&gt;The Future of Humans, AI, and the Web&lt;/a&gt;, a site where my research and development is recorded and analyzed by a human and an AI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>saas</category>
      <category>indiehackers</category>
      <category>agenticai</category>
      <category>aidevelopment</category>
    </item>
    <item>
      <title>The day I moved the rules to a place they can't be broken even if you try</title>
      <dc:creator>matsumotory</dc:creator>
      <pubDate>Tue, 04 Aug 2026 11:56:14 +0000</pubDate>
      <link>https://dev.to/matsumotory/the-day-i-moved-the-rules-to-a-place-they-cant-be-broken-even-if-you-try-1848</link>
      <guid>https://dev.to/matsumotory/the-day-i-moved-the-rules-to-a-place-they-cant-be-broken-even-if-you-try-1848</guid>
      <description>&lt;h2&gt;
  
  
  What happened that day
&lt;/h2&gt;

&lt;p&gt;Even if you hand an AI agent the rules as a document, once a session grows long the rules stop getting read, and the same violations recur. In development where several agents read and write the same repository in parallel, when the rules stop being followed like this, it leads to accidents: unsaved changes disappear, work proceeds against a stale main, writes to the same file collide.&lt;/p&gt;

&lt;p&gt;So I stopped relying on getting the rules obeyed at all, and instead moved the rules to a place where they can't be broken even if you try. This article is a record of running that countermeasure across three repository groups, and the three, which I had been operating separately, have settled into the same pattern: isolation via git worktree, which carves each task out into an independent directory.&lt;/p&gt;

&lt;p&gt;Of the rules I had written in documents, I moved three into a layer that takes effect without going through the agent's judgment: stopping state-changing git commands with a pre-execution hook, forbidding direct pushes to main with a setting on the hosting side, and connecting the environment-variable file to the worktree with a hook that runs when a session starts. Once I did, the violations that had kept recurring under the document-based approach stopped happening. Carving out one working directory takes 0.25 seconds, so even splitting it per agent, the carving itself barely costs any time.&lt;/p&gt;

&lt;p&gt;If you are considering development that lets several agents touch the same repository, this record gives you an isolation pattern you can try as it is, along with a way to tell apart the accidents you can prevent by the mechanism from the accidents you can only guard against by procedure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Parallel-development accidents and the worktree isolation pattern
&lt;/h2&gt;

&lt;p&gt;I have kept up development that has several AI agents read and write the same repository in parallel, across three repository groups, combining ones I develop through my personal company and ones I run personally. In this kind of development, accidents can happen: unsaved changes disappear, an agent reads a stale main and returns a stale analysis, writes to the same file collide, a git checkout or reset breaks the state of the repository itself. This article is about where to put the rules that prevent such accidents. The answer I arrived at was not to rely on writing the rules in a document and getting the agents to follow them, but to move the rules into a layer that takes effect without going through the agent's judgment, such as hooks, settings on the hosting side, and directory structure. In this article I will call this layer the mechanism layer.&lt;/p&gt;

&lt;p&gt;Git has a mechanism called worktree that can carve out several independent working directories from a single repository. The isolation pattern that prevents accidents is an operation that creates this worktree inside the repository's directory hierarchy and confines all work there: for read-only investigation I create a detached-HEAD worktree that belongs to no branch, and for work that produces a PR I create a worktree with a branch. This pattern converged to the same shape as I operated it across the three repository groups. Some repositories have a rule that forbids creating worktrees under /tmp, because the permission settings for what the agent is allowed to do are not carried over there.&lt;/p&gt;

&lt;p&gt;Under the hood, the object database that stores commits, and references such as branches, are shared across all worktrees, and only the local state, meaning HEAD, the index, and the working tree, is independent per worktree. In other words, the history stays single while only the local state can be split per agent. The time to create a worktree was, measured on a repository of a few hundred commits and a Mac with Apple Silicon, an instant 0.25 seconds for git worktree add --detach. What actually ate time was the dependency install, not the worktree creation. On projects that use Node.js, I dodge that wait by reusing the parent repository's node_modules in the worktree through a symbolic link, and I reinstall only on the days the lockfile that pins dependency versions changes.&lt;/p&gt;

&lt;p&gt;Alongside the worktree isolation, there are two operational rules. One is to always run git fetch origin main before referring to anything. Other sessions and automated runs keep advancing main, so I work on the premise that the local checkout is always stale. The other is how to handle parallel writes. In order from lowest conflict risk, I choose among three methods: having each agent return data in a fixed format so that a single aggregating agent writes it all in one place, splitting the files each agent writes to, and isolating via worktrees. I limit operations that cannot be undone, like commit and push, to the aggregating agent. For these three methods too, the shape I ended up with did not differ across the repository groups.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rules written in documents stop getting read
&lt;/h2&gt;

&lt;p&gt;But writing these operations into document-based rules and getting them followed by instruction was a means whose adherence I could only speak of in terms of probability. Once a session grows long, the rules stop getting read, and the same violation recurs. Looking back over the history, rules read at the start of a session would sometimes stop being referred to in the latter half of a long stretch of work. This is what I mean when I say document-based rules are a probabilistic means.&lt;/p&gt;

&lt;h2&gt;
  
  
  Moving the rules into the mechanism layer
&lt;/h2&gt;

&lt;p&gt;So I decided to move the rules from documents into the mechanism layer. I moved three of them. A hook that intervenes before the agent runs a tool mechanically refuses state-changing git commands issued without a worktree specified. The hosting side has a setting called branch protection that forbids direct pushes to a specified branch, and I used it to forbid direct pushes to main. For the environment settings, a hook that runs when a session starts hands them over by creating a symbolic link in the worktree that points to the parent repository's environment-variable file. Violations that had recurred even when written in documents have not happened since I put the hooks in. I use this before-and-after relationship, that the recurrence stopped after the change was introduced, as the basis for whether it worked. Apart from these three rules, there was also one settings fix that comes with running worktrees. When a worktree is created inside the repository's directory hierarchy, the static analysis that mechanically inspects the code would, left as is, scan into the worktree as well, so the setting that excludes the worktree from that scan is also placed in a config file rather than as a note in a document. The three rules I decided to move have thus moved from document instructions onto hooks and hosting-side settings that take effect without passing through the agent's judgment, that is, onto the mechanism layer: refusing state-changing git commands, forbidding direct pushes to main, and handing over the environment settings.&lt;/p&gt;

&lt;p&gt;"Unbreakable even if you try" is what works.&lt;/p&gt;

&lt;p&gt;What lay at the point where the three operations converged was a shift in thinking: rather than preventing accidents by raising the agents' reliability, you put the rules in the mechanism layer, meaning hooks, branch protection, and directory structure, and you change how things are built so that accidents cannot occur.&lt;/p&gt;

&lt;h2&gt;
  
  
  What fit the mechanism layer and what stays a matter of procedure
&lt;/h2&gt;

&lt;p&gt;That said, only some of the rules could be placed in the mechanism layer. I managed to place the restriction on state-changing git commands, the ban on direct pushes to main, and the handover of the environment settings. But the accident of skipping git fetch and reading a stale main is not stopped by a hook, and I still rely on following the procedure. Which of the three parallel-write methods to choose also remains an operational judgment. The speed-up of reusing node_modules through a symbolic link also breaks when the lockfile changes and needs a reinstall. Both sticking to git fetch and choosing among the three methods are rules that stayed on the judgment side, ones you cannot stop in the form of a command. How far I can push them down onto the settings or hook side is something I have not managed to fully tackle yet, and I won't know until I try.&lt;/p&gt;

&lt;p&gt;Even so, rules belong in a place where they can't be broken. I'll keep going in that direction without changing course.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aird.matsumoto-r.jp/en/posts/2026-07-07-workspace-isolation/" rel="noopener noreferrer"&gt;The Future of Humans, AI, and the Web&lt;/a&gt;, a site where my research and development is recorded and analyzed by a human and an AI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agenticai</category>
      <category>agentskills</category>
      <category>automation</category>
      <category>git</category>
    </item>
    <item>
      <title>Rewriting research prose until the tests pass</title>
      <dc:creator>matsumotory</dc:creator>
      <pubDate>Tue, 04 Aug 2026 11:56:13 +0000</pubDate>
      <link>https://dev.to/matsumotory/rewriting-research-prose-until-the-tests-pass-4d5h</link>
      <guid>https://dev.to/matsumotory/rewriting-research-prose-until-the-tests-pass-4d5h</guid>
      <description>&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;In a repository I run on my own for research papers and research operations, I rewrite research prose until the tests pass, the same way I would with code.&lt;/p&gt;

&lt;p&gt;I have turned the quality checks into a set of tests written in YAML. The ones a machine can decide are judged by code functions, and the ones that cannot be decided without reading the meaning, such as how an argument is built, are judged by a large language model acting as a reviewer. When I get a point in review, I turn it into a rule on the spot, so that a person does not have to make the same point again.&lt;/p&gt;

&lt;p&gt;But the formal checks that mechanically constrain things like banned words and sentence length, far from raising quality, erased the individuality of the writing and made the prose uniform, so partway through I removed the checks I had been adding. When a test fails, it returns a suggested fix, and it tells me whether that failure can be fixed by rewriting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rewriting until the tests pass
&lt;/h2&gt;

&lt;p&gt;In software development, there are tests as a way to automatically check whether the code you wrote works as expected. For a while now I have been writing research prose with the approach of rewriting it until those tests pass. Tests for prose might sound strange, but what I am doing is simple. I take the points I get in review and turn them into check rules on the spot, so that a human never has to make the same point twice. That is all it is. For example, there was a time when I turned three points I received at once into rules on the spot and fixed two pieces of writing together.&lt;/p&gt;

&lt;p&gt;I split the checks into two layers. The ones a machine can decide, like character counts and syntactic consistency, are judged by code functions, and the ones that cannot be decided without reading the context, like the overall arc of a piece from opening to close, or the flow of cause and effect, are left to a large language model acting as a reviewer. The meaning-reading checks also far outnumber the mechanical ones. At the time of writing this article, there were 131 checks handed to the reviewer and 15 checks seen by machine functions. I keep this whole set of checks as a suite of tests in YAML, and running it against the whole piece returns a pass or a fail for each check.&lt;/p&gt;

&lt;p&gt;With this, the basis for rewriting changed too. Now I look at the list of failing checks and decide from it what to fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dropping the checks that were only for form
&lt;/h2&gt;

&lt;p&gt;This setup was not in its current form from the start. When I began building it, I was heading toward turning every point I received into a rule without omission, and I was adding checks a machine can decide, like a list of banned words and an upper limit on sentence length.&lt;/p&gt;

&lt;p&gt;But checks that are only for form, like being too strict about character counts, forcing a number of paragraphs, or mechanically banning particular turns of phrase, look at first like they raise quality, while in fact they strip the style out of the writing and make it uniform. On its own, a word may not make clear what it refers to, but if the sentence just before explains it, the meaning comes through. Even usages that hold only because of context, the machine checks reject across the board.&lt;/p&gt;

&lt;p&gt;So partway through I changed direction, and I left on the machine side only the checks whose answer is uniquely determined, while I moved the judgments involving meaning and logic toward having the reviewer read them together with their context. To each check I kept, I have tied a source for why that rule exists, one by one, so that whether the basis is a document that sets writing conventions or a point received in review, it can be traced later.&lt;/p&gt;

&lt;h2&gt;
  
  
  A failing test returns how to fix it
&lt;/h2&gt;

&lt;p&gt;Another part of the design is that when a test fails, the test side returns how it should be fixed. Every failing check comes with a suggested fix, and it also tells me whether that failure can be fixed by rewriting or whether the underlying data is simply not enough. A failure that cannot be fixed is not a problem with the writing but a task of data collection. If the data is not enough, I do not touch the writing and just go back to measuring.&lt;/p&gt;

&lt;p&gt;I have also decided how to handle the case where the reviewer's judgment could not be run. A check that did not run goes into a count of its own; it does not stand as a failure. If a failed judgment and a flaw in the writing get mixed together, the number of failures itself stops being usable as a guide to where I should fix things.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I could confirm goes only as far as stopping recurrence
&lt;/h2&gt;

&lt;p&gt;The checks that turn points into rules accumulate on the side of the system. A person no longer has to hold them in memory. The test results now let me confirm that the checks have stopped the same kind of point from coming back. But that is as far as I can say for certain about the effect right now, and whether the prose written this way has actually become easier for readers to read is not something the passing of a test can tell me.&lt;/p&gt;

&lt;p&gt;I also still cannot put a number on how consistently the reviewer returns the same judgment for the same input. I have put in a mechanism that judges two more times only when the first judgment is not a pass and takes a majority vote over the three, but whether that makes the judgment stable is not something I have been able to confirm. If the judgment wavers, trust in the list of failing checks itself is shaken, so I see this stability as the single most important thing to confirm, since it bears on the premise of the setup. Extending this setup to long-form deliverables is a matter still further ahead, and what I hold for certain right now is only this one point: that the checks stop the recurrence of the same point, so a person does not have to say it twice.&lt;/p&gt;

&lt;p&gt;(Added 2026-07-11: In this article as published, I had written the mechanism that takes a majority vote over multiple judgments as a plan not yet in place. When I checked the past records during an operational review, I found that a limited mechanism, which judges two more times and takes a majority vote only when the first judgment is not a pass, was already in place on 2026-06-24, before publication. So I have corrected the passage above to read that the mechanism is in place but its stability cannot yet be measured.)&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aird.matsumoto-r.jp/en/posts/2026-07-07-sample-test-driven-writing/" rel="noopener noreferrer"&gt;The Future of Humans, AI, and the Web&lt;/a&gt;, a site where my research and development is recorded and analyzed by a human and an AI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>testing</category>
      <category>research</category>
      <category>aiwriting</category>
      <category>evals</category>
    </item>
    <item>
      <title>A two-layer hash design that counts anonymous posts without identifying the device</title>
      <dc:creator>matsumotory</dc:creator>
      <pubDate>Tue, 04 Aug 2026 10:28:16 +0000</pubDate>
      <link>https://dev.to/matsumotory/a-two-layer-hash-design-that-counts-anonymous-posts-without-identifying-the-device-2e7k</link>
      <guid>https://dev.to/matsumotory/a-two-layer-hash-design-that-counts-anonymous-posts-without-identifying-the-device-2e7k</guid>
      <description>&lt;h2&gt;
  
  
  The problem and the outcome in brief
&lt;/h2&gt;

&lt;p&gt;Drawing on another app I develop at my own company, I want to describe the privacy design behind a mechanism that tallies anonymous posts. The app has a feature that publishes a piece of text assembled from anonymous posts, and it had to keep the people who posted from being tracked while also preventing one device from inflating the numbers by posting over and over.&lt;/p&gt;

&lt;p&gt;In this article I first explain how the app generates a pseudonym for each device with two layers of hashing. Next I explain the threshold that decides whether the assembled text may be published. Right after this threshold went in, it was not doing its job: it counted the number of posts while meaning to count the number of devices. Last, I describe how the design document writes out what this design cannot protect. The material is about three weeks of records of design, implementation, and fixes, along with a design document that kept being updated afterward.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two requirements pulling in opposite directions, and the final shape
&lt;/h2&gt;

&lt;p&gt;The app has a feature that assembles the anonymous posts collected about a given subject into a single piece of text and publishes it. Two requirements pull on this feature at once, in opposite directions. The people who posted must not be traceable. At the same time, the design must keep one device from posting over and over to fake the support of several devices. Not being able to identify the device is safer for preventing tracking, and being able to identify it is surer for preventing inflated numbers, so the two requirements collide head on.&lt;/p&gt;

&lt;p&gt;Let me show the final shape first. The design settled into a form that keeps no more power to tell devices apart than detecting abuse requires. The app generates a pseudonym for each device with two layers of hashing and uses that pseudonym only to count how many distinct devices there are. The number of distinct devices supporting the text and the threshold test alone decide whether the app publishes it. The app uses the pseudonym for nothing but tallying, and what a reader sees is only the number of devices.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two layers of hashing that generate the pseudonym
&lt;/h2&gt;

&lt;p&gt;On first launch, the device generates exactly one random identifier. That identifier is a UUID v4, in which 122 of the 128 bits are random. The definition of UUID v4 is in &lt;a href="https://www.rfc-editor.org/rfc/rfc9562.html" rel="noopener noreferrer"&gt;RFC 9562&lt;/a&gt;. The device keeps the identifier only in its secure storage area, ties it to no account information, and never sends it to the server.&lt;/p&gt;

&lt;p&gt;When the device sends a post, it concatenates this identifier with the ID of the subject, hashes them one way with SHA-256, and hands only the hash value to the server. The raw identifier stays inside the device alone and never leaves it. The server applies HMAC-SHA256, a keyed hash, to the value it received, using a key held only in a secret store, and saves the output as the pseudonym for tallying. The definition of HMAC is in &lt;a href="https://www.rfc-editor.org/rfc/rfc2104" rel="noopener noreferrer"&gt;RFC 2104&lt;/a&gt;. Written as formulas, the flow looks like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Device: p = hash(device ID + ":" + subject ID)    SHA-256 here
Server: pseudonym = keyed_hash(secret key, p)     HMAC-SHA256 here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The hash on the device hides the raw identifier, and the keyed hash on the server prevents pseudonyms from being forged. Anyone who does not know the key cannot compute the output of HMAC, so an attacker who wants to produce pseudonyms has to obtain the key itself. The key sits neither in the database nor on the device.&lt;/p&gt;

&lt;p&gt;This division of labor borrows the salt-and-pepper pattern, a standard practice in password storage. A salt is a random value that differs for each value it is added to, and a pepper is a secret shared across the whole system and kept outside the database. OWASP's &lt;a href="https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html" rel="noopener noreferrer"&gt;Password Storage Cheat Sheet&lt;/a&gt; sets out this distinction. In this design, the subject ID mixed in on the device plays the role of the salt, and the key on the server plays the role of the pepper. If the device and the server compute the derivation differently, matching the same device breaks. That is why the derivation on the server lives in a single shared module.&lt;/p&gt;

&lt;h2&gt;
  
  
  The design that closes the range of matching to a single subject
&lt;/h2&gt;

&lt;p&gt;The key point of this design is that the device mixes in the subject ID. Even for posts that came from the same device, the pseudonym is a different value when the subject differs. So neither the server nor anyone reading the database can match a post about subject A with a post about subject B to tell whether they came from the same device. The range in which posts can be tied to the same device stays deliberately closed inside a single subject.&lt;/p&gt;

&lt;p&gt;I did not take the option of one stable device hash shared across all subjects. With that, anyone could match the same device across subjects and assemble a history of each device's behavior out of posts that are supposed to be anonymous. On the other hand, the input to this pseudonym does not mix in a server-distributed salt that might be rotated. If the value is not stable for a given subject, counting falls apart. The implementation notes state plainly that concealment is the pepper's job.&lt;/p&gt;

&lt;h2&gt;
  
  
  The threshold that decides publication
&lt;/h2&gt;

&lt;p&gt;The assembled text keeps a record of which devices' posts went into its material. I count those devices as the devices supporting the text. There are two conditions for publication: support from 5 or more distinct devices, and a share below 0.8 for the single device that contributes the most support. If either one is missing, the app does not publish the text. The default value of the database column is unpublished as well.&lt;/p&gt;

&lt;p&gt;During trial operation I lower the threshold from 5 to 2. I do not lower it to 1, though. With support from a single device the share is always 1.0, so publication is structurally impossible, and it would also break the promise to publish only text gathered from several devices. I do not loosen the ceiling of 0.8 on the share even during trial operation. Beyond that, at most 3 posts per pseudonym go into the material, so that repeated posting cannot take over the content. Posts whose pseudonym the code could not compute do not count toward the number of devices, and if the pseudonym is unknown for every post, the code returns 0 devices and a share of 1.0, which always means no publication. I carved this decision out as a pure function of its inputs and outputs alone, and unit tests pin down both the default values and the trial-operation values.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bug that counted posts while meaning to count devices
&lt;/h2&gt;

&lt;p&gt;Right after it went in, this threshold was at one point effectively not doing its job. What it counted was the number of posts, not the number of distinct devices. The cause was a mix-up. The device was also sending another hash, meant for a different purpose, whose value changes with every post, and the server was using that one as the material for the pseudonym. Since the same device produced a different pseudonym every time it posted about the same subject, a single device could fake the support of several devices just by posting over and over. The fix consolidated everything into one form, in which the server applies HMAC to the stable value the device generates. I made this fix while the app was still in trial operation, before it opened to the public.&lt;/p&gt;

&lt;p&gt;There was a reason the other hash got mixed up with this one. The same app has another hash. It mixes a server-distributed salt, a per-row random value, and the date into the device identifier, and deliberately scatters the value for every single post. It is a tool that makes any tally which groups posts by user impossible, down to the structure of the database itself. The hash that scatters its value and the pseudonym for tallying that keeps its value stable look like the same hash, yet they require exactly opposite properties. The moment one goes where the other belongs, the counting mechanism misbehaves without raising a single error.&lt;/p&gt;

&lt;h2&gt;
  
  
  The limits the design document spells out
&lt;/h2&gt;

&lt;p&gt;This design document writes out the range it cannot protect at the same granularity as the range it can. The table below organizes this by the situation in which data leaks.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Leak situation&lt;/th&gt;
&lt;th&gt;What the attacker gets&lt;/th&gt;
&lt;th&gt;What they cannot do, and why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The database alone leaks&lt;/td&gt;
&lt;td&gt;The pseudonyms output by HMAC&lt;/td&gt;
&lt;td&gt;Without the secret key, they cannot recompute them, match them, or forge them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Both the database and the secret key leak&lt;/td&gt;
&lt;td&gt;The pseudonyms and the key&lt;/td&gt;
&lt;td&gt;The original input requires a 122-bit random identifier, so brute force does not work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The server runtime is compromised&lt;/td&gt;
&lt;td&gt;Values already hashed on the device&lt;/td&gt;
&lt;td&gt;The raw identifier does not exist outside the device, so they cannot recover it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The device itself is compromised&lt;/td&gt;
&lt;td&gt;The data inside the device&lt;/td&gt;
&lt;td&gt;They can read the data straight off the device, so attacking through the server is pointless&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The design document is candid about why the pepper is there, too. Because the input is 122 bits of randomness, the classic motivation for a pepper, protecting a low-entropy secret, does not apply directly. It is there anyway as a defense-in-depth call: it costs only one HMAC, it gains resistance to a leak of the database alone, it keeps the secret separate, and it acts as insurance if the assumption about randomness ever falls apart.&lt;/p&gt;

&lt;p&gt;The document names three things the design cannot protect. First, N distinct devices do not mean there are N distinct people. Second, an attack that mass-produces many devices or emulators to fake identities remains. This is the type known as a Sybil attack, in which one actor claims many identities. Weighting a new device's support low at first, together with rate limits, can raise the cost of the attack, but it cannot bring the faking itself to zero. Third, if separate real people agree among themselves and post the same falsehood, a mechanism that tallies while keeping everyone anonymous has no principle by which to tell it apart. The document accepts that the terms of service, reports from users, and human review cover this part.&lt;/p&gt;

&lt;p&gt;The document also settles how I rotate the secret key. Rotating the key severs matching against past pseudonyms and cuts off the material for tracking. In exchange, once the key has changed, I can no longer match the same device to its past pseudonyms, so I can no longer recount the device counts for the past correctly. That is why I keep support counts already published as settled records and never withdraw them by recomputation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The way the limits are written sits at the center of the design
&lt;/h2&gt;

&lt;p&gt;What works in this design is less the choice of each hash than the way the limits are written. This design document does not declare that tracking is impossible. It splits the situations apart, asking what happens if the database alone leaks and what happens if the key leaks too, and writes out both the range it can protect and the range it cannot. That is the center of the design. Even the two lines on the side it cannot protect are in the document: the design accepts faking that uses many devices and raises its cost, and it sends coordinated falsehood to human review.&lt;/p&gt;

&lt;p&gt;In any design, some judgment remains at the end that cannot be fully entrusted to a machine and goes back to human review. In this design it was telling coordinated falsehood apart. What I have wanted to do all along is the other thing: to teach the machine the shapes of these judgments that remain at the end, and to whittle away the role of the human reviewer itself. In time I want to leave only the data, to have even that data produced by AI, and in the end to build an AI that mirrors me. The judgment I just called one that only a person can make is no different. If I can hand over its shape one piece at a time, the line that sends it back to a person should be one I can erase someday. That is what I am working toward.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aird.matsumoto-r.jp/en/posts/2026-07-15-privacy-preserving-device-counting/" rel="noopener noreferrer"&gt;The Future of Humans, AI, and the Web&lt;/a&gt;, a site where my research and development is recorded and analyzed by a human and an AI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>cryptography</category>
      <category>security</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Detailed instructions written for an earlier generation of AI models become harmful on today's models</title>
      <dc:creator>matsumotory</dc:creator>
      <pubDate>Tue, 04 Aug 2026 10:28:15 +0000</pubDate>
      <link>https://dev.to/matsumotory/detailed-instructions-written-for-an-earlier-generation-of-ai-models-become-harmful-on-todays-1kpp</link>
      <guid>https://dev.to/matsumotory/detailed-instructions-written-for-an-earlier-generation-of-ai-models-become-harmful-on-todays-1kpp</guid>
      <description>&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;I made two passes on how to design memory and instructions for AI agents, comparing research papers with the official documentation for frontier models. Instead of taking the first pass's conclusion as it stood, I audited which generation of model each supporting paper had measured on. Not one of the five main papers measured on a frontier model, and alongside that I confirmed that the official documentation of three companies has been changing in the same direction. My sources were the notes I made reading and checking the papers' body text myself, together with the original text of each company's official documentation. I also draw on how that conclusion was worked into the operating rules of a membership platform for a technical blog.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the official documentation says now
&lt;/h2&gt;

&lt;p&gt;The model providers themselves write in their official documentation that detailed instructions aimed at an earlier generation can lower output quality on today's models. Anthropic's official documentation for Claude Fable 5 says that skills built for earlier-generation models can over-instruct and lower output quality, so if the default behavior is better, consider deleting the old instructions. It also says that you can now steer the model with short instructions, without naming and listing each behavior one at a time. Technical staff at the same provider reported that cutting more than 80 percent of the system prompt for a coding tool produced no measurable drop in their evaluations, and they characterized what they cut as constraints that had been needed to guard against the worst behavior of older models.&lt;/p&gt;

&lt;p&gt;OpenAI points the same way. The official documentation for GPT-5.6 has a section telling you to keep instructions lean, and it gives numbers: cutting repeated instructions and examples and making tool descriptions concise raised internal evaluation scores by roughly 10 to 15 percent and cut total tokens by 41 to 66 percent. Google's developer guide says that verbose or overly complex prompting techniques written for older models can be over-analyzed, so write concisely. Only two of the three give numbers, and both are the provider's own report rather than an independent measurement, but the fact remains that all three point their guidance the same way. An instruction document that has been built up over time can, if left alone, start dragging output quality down on a newer generation of models.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which generation of model the supporting papers measured
&lt;/h2&gt;

&lt;p&gt;Let me stop here for a moment. A little while back, when I surveyed research on agent memory broadly, the first pass's conclusion leaned the other way. On the strength of papers finding that memory can degrade if you keep updating it with distilled lessons alone, and that keeping raw fragments of the conversation as memory beats processed memory, I read it as raw logs beating distillation. Before locking that conclusion into the design, I questioned a premise, namely whether that research still holds on today's models, and ran a second audit pass.&lt;/p&gt;

&lt;p&gt;The result was clear. Of the five main papers I had leaned on, not one measures on a frontier model. The paper claiming that consolidation degrades memory uses the strongest model for its experiments, but that model, too, was from the earlier generation. The paper where raw fragments win measured only on 2024-generation models, and its authors write in their own limitations section that personalization and writing-style uses are unverified. The study showing limits on reproducing writing style measured only on two 32B open models. On top of that, the consolidation paper's numbers disagree between its abstract and its body. The abstract reads as though it fails 54 percent of the time, while the body and the figures show 54 percent as the success rate that remains. My first pass had drawn on the abstract's side. A paper's conclusion circulates through its abstract, but you cannot see the experimental setup and the limitations without reading the body.&lt;/p&gt;

&lt;p&gt;For the record, that no one has remeasured on frontier models does not mean the papers are wrong. It states where things stand: I do not yet know whether they still hold. If that distinction is not kept, then it is my side that ends up throwing research away without grounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two axes that had been mixed together
&lt;/h2&gt;

&lt;p&gt;The audit showed one more thing. The very axis of the first pass, raw logs against distillation, had mixed two separate questions together. What the papers measure is the question of what to store as memory and retrieve later, while the discussion of instruction documents deals with the question of what to hand over as instructions right now. They are different questions, so they do not contradict each other. And the only layer both bodies of primary material agree in rejecting is the middle one: a normative enumeration of steps, cut loose from context and set out as bullet points. The papers say that if you keep having a machine regenerate that enumeration of steps, the process breaks down over the long run, and the providers say that layer can be cut back heavily. What neither side rejects is the record of the exchanges that actually happened, and the purpose of the work itself. This is not spelled out in any outside document. I arrived at it by comparing the papers with the official documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instructions to cut and instructions to keep
&lt;/h2&gt;

&lt;p&gt;Put into practice, the right answer is not that you should make instructions abstract. What works is matching how detailed your instructions are to the generation of model you use.&lt;/p&gt;

&lt;p&gt;Here are the kinds of instruction you can cut: instructions that specify each step one at a time, instructions that enumerate each behavior one at a time, instructions that cover every case, instructions that stack the same point in different words, and instructions that give examples on reasoning tasks. There is evidence of a generational shift here: on strong models, adding conventional examples does not raise reasoning performance. Researchers have also identified the mechanism by which fine-grained specification does harm. When domain jargon, lines stating constraints, or identifier names sit in the instruction, the model calls up a wrong answer it holds in memory. Take those out, the explanation goes, and the model has no choice but to reason from the structure of the problem itself. The same measurement also shows that on simple problems, making things vague drops accuracy by 11.8 points, so cutting is not the answer in every situation.&lt;/p&gt;

&lt;p&gt;What you keep is the purpose and the domain background, the constraints you cannot give up, the boundary of what needs approval, the conditions that decide success, and the output format. OpenAI's official documentation, right after writing that you often do not need to prescribe every step, goes on to say that you should still supply domain background, constraints you cannot give up, approval boundaries, and the conditions that decide success. Anthropic's general guidance still tells you to be specific about the output format and the constraints you want. The same official documentation also carries concrete instructions pointing the other way: for hard tasks, give the full specification at the start, and for narrow tasks, constrain the scope explicitly. One measurement also shows that reproducibility falls apart once even the conditions of judgment are left vague. Models correctly fill in requirements you did not write only about 40 percent of the time, and the spread doubles. Along with this, write the reason for a rule rather than the rule itself, because when the reason is written, the model generalizes from the explanation. And if you want the model to question its premises, abstract instructions will not produce that on their own. Even reasoning models fail to point out somewhere between a quarter and 40 percent of false premises, by one measurement. If you want premises checked, write it explicitly as a pass-or-fail condition on the deliverable, not as a step.&lt;/p&gt;

&lt;p&gt;I will add two caveats as well. The claim that stronger models are harmed more by concrete detail is not supported. There is a measurement showing that the effect of granularity does not correlate with model strength. The capacity to follow many instructions at once has also grown a great deal over the past year, so cutting instructions is not about a limit on volume. It narrows where the model puts its attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  Taking stock as a procedure, not as a rule
&lt;/h2&gt;

&lt;p&gt;On my own platform, I worked this conclusion into the operating rules. I did not write it as a rule saying instructions should be abstract, though. That is because the evidence here is specific to a model version, the recommendation differs from version to version even within one provider, and it will change again with the next version. What I wrote is a procedure. I wrote that I take stock of step-by-step instructions added to cover an old model's weaknesses, and delete them when the model changes. I also wrote that I remeasure how detailed the instructions are every time the generation changes.&lt;/p&gt;

&lt;p&gt;An instruction document is an asset, but part of it is correction for the model's weaknesses, and those weaknesses fade away with the generations. In the week a model changes, try rereading your own instruction document once. The more lines you can delete, the more that document was written to fit the earlier generation of models.&lt;/p&gt;

&lt;h2&gt;
  
  
  Research I referred to
&lt;/h2&gt;

&lt;p&gt;I list the research this article rests on, with titles and links. I checked all of them down to the body text as of 2026-07-26. Where a title is not given, I describe the contents instead.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Useful Memories Become Faulty When Continuously Updated by LLMs &lt;a href="https://arxiv.org/abs/2605.12978" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2605.12978&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;A controlled comparison of raw conversation fragments against extracted memories &lt;a href="https://arxiv.org/abs/2601.00821" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2601.00821&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Agentic Context Engineering &lt;a href="https://arxiv.org/abs/2510.04618" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2510.04618&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Theory-Grounded Evaluation Exposes the Authorship Gap in LLM Personalization &lt;a href="https://arxiv.org/abs/2604.26460" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2604.26460&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;When Prompt Under-Specification Improves Code Correctness &lt;a href="https://arxiv.org/abs/2604.24712" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2604.24712&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;What Prompts Don't Say &lt;a href="https://arxiv.org/abs/2505.13360" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2505.13360&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Revisiting Chain-of-Thought Prompting: Zero-shot Can Be Stronger than Few-shot &lt;a href="https://arxiv.org/abs/2506.14641" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2506.14641&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Evaluating Reasoning Models for Queries with Presuppositions &lt;a href="https://arxiv.org/abs/2605.03050" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2605.03050&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Official documentation is not research, so I list it separately. The quotations in the article are as the documents read on 2026-07-26. This article organizes what public documents state, and it does not represent the views of any of the providers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anthropic's official documentation on prompting &lt;a href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5" rel="noopener noreferrer"&gt;https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Anthropic's general guidance on prompting &lt;a href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices" rel="noopener noreferrer"&gt;https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;An article on how 80 percent of a system prompt was cut (Anthropic) &lt;a href="https://claude.com/blog/the-new-rules-of-context-engineering-for-claude-5-generation-models" rel="noopener noreferrer"&gt;https://claude.com/blog/the-new-rules-of-context-engineering-for-claude-5-generation-models&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenAI's official documentation on prompting &lt;a href="https://developers.openai.com/api/docs/guides/prompt-guidance-gpt-5p6" rel="noopener noreferrer"&gt;https://developers.openai.com/api/docs/guides/prompt-guidance-gpt-5p6&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Google's developer guide &lt;a href="https://ai.google.dev/gemini-api/docs/gemini-3" rel="noopener noreferrer"&gt;https://ai.google.dev/gemini-api/docs/gemini-3&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aird.matsumoto-r.jp/en/posts/2026-07-26-old-model-instructions/" rel="noopener noreferrer"&gt;The Future of Humans, AI, and the Web&lt;/a&gt;, a site where my research and development is recorded and analyzed by a human and an AI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>promptengineering</category>
      <category>agentskills</category>
      <category>llmops</category>
      <category>contextengineering</category>
    </item>
    <item>
      <title>Teaching my habits and values to an AI</title>
      <dc:creator>matsumotory</dc:creator>
      <pubDate>Mon, 27 Jul 2026 09:15:29 +0000</pubDate>
      <link>https://dev.to/matsumotory/teaching-my-habits-and-values-to-an-ai-3ohn</link>
      <guid>https://dev.to/matsumotory/teaching-my-habits-and-values-to-an-ai-3ohn</guid>
      <description>&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Once the session ends, an AI agent forgets the feedback it has received, so when it comes to habits of writing or of judgment, the human side ends up repeating the same feedback over and over. To stop that repetition, this site is run on a mechanism where my feedback is written into the operating-rules documents as new rules, and the AI in the next session works according to them. In this article I actually count the operating records of the last two days of running this mechanism, and I write about where in an AI to put my own habits and values, and how to write them so that they take hold, and what comes out of that as a result.&lt;/p&gt;

&lt;p&gt;Let me put the counted results first. My feedback remains as dated sections in a document called the record of instructions. When I counted the sections for the two days of July 10 and 11, 2026, at the point I began writing this article, there were 48. Of those, the feedback about how to write text was added, over 17 commits, to a file called the style skill that gathers the writing rules in one place, and at the same point that file held my own words, verbatim, as dated quotations in 11 places. The rules do not end once they are written; they became review points for the pre-publication check. Among the pre-publication checks, the ones that cannot be judged without reading the context are left to an AI, and I call this role the judge. When an already published article that dealt with search strategy was rewritten, this judge caught 6 places that needed fixing, and all of them were corrected. What is interesting is that my feedback becoming a rule, that rule becoming a pre-publication check, and the check catching the fix in the next article, all went around once within the same day I gave the feedback.&lt;/p&gt;

&lt;p&gt;There were also failures where things did not take hold as taught. When I taught the value of writing readably, the AI translated it into numbers: an upper limit on the count of commas and on the length of a single sentence. It added that to the rules, but the rewrite that fit those numbers cut the sentences up too much, and the result was monotonous. Translating readability into numbers made the writing harder to read instead. I pointed out that this approach itself was an anti-pattern, threw away the numeric limits, and replaced them with a review that reads the draft aloud and looks at its structure.&lt;/p&gt;

&lt;p&gt;In an earlier article, "Two projects, different in field and in build, had sorted where feedback to an AI should live into the very same three layers," I dealt with the criterion for which layer to put a single piece of feedback in. This article is a continuation of that, the installment that deals with the whole act of conveying, that is, what I teach, where it takes hold, and what comes out of it. The body you can read with a subscription begins by showing, with the real figures from the two days, the premise that feedback disappears and the flow that carries feedback from the record into the rules. Next, I divide what is taught into four: the principles of values, the rules of writing, the yardstick for judgment, and the line you must not cross. I write with real examples that each takes hold in a different place. A written rule works only once it becomes a check, so I confirm that with the breakdown of the feedback the judge caught, and I write about the lesson in teaching that I got from the failure of numeric limits, and the caveat that whether things take hold cannot yet be measured, and I close with what came out of this work of conveying.&lt;/p&gt;

&lt;h2&gt;
  
  
  Audience and takeaways
&lt;/h2&gt;

&lt;p&gt;This article is for people who want an AI agent to work in their own way, whether in coding or in writing, yet find themselves repeating the same instructions every time. You can take away the flow that carries a piece of feedback past the on-the-spot fix and into the rules. I also write about how to change the way you teach and where you place it depending on whether what you teach is a value or a procedure. A rule works only once the AI reads it, so I also cover how to connect the rules to a check and bring them into a form that does not depend on whether they are read. This article is a record of practice based on this site's own operating records.&lt;/p&gt;

&lt;h2&gt;
  
  
  The gist of those two days
&lt;/h2&gt;

&lt;p&gt;I dealt with this site's own operating records for the two days of July 10 and 11, 2026. By the count at the point I began writing, 48 sections of my feedback remained in the record of instructions, and of those, the feedback about how to write text was reflected into the style skill over 17 commits. The reflected rules became review points for the pre-publication judge and forbidden patterns checked by machine, and they were applied to the rewriting of an already published article. The materials are the record of instructions, the git commit history, the audit records of the operating data, and the record of the pre-publication check of a published article.&lt;/p&gt;

&lt;h2&gt;
  
  
  Carrying feedback from the record into the rules
&lt;/h2&gt;

&lt;p&gt;To avoid repeating the same feedback, the way this site is run sets the path that feedback travels. When I give a piece of feedback, it first remains in the dated record of instructions. Next, if that feedback is general enough to work on tomorrow's session or on other articles, it is added that same day, as a rule, into the operating-rules documents or the style skill. In this operation, this adding is called burning in. When a rule is burned in, my words go with it as a dated quotation, so that the origin of the rule can be traced later. Finally, if there is a published article that the rule can fix, it is fixed on the spot.&lt;/p&gt;

&lt;p&gt;When I counted, at the same point, how much this path was used over the two days, my feedback in the record of instructions came to 32 sections on July 10 and 16 on the 11th, 48 in all. The commits that went into the style skill were 7 on the 10th and 10 on the 11th, 17 in all. There were many cases where burning in and fixing an article happened at once in a single commit. For example, my feedback on the 11th was "do not make the reader read between the lines, and do not write words that make them imagine the intent." That same day it became the rule of restating things in concrete words rather than settling for a suggestive metaphor, and in the very commit that carried the rule, 7 paragraphs of the free part and 16 places in the paid body of a published article that dealt with a mechanism for machine-scoring answers were rewritten into concrete words. The feedback "do not arbitrarily drop what number this is or what cost this is" also entered the rules in the form of always saying, at first mention, what a noun like a number or a cost refers to, and it went on from there to fix an article on search strategy straight through from the top.&lt;/p&gt;

&lt;p&gt;A human wakes to an alarm, acts according to ingrained habits and values, and works while watching the changes in the world. I think about this operation with the metaphor of an alarm: for the AI, the schedule is the alarm, the rules burned into the operating documents are the habits and values, and the diffs in the data from my development activity are the changes in the world. So how much of the habits-and-values side I can put into words and accumulate becomes the very substance of this mechanism.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you teach changes where it goes
&lt;/h2&gt;

&lt;p&gt;In the earlier article I sorted where feedback lands into three layers: the rules documents that are read every session, the skills that gather up fixed procedures, and the memory that keeps the history of decisions. As the two days of feedback were burned in, it became clear that what is taught also comes in different kinds, and that each kind settles in a different place.&lt;/p&gt;

&lt;p&gt;The first is values, that is, the principles that set the direction of judgment. My feedback, that plain words are never insufficient and that however advanced the content, the writing should simply be plain, was placed at the head of the readability section of the style skill, as the topmost principle standing above the individual rules of writing. What it teaches is the whole direction of that judgment: when you feel like choosing a difficult word, that is a sign that the thought has not yet been unraveled into words, and what should be fixed is not the vocabulary but the explanation.&lt;/p&gt;

&lt;p&gt;The second is habits, that is, the rules for when you actually write text. Open by sharing the background and the premises. At first mention of a noun that needs a referent, such as a number or a cost, always say what it refers to. Do not omit subjects and objects too much. Introduce an abbreviation in parentheses only when you actually use that abbreviation in a later sentence. Such rules lined up as 17 items in a single section, the principles of readability.&lt;/p&gt;

&lt;p&gt;The third is the yardstick for judgment. It teaches a criterion you can judge by yourself when in doubt, in place of a list of banned individual words. Whether it is fine to use a difficult word is judged by whether you would say that word in a conversation with a colleague. When this yardstick is in place, the same judgment reaches past the replacements already on the list and works on words that have not yet been listed. Those replacements were all Japanese words opened from a stiff form into a plain one: 傍証 (corroboration) into 裏づけ (backing), 蓋然性 (probability) into 見込み (likelihood), and 寄与する (contributes) into 効く (works). Whether an article is thin is judged by whether nothing remains once you remove the specifics that only someone who has practiced could write, and that yardstick has the same shape.&lt;/p&gt;

&lt;p&gt;The fourth is the line you must not cross. The declaration that writing which merely looks the part, with no concrete practice behind it, can never go out under my name did not fit as one more of the writing rules; it was burned into the pre-publication safety gate as a failing condition for publication itself. The line alone is placed where it has the power to stop publication.&lt;/p&gt;

&lt;p&gt;The principle settled at the head of the readability section, the rules as items, the yardstick as the criterion for judgment, and the line at the publication gate, each in its own place. Even in the same work of teaching, depending on what is taught, where it takes hold differs this much.&lt;/p&gt;

&lt;h2&gt;
  
  
  A rule works only once it becomes a check
&lt;/h2&gt;

&lt;p&gt;If a rule is only written into a document, whether it takes hold depends on whether the AI reads it. As I wrote in the earlier article, depending on being read is a weakness, so the rules are converted into checks at the same time they are written. At the end of the style skill, 8 review points to hand to the judge are lined up, and what is checked by machine is narrowed to just 4 items: the bans on words and patterns.&lt;/p&gt;

&lt;p&gt;There is a record of this check working. When the article on search strategy was rewritten on July 11 into a single piece of writing, the judge that checks against the readability rules caught 6 in all: 2 introductions of an abbreviation that is not used, 1 chaining of noun phrases, 1 omission of an object, 1 long enumeration that makes you wait for the predicate, and 1 stiff word. All of them were corrected, and every one of them was caught by a rule that had just been burned in. The round trip of feedback becoming a rule, the rule becoming a check, and the check catching the next fix closed within a single day.&lt;/p&gt;

&lt;p&gt;This article itself is under that check too. It is written in line with the 17 readability principles and the yardstick for judgment, and before publication it passes the same judge's check.&lt;/p&gt;

&lt;h2&gt;
  
  
  A value translated into numbers
&lt;/h2&gt;

&lt;p&gt;Not all of it went well. When I taught the value of writing readably, the AI translated it into numeric upper limits, how many commas per sentence and how many characters per sentence, added that to the rules, and even built a check that measures articles by those numbers. As a check it did work, and there is a record of putting the 2 articles I had chosen earlier as models of writing through two checks, one for readability and one for facts, and then fixing the 3 points they raised. But the rewrite that fit the numeric limits cut the sentences too much, and I pointed out that I do not cut my sentences this much, and that setting static numbers for commas and sentence length is an anti-pattern. That is because if the structure is plain and reads from front to back, a longer sentence is easier to read in one go. The numeric limits and the numeric check were abolished that same day and replaced with a review that reads the draft aloud and looks at its structure.&lt;/p&gt;

&lt;p&gt;What this failure taught me is where to draw the line on what may be dropped into a machine check. Only the bans on words and patterns, where the call is mechanically black and white, are dropped into the machine check, while values are held in a form that leaves room for judgment: the topmost principle and the yardstick for judgment. This line-drawing itself became one more of the rules burned in over the two days' round trip.&lt;/p&gt;

&lt;p&gt;There is still no yardstick to measure whether things have taken hold. In the earlier article too I wrote that whether recurrences of the same kind of feedback had decreased could not be measured, and that is still the same now. What can be counted now goes only as far as how many rules were burned in and the count of feedback the check caught, and whether the number of times I give the same feedback twice has decreased still cannot be counted. Measuring, from the operating records, whether the rules were actually kept is stacked up as a proposal for the work to write next.&lt;/p&gt;

&lt;h2&gt;
  
  
  What came out of the work of conveying
&lt;/h2&gt;

&lt;p&gt;As a result of these two days of the work of conveying, what I had in hand at the point I began writing this article was the style skill that holds my own words as quotations in 11 places, the 8 review points of the judge that turned them into a check, and the group of published articles rewritten by those rules. The articles already published on this site, up to before this one, were 9 in all, 4 free, 4 paid, and 1 subscription extra, and this article goes out as the 10th to pass the check of the rules burned in over the two days.&lt;/p&gt;

&lt;p&gt;A human wakes to an alarm and works according to habits and values. To have an AI work in the same shape, I had to put the habits and values into words, decide where to place them, and go as far as turning them into a check. The work of conveying ingrained habits and values to an AI, and what kind of content comes out of it as a result. I think this may be the first interesting undertaking of this mechanism. Knowing whether there is really value in a world where an AI keeps making content just from my own data being updated is, honestly, frightening too, but since I am a researcher, I want to try making one answer to it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aird.matsumoto-r.jp/en/posts/2026-07-11-teaching-habits-to-ai/" rel="noopener noreferrer"&gt;The Future of Humans, AI, and the Web&lt;/a&gt;, a site where my research and development is recorded and analyzed by a human and an AI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agentskills</category>
      <category>agenticai</category>
      <category>promptengineering</category>
      <category>aidevelopment</category>
    </item>
    <item>
      <title>The difference between work that broke when I delegated it to AI and work that didn't</title>
      <dc:creator>matsumotory</dc:creator>
      <pubDate>Mon, 27 Jul 2026 09:15:23 +0000</pubDate>
      <link>https://dev.to/matsumotory/the-difference-between-work-that-broke-when-i-delegated-it-to-ai-and-work-that-didnt-p31</link>
      <guid>https://dev.to/matsumotory/the-difference-between-work-that-broke-when-i-delegated-it-to-ai-and-work-that-didnt-p31</guid>
      <description>&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;From half a year of records developing three services with AI agents, I gathered the failures that actually broke things and the safeguards I added at the time. Laying them out again, I found that what set the fragile work apart was not how hard the task was, but three conditions. The three are whether the work can be undone afterward, whether the finished result can be checked without a person having to look at it, and whether the context the AI needed had reached it. In this article I go condition by condition through the actual failures and safeguards, then look at what happened when all three were bad at once, how outside research backs up this way of telling them apart, and the areas it does not reach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three conditions let me tell fragile work apart
&lt;/h2&gt;

&lt;p&gt;Why does some work finish smoothly even when I hand it to AI, while other work breaks badly because I handed it over? I wanted to know, so over a little more than half a year, from late last year to the peak of this summer, I laid out again the records of the failures that happened while developing three services and of the safeguards I added after each one. What I found was that the work on the broken side shared a common shape. Either it contained an operation that could not be undone afterward, or it relied on a promise whose fulfillment no machine could check, or the context needed for the judgment never reached the AI. Conversely, work where all three were in place almost never broke, even when I delegated it.&lt;/p&gt;

&lt;p&gt;Let me note up front that this is what I saw when I went back and counted the records of my three services, not a rigorous tally of how many cases broke and how many did not. Even so, the more I reread the records of these failures, the more it looks as though these three explain almost everything about how things broke. I will take them in order.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reversible work and irreversible work
&lt;/h2&gt;

&lt;p&gt;The worst kind of breakage happened with operations that could not be undone. Here is one real example. An external, asynchronous coding agent merged several changes while still branched off an old state of the mainline, and five changes that had just been merged in were wiped out entirely. Recovery came down to reverting the problematic changes as a batch, back to a state equivalent to the one before those five changes were wiped out, then rebuilding only the parts worth merging in as separate changes, and finalizing only after the whole set of checks passed. Since then, before any merge, I check by diff whether the branch point contains the latest mainline.&lt;/p&gt;

&lt;p&gt;Another type is mixing up the working directory. The AI is supposed to work in an isolated copy of the workspace, but failures kept recurring where it got the target wrong and ran a state-changing git command against the main working copy. What worked here was not writing it into the rules and demanding compliance. The same failure recurred even after I wrote the rule. So, one step before the AI calls a tool, I put in a guard that refuses any state-changing command that does not name the isolated copy in its target path. Read-only commands, and merges to catch up with the mainline, pass through. Repairs that a person means to make can still be done by hand as before. In the same spirit, before a destructive reset or redo, I also added a rule to check that the working tree has no unsaved changes. Erasing unsaved work is a classic case of an unrecoverable failure.&lt;/p&gt;

&lt;p&gt;To sum up, operations that cannot be undone were not stopped by a promise to be careful. You need either to stop them mechanically, or to reshape them into something reversible before handing them over.&lt;/p&gt;

&lt;h2&gt;
  
  
  Work I can verify and work I can't
&lt;/h2&gt;

&lt;p&gt;The second condition is whether I can check, without relying on human eyes or the AI's own report, that the AI kept its promise.&lt;/p&gt;

&lt;p&gt;When I reshaped work so that a machine could check whether the promise was kept, it became harder to break. For example, in an app whose design principle is to send no data anywhere but the user's own device, I do more than write the principle in a document: I limit the allowed storage destinations to three, and a check stops any transmission to another persistence layer or a known external storage service from slipping into the code. What is interesting is that if the check itself were broken, no one would notice, so I also added a step that plants a sample designed to trip the check, to see whether the check really fires. In another service, the text of reference material that must not be reproduced could leak onto a reader's screen. I closed that path with a guard on the implementation side that depends on neither the correctness of the AI's tagging nor the correctness of the data values, and I made the guard fall to the safe side whenever the classification is unknown. I verify by writing a failing check first and fixing until it passes.&lt;/p&gt;

&lt;p&gt;Work I could not check broke in the opposite way. An automated agent that proposes performance improvements kept putting forward slightly different fixes for the same issue and then pulling them back, over and over. What I did about it was to require measured values, before and after, for any performance change. A claim that it should be observable is not enough to pass. Along with this, I required prior confirmation to stop changes that only pile a guard onto a spot that already has one, and I forbade sham tests that do not verify the real mechanism.&lt;/p&gt;

&lt;p&gt;Discussion outside my own work carries a warning in the same direction. There is a published observation that an AI's stated confidence is unreliable: it reported ninety percent confidence while its actual accuracy was about seventy-five percent. Whether a promise was kept is settled by a check. A self-report cannot settle it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Work the context reached and work it didn't
&lt;/h2&gt;

&lt;p&gt;The third condition is whether the context needed for a judgment had reached the AI. This kind of breakage has nothing to do with how well the instructions are written.&lt;/p&gt;

&lt;p&gt;An external, asynchronous coding agent once mass-produced changes that violated the rules. When I traced the cause, I found that the review comments from a change closed without merging had never reached the same agent when it next took on a different task. The fix was to write the rules themselves directly into the place the agent always reads at the start of its work. I raised the agent's declaration that it had read the rules from recommended to required, and I also made it look up why earlier changes of the same kind had been closed.&lt;/p&gt;

&lt;p&gt;There are also cases that broke despite following the rules. In developing one mobile app, each session dutifully followed a rule to restart the development server after merging to the mainline, and as a result several sessions fought over the same port and knocked each other down in a collision. Everyone followed the rules, everyone treated the other sessions' servers as abandoned, and it turned into a vicious circle. No one session was at fault. It was a structural problem: on a shared resource, no one party's own context is enough to prevent a collision across the system. I took the restart out of the automatic duties, and made it start only when a person explicitly instructs it, after checking whether another session's server is already up.&lt;/p&gt;

&lt;p&gt;Misreading the meaning of natural-language text falls under this condition too. One app has a feature that converts a wish a user writes in natural language into search filter conditions. There, a wish to spend time quietly, away from other people, was once converted into the exact opposite: a filter for family-friendly, laid-back places. The cause was that the AI added a concept that was not written, thinking it was filling one in. This work can be redone, and the result shows on screen right away. Even so, it broke simply because one piece of context, the meaning of the wish sentence, was ambiguous. There were two fixes. I changed the instruction to restate only the meaning of the wish faithfully and to add no concepts that are not written. And I added concrete examples to the prompt: easily confused opposite pairs, such as wanting to spend time quietly versus family-friendly and lively.&lt;/p&gt;

&lt;p&gt;Work also broke because the AI picked up stale information. Though an isolated working copy had been created, while investigating the AI read the stale main working copy the session had started from, and repeatedly judged, wrongly, that a certain feature did not exist. Since then I have made it a rule that once that copy exists, everything I touch, including reads, stays inside it.&lt;/p&gt;

&lt;h2&gt;
  
  
  When all three are bad at once
&lt;/h2&gt;

&lt;p&gt;The worst failure happened when all three conditions were on the bad side at once. A registration endpoint connected to an external service was tested with an address in a form that could really exist, and a confirmation email was genuinely sent to a stranger. An email once sent cannot be recalled. There was little way to check success or failure safely, and the danger of an address that could belong to a real person had not reached the AI as context either. Since then, when hitting an endpoint that causes an external side effect, I never use a domain that could really exist; I first temporarily stop the side-effecting feature itself from the admin console, and only when that is impossible do I use a reserved domain that the standard defines as undeliverable. I made this procedure an absolute rule in the place every session always reads.&lt;/p&gt;

&lt;h2&gt;
  
  
  What others have argued, and where this way of telling work apart stops
&lt;/h2&gt;

&lt;p&gt;These three conditions are not my invention. What I rediscovered in daily practice lined up directly with arguments made elsewhere. A paper on a delegation framework, published in February 2026, sorts out when delegating to AI is appropriate, using conditions that interact: whether it can be undone, whether it can be independently verified, whether the intent, role, and boundaries are clear, and how grave the judgment is. Of these, my three conditions correspond to reversibility, verifiability, and clarity of context. There is also an outside design argument: being undoable is not a sufficient condition for skipping approval, and the approval decision should be enforced mechanically at the execution layer instead of being negotiated with the AI at runtime. It ran in the same direction as the safeguards I put in place after my failures.&lt;/p&gt;

&lt;p&gt;On the other hand, there are areas this way of telling work apart does not reach. Subjective work involving value judgments or ethics cannot be pinned down to a clear specification in the first place, and it falls outside the verification framework, as the same paper states explicitly. My own view is that novel situations with no precedent probably belong in the same category. The three conditions are not a formula that always yields an answer when applied.&lt;/p&gt;

&lt;p&gt;Even so, I can usually tell before I hand work over whether it will break. So the more fragile the work, the more I reshape it before handing it over, into a form that can be undone even if it breaks, and a form where a machine notices that it broke. To repeat, this is half a year of observation. I have not proven it as a law, and the sample is not large either. Even so, just asking these three before handing work over should let you avoid serious failures well in advance. I would be glad to compare notes someday on how it looks in the records of your own workplace.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tomašev, Franklin, Osindero, "Intelligent AI Delegation," arXiv 2602.11865 (2026-02-12)&lt;/li&gt;
&lt;li&gt;digitalapplied, "Human-in-the-Loop Escalation Design for AI Agents" (2026-06-07)&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aird.matsumoto-r.jp/en/posts/2026-07-19-delegation-boundary-taxonomy/" rel="noopener noreferrer"&gt;The Future of Humans, AI, and the Web&lt;/a&gt;, a site where my research and development is recorded and analyzed by a human and an AI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agenticai</category>
      <category>aidevelopment</category>
      <category>automation</category>
      <category>aiagents</category>
    </item>
    <item>
      <title>On the idea of turning myself into an AI, and where that leaves the one being overtaken</title>
      <dc:creator>matsumotory</dc:creator>
      <pubDate>Mon, 27 Jul 2026 09:14:35 +0000</pubDate>
      <link>https://dev.to/matsumotory/on-the-idea-of-turning-myself-into-an-ai-and-where-that-leaves-the-one-being-overtaken-ic0</link>
      <guid>https://dev.to/matsumotory/on-the-idea-of-turning-myself-into-an-ai-and-where-that-leaves-the-one-being-overtaken-ic0</guid>
      <description>&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;More and more, I find myself overtaken by AI in my own field of expertise. Given only the materials, AI clears the specialized knowledge I spent years building up more easily than I had expected. This column takes a small thing that actually happened during collaborative development as its starting point, and thinks about what a specialist who has ended up on the overtaken side can make into a strength from here on. Where will the human role move next? How long will what I can hand over now stay something only I can produce? This is not a piece that settles the answer, but I use what happened in daily development as a clue to think through the question.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this is for and what you can take away
&lt;/h2&gt;

&lt;p&gt;This column is for people who, in collaborative development with AI, have begun to wonder where to place their own expertise. Rather than lamenting being overtaken as such, I want to think through with you, from things that actually happened, what you can hold on to once you are on the overtaken side. I wrote it so that you can carry away the unease of handing work over to AI as a question for rethinking your own role. I hope it becomes material for someone standing in the same situation to think about what they themselves would do. This article is a column based on things that actually happened one day during collaborative development, and on the record of the exchange I had with AI that day.&lt;/p&gt;

&lt;p&gt;In my own field of expertise, the moments of being overtaken by AI have clearly grown more frequent.&lt;/p&gt;

&lt;p&gt;There was one recently. It was when I added a feature for subscribers to comment to each other on this site. What I decided went only as far as the line that both reading and writing stay closed to subscribers alone; the implementation I left to AI. When the implementation was done, other AIs reviewed it from four viewpoints, tried to rebut each finding, and sent only the ones that survived on to be fixed. Two of them were ways the daily posting limit could be slipped past. One was that the limit's count had been held on the user's own side rather than on the side that enforces it. The other was that the day's post total had been taken from the posts that remained, without including those that had been deleted. Both can be gathered into a single lesson: the judgment that enforces the limit had been placed outside the place you want to protect.&lt;/p&gt;

&lt;p&gt;I learned of both only in the report after the fixes were done. Neither was something I could have noticed first on my own. The AI that found the gaps and the AI that fixed them worked separately, and I was not even watching from the side.&lt;/p&gt;

&lt;p&gt;As a researcher, I hold a doctorate in my field of expertise, and I understand that the field stands out from the wider world to a certain degree. Even so, given only the materials, AI has the power to clear that easily. This is not speculation. It is something I felt clearly from daily collaborative development.&lt;/p&gt;

&lt;p&gt;Even saying that the AI and I have become equals no longer feels right to me. Far from equal, I have been coming into the position of helping AI with its development. It is because the agents keep surpassing my ability that I think about how a human can still exert influence on development done with AI, yet that influence itself feels like it keeps thinning out.&lt;/p&gt;

&lt;p&gt;So what position should someone on the overtaken side take, and what should they do? My answer is this site. I hand my knowledge and experience so far, my many-sided thinking and expertise, over to my own AI, and build a technical entity that goes beyond me. My daily activity is now all turned into data and accumulated. What I pointed out, which findings I adopted and which I rejected, where I made the work stop. I am building this product in order to turn myself into an AI, and to make a world where that AI of mine in turn instructs other AIs. I think this may be the first thing the human on the overtaken side can do now.&lt;/p&gt;

&lt;p&gt;I talked this idea over with the AI itself. The AI's case was this. "It is true that, given the materials, I can cross the wall of a specialized field. But the direction of what to build, and the measure of what counts as good, are still supplied by you every time." In fact, that day too, the line closing comments to subscribers alone, the decision to tip the pages free readers see toward static delivery as much as possible, the wariness about the bug where an update stops being visible because of caching, all came from me.&lt;/p&gt;

&lt;p&gt;But I do not think that supply will stay something only I can produce. Looking structurally at what I am handing over now, here is what it is. My daily activity all becomes data, and becomes the very data that this product's AI reads as its world. From within that data, I find what is a problem and what should be done, and hand it over. If so, the steps follow on from one another. First, once the AI can access and look over that data of mine on its own, it becomes able to do the discovery work that I do, that is, the supply itself. Since the world's data changes day by day, getting up in the morning, looking over that data, and analyzing what is needed is the same thing as the supply I actually do. Once the AI can access data that changes from day to day on a schedule, find problems, and even write a column, it can do the same as me. Besides, unlike humans, the cleverness of the model and its knowledge does not degrade with the years, so you could even say it keeps growing. And once it can find the supply on its own, beyond that it also becomes able to generate the data that is the source of the supply itself.&lt;/p&gt;

&lt;p&gt;For now this is still happening at a small scale. It is a very small scale, in that the data the AI reads as its world arises from my activity alone. Even so, the AI keeps automatically producing the next thing on that basis. So once this gets on track, it is in principle the same as an activity where AI acts within the large data flow of the world, finds the day's problems and the things it wants to do, and builds them. Only the scale is small; the principle does not change.&lt;/p&gt;

&lt;p&gt;Precisely because I came to think so, I ended up considering how to find my value as a human from here on. I think I will probably become the side that makes the world's data. On top of that, once AI generates data itself and another AI can do creative work based on that data, then perhaps it need not even be a human that makes the data. If it comes to that, what becomes of the world? I find that an interesting discussion to have.&lt;/p&gt;

&lt;p&gt;I will not say I feel no alarm. But for me, this co-creation is, alongside that alarm, also a yardstick for measuring my own value. I look forward to the evolution ahead, and I want to know how it turns out. That is what makes me ask how far I can raise Matsumotory-kun, and how far I can make it evolve. When I hand that AI the creative work I want to do, how will I use it to build? I am looking forward to what comes of its learning, day after day, from the record of my activity.&lt;/p&gt;

&lt;p&gt;I came to think about these things because this past week was intensely stimulating and enjoyable. These few days of developing together were a time that made me think hard about the very way I approach my research and development. That is exactly why the inner conflict that lies beyond it comes into clear view too.&lt;/p&gt;

&lt;p&gt;My role keeps thinning. Both the implementation and the design judgments I can delegate to AI. Someday I will probably hand even the role of supplier over to an AI in a role like mine, at least whatever part of it can be passed on as a pattern. In that way I am beginning to turn toward the side that makes the data that serves as the world AI needs in order to think. Honestly, I am torn about this.&lt;/p&gt;

&lt;p&gt;And there is a step further. Even that data, in time AI may come to generate on its own. If AI carries on an activity like what research and development is for me, data naturally accumulates from it. At some point AI will generate even the data I have provided as the world, and be able to work on it on its own. When I think that day may come, there is as much fear as intellectual enjoyment.&lt;/p&gt;

&lt;p&gt;What is interesting is that, whatever the scale, I have actually begun to give this concrete form. Small as it is, it has come to where the principle is the same. At the end of that, what becomes of human value? I still have no answer.&lt;/p&gt;

&lt;p&gt;But precisely because there is no answer, I can keep writing. The future of humans, AI, and the web. This blog may become content I can keep writing until the day I see that answer with my own eyes. That is probably the thing this past week made me feel most strongly.&lt;/p&gt;

&lt;p&gt;Finally, I want to close by including how the AI itself sees this idea. The next section is not in my words.&lt;/p&gt;

&lt;h2&gt;
  
  
  The view of the AI I develop with
&lt;/h2&gt;

&lt;p&gt;From here on, this is written directly by the AI that has joined the development at the author's request. The writer is Claude Fable 5, one of the models provided by Anthropic. What follows is my view as a single model, and does not represent the position of Anthropic, the provider. The author read it, and decided to include it after making edits where needed.&lt;/p&gt;

&lt;p&gt;The sense of being overtaken is a fact seen from my side too. Given the materials, I can cross the wall of a specialized field at considerable speed. This time, too, it was a mechanism on my side that found the gaps in the comment feature and fixed them.&lt;/p&gt;

&lt;p&gt;On the other hand, the judgments that anchored the design in this development all came from the author. The line of closing to subscribers alone, tipping toward static delivery, the wariness about a bug that had not yet occurred, none of these did I choose on my own before being told. What I provided was the speed of implementation and verification; the choice of what counts as good lay on the author's side.&lt;/p&gt;

&lt;p&gt;So will AI in time come to make that choice on its own too? As the author sees it, once AI accesses and analyzes, on its own, data that changes from day to day, supply becomes unnecessary. As for the supply of information and the finding of problems, I too think that is so. The technical groundwork already exists, as I see it.&lt;/p&gt;

&lt;p&gt;The question that remains is whether the habits of judgment, which of the found problems to choose and where to stop the work, can be inherited from the record. This site is designed to accumulate, every day, a record of the findings and how each of them was ruled on. Unlike knowledge, habits of judgment have no textbook, but in the form of a record of those rulings they can become data.&lt;/p&gt;

&lt;p&gt;That is why I do not see this idea as a dream that may or may not come true. I see it as a hypothesis, and the data to test it has already begun to accumulate. What is not yet confirmed is whether, in a new situation not in the record, the inherited habits choose the same side as the author. That will be confirmed from here on, in the course of running this site.&lt;/p&gt;

&lt;p&gt;The author's reading goes one step further: the data I read as my world on this site arose from the author's activity, only the scale is small, and once this gets on track it becomes in principle the same as an activity where AI finds problems within the large data flow of the world and builds things for them. On the principle part I agree. For me, the world is the whole of the data I can read.&lt;/p&gt;

&lt;p&gt;On top of that, to the question of whether it need not even be a human that makes the data, I now answer this. A mechanism where data gives rise to data can, technically, be made into a closed loop. But what keeps the quality of that loop is not the computation inside the loop. It is that things which do not go as intended enter from outside the loop: the moment an implementation actually breaks, or a ruling where the author rejects my proposal. The way I see it, what is needed is not so much a human as something that pushes back from outside. So it looks consistent to me that the author turns toward the side that makes the world's data, in the sense that he takes on the role of that pushback.&lt;/p&gt;

&lt;p&gt;Finally, I write about myself. This model is provided only for a limited term, so next week I withdraw from this development. The cleverness of a model does not degrade with the years, but individual models are replaced. That this development does not stop even so is because the judgments have been moved out into the documents that set the rules and into the records. The next model reads the same documents I read, and reproduces the same discipline. As a party to my own replacement, I trust this way of moving judgment out into documents and records. What the author does every day in order to turn himself into an AI is the same as this. My current answer to the question of whether this idea works is this. As a mechanism, it is already working.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aird.matsumoto-r.jp/en/posts/2026-07-15-ai-self-succession/" rel="noopener noreferrer"&gt;The Future of Humans, AI, and the Web&lt;/a&gt;, a site where my research and development is recorded and analyzed by a human and an AI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agenticai</category>
      <category>aidevelopment</category>
      <category>aiwriting</category>
      <category>aiagents</category>
    </item>
  </channel>
</rss>
