<?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: mengxiujie</title>
    <description>The latest articles on DEV Community by mengxiujie (@mengxiujie).</description>
    <link>https://dev.to/mengxiujie</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%2F4180562%2F82bcae9f-d183-48f3-8f9e-e3bef42f386f.png</url>
      <title>DEV Community: mengxiujie</title>
      <link>https://dev.to/mengxiujie</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mengxiujie"/>
    <language>en</language>
    <item>
      <title>A correction does not inherit the old approval</title>
      <dc:creator>mengxiujie</dc:creator>
      <pubDate>Tue, 13 Oct 2026 04:15:50 +0000</pubDate>
      <link>https://dev.to/mengxiujie/a-correction-does-not-inherit-the-old-approval-1dja</link>
      <guid>https://dev.to/mengxiujie/a-correction-does-not-inherit-the-old-approval-1dja</guid>
      <description>&lt;p&gt;&lt;em&gt;Building version-bound, revocable context authorization for AI agents on Monad&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;AI memory is becoming portable.&lt;/p&gt;

&lt;p&gt;Agents can inherit previous conversations. Personal assistants can carry context across sessions. Multi-agent systems can hand information from one model to another. User-owned context layers promise that people will no longer need to start from zero every time they switch applications.&lt;/p&gt;

&lt;p&gt;That is real progress.&lt;/p&gt;

&lt;p&gt;But portability leaves a harder question unanswered:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;May this recipient obtain this approved version of the context through a new handoff now?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those are not the same thing.&lt;/p&gt;

&lt;p&gt;A copy can survive after the facts have changed.&lt;br&gt;&lt;br&gt;
A recipient can still possess information after the owner has narrowed the intended scope.&lt;br&gt;&lt;br&gt;
And an approval that was valid yesterday can remain technically usable even after the person who gave it has corrected, replaced, or withdrawn what they meant.&lt;/p&gt;

&lt;p&gt;This is the problem we explored while building &lt;strong&gt;Shanhai Continuity&lt;/strong&gt; on Monad.&lt;/p&gt;

&lt;p&gt;Our starting principle is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A correction does not inherit the old approval.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That small rule has surprisingly large consequences for how AI continuity should be designed.&lt;/p&gt;


&lt;h2&gt;
  
  
  Portable does not mean still authorized
&lt;/h2&gt;

&lt;p&gt;Consider an intentionally ordinary example.&lt;/p&gt;

&lt;p&gt;A user prepares an event brief.&lt;/p&gt;

&lt;p&gt;The approved version says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The announcement will happen on Friday.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The user authorizes another agent to use that brief.&lt;/p&gt;

&lt;p&gt;Later, the event moves to Saturday.&lt;/p&gt;

&lt;p&gt;The information changes.&lt;/p&gt;

&lt;p&gt;What happens to the old approval?&lt;/p&gt;

&lt;p&gt;A document system might simply overwrite Friday with Saturday.&lt;/p&gt;

&lt;p&gt;A conventional permission system might still see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the same owner,&lt;/li&gt;
&lt;li&gt;the same recipient,&lt;/li&gt;
&lt;li&gt;the same resource,&lt;/li&gt;
&lt;li&gt;and an existing grant.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But something important has changed.&lt;/p&gt;

&lt;p&gt;The user approved one particular version of the context. They did not necessarily approve:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;whatever that context may become later.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Friday v1
APPROVED

↓ content changes

Saturday v2
STILL APPROVED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is not the behavior we want.&lt;/p&gt;

&lt;p&gt;Instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Friday v1
APPROVED

↓ a new context version is explicitly created

Friday v1
VERSION_STALE

Saturday v2
NOT YET AUTHORIZED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only after a fresh authorization should version 2 become usable.&lt;/p&gt;

&lt;p&gt;This is the central idea behind Shanhai Continuity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjtg54hrxjo78r64b22xf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjtg54hrxjo78r64b22xf.png" alt="Diagram showing Friday v1 as approved, a correction creating Saturday v2, the old authorization becoming VERSION_STALE, and the new version requiring fresh approval." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  From memory portability to continuity authorization
&lt;/h2&gt;

&lt;p&gt;Memory portability asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How can context move between AI systems?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Shanhai asks a different question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Under what current authority may another recipient obtain this context through the next handoff?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;User control is not only the ability to export or move information.&lt;/p&gt;

&lt;p&gt;It also includes the ability to determine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which recipient may use it;&lt;/li&gt;
&lt;li&gt;which portion may be used;&lt;/li&gt;
&lt;li&gt;which version was actually approved;&lt;/li&gt;
&lt;li&gt;and whether that authorization still exists.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We call this layer:&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuity Authorization
&lt;/h2&gt;

&lt;p&gt;The primitive is conceptually small:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Owner
Recipient
Scope
Context Version
Authorization State
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The context payload remains encrypted and off-chain. Grant metadata is public: wallet addresses, versions, scope hashes, expiry and commitments can still reveal relationships or timing. This prototype does not claim metadata privacy.&lt;/p&gt;

&lt;p&gt;The authorization layer tracks the minimum state necessary to determine whether a particular handoff is still valid.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Authorization {
  owner
  recipient
  scope
  version
  status
  commitment
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part is not the data structure.&lt;/p&gt;

&lt;p&gt;It is what the grant means.&lt;/p&gt;

&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; mean:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Agent B is allowed to know me.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It means something narrower:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Agent B may receive this approved scope and context version through the checked handoff path while the grant is valid. This does not control reuse of plaintext already delivered.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That gives the primitive four properties.&lt;/p&gt;

&lt;h3&gt;
  
  
  Authorized
&lt;/h3&gt;

&lt;p&gt;A recipient must have an explicit grant.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scoped
&lt;/h3&gt;

&lt;p&gt;Permission for one portion of context does not imply permission for everything else.&lt;/p&gt;

&lt;h3&gt;
  
  
  Version-bound
&lt;/h3&gt;

&lt;p&gt;Authorization remains attached to the version that was actually approved.&lt;/p&gt;

&lt;h3&gt;
  
  
  Revocable
&lt;/h3&gt;

&lt;p&gt;The owner can revoke the grant for subsequent requests through the checked handoff path. Revocation cannot recall plaintext already delivered.&lt;/p&gt;

&lt;p&gt;The second and third properties are especially important for AI systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  The version is part of the permission
&lt;/h2&gt;

&lt;p&gt;Traditional access control often asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Does principal B have permission to access resource X?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For AI continuity, that question is incomplete.&lt;/p&gt;

&lt;p&gt;Human context evolves.&lt;/p&gt;

&lt;p&gt;A user may:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;correct a date,&lt;/li&gt;
&lt;li&gt;change a priority,&lt;/li&gt;
&lt;li&gt;withdraw a plan,&lt;/li&gt;
&lt;li&gt;reduce a scope,&lt;/li&gt;
&lt;li&gt;replace an instruction,&lt;/li&gt;
&lt;li&gt;or simply decide that something previously supplied should no longer guide future work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the relevant question becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;May recipient B still obtain scope S of version V through this handoff?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The version is not metadata around the permission.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;It is part of the permission.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is why &lt;code&gt;VERSION_STALE&lt;/code&gt; matters.&lt;/p&gt;

&lt;p&gt;It is not merely an implementation error code.&lt;/p&gt;

&lt;p&gt;It represents a distinction that ordinary persistent memory systems can easily blur:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;information may still exist while the authorization attached to that particular version is no longer current.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Shanhai does — and does not — decide
&lt;/h2&gt;

&lt;p&gt;There is an important boundary here.&lt;/p&gt;

&lt;p&gt;Shanhai does not attempt to autonomously decide whether a human change is “semantically important enough” to invalidate an authorization.&lt;/p&gt;

&lt;p&gt;That would introduce another difficult problem:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Who decides what change in a person's life counts as material?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The current prototype does not answer that.&lt;/p&gt;

&lt;p&gt;Instead, version creation is explicit.&lt;/p&gt;

&lt;p&gt;When the user or application creates a new context version, authorization remains bound to the version that was actually approved.&lt;/p&gt;

&lt;p&gt;In other words, the system proves:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;new version ≠ inherited approval
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It does not claim to automatically infer when human meaning has changed.&lt;/p&gt;

&lt;p&gt;That distinction is deliberate.&lt;/p&gt;




&lt;h2&gt;
  
  
  Friday becomes Saturday
&lt;/h2&gt;

&lt;p&gt;Our hackathon prototype uses fixed fictional material so that the authorization behavior can be tested without using real personal data.&lt;/p&gt;

&lt;p&gt;The scenario is deliberately simple.&lt;/p&gt;

&lt;h3&gt;
  
  
  Version 1 is approved
&lt;/h3&gt;

&lt;p&gt;The owner approves a Friday announcement for a recipient.&lt;/p&gt;

&lt;p&gt;The permitted scope excludes a private planning note and an unapproved suggestion.&lt;/p&gt;

&lt;p&gt;The recipient requests the authorized context.&lt;/p&gt;

&lt;p&gt;The request succeeds.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: v1
status: ACTIVE
decision: ALLOW
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The approved encrypted envelope proceeds through the protected delivery path.&lt;/p&gt;

&lt;h3&gt;
  
  
  The context is corrected
&lt;/h3&gt;

&lt;p&gt;The event moves from Friday to Saturday.&lt;/p&gt;

&lt;p&gt;A new context version is explicitly created.&lt;/p&gt;

&lt;p&gt;The recipient then attempts to rely on the old authorization.&lt;/p&gt;

&lt;p&gt;The result is:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;But the status code itself is not the important result.&lt;/p&gt;

&lt;p&gt;What matters is what does &lt;strong&gt;not&lt;/strong&gt; happen next.&lt;/p&gt;

&lt;p&gt;In the recorded run, the stale request produced:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no new envelope fetch,&lt;/li&gt;
&lt;li&gt;no new decryption,&lt;/li&gt;
&lt;li&gt;no context assembly,&lt;/li&gt;
&lt;li&gt;no downstream gateway call.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the actual authorization boundary.&lt;/p&gt;

&lt;p&gt;A UI that displays a red &lt;code&gt;DENIED&lt;/code&gt; badge while the application continues processing the protected context would not prove very much.&lt;/p&gt;

&lt;p&gt;For authorization to be meaningful:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;the denial has to change execution.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Version 2 receives its own approval
&lt;/h3&gt;

&lt;p&gt;The Saturday version does not automatically inherit the Friday approval.&lt;/p&gt;

&lt;p&gt;The owner explicitly authorizes it.&lt;/p&gt;

&lt;p&gt;Only then does the recipient continue.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: v2
status: ACTIVE
decision: ALLOW
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the rule in executable form:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A correction does not inherit the old approval.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Authorization is revoked
&lt;/h3&gt;

&lt;p&gt;Finally, the owner revokes the recipient's authorization.&lt;/p&gt;

&lt;p&gt;A subsequent request returns:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Again, the protected downstream work does not proceed.&lt;/p&gt;

&lt;p&gt;The recipient still exists.&lt;/p&gt;

&lt;p&gt;The context still exists.&lt;/p&gt;

&lt;p&gt;But the protocol's permission to continue supplying that context does not.&lt;/p&gt;




&lt;h2&gt;
  
  
  Revocation is necessary. Correction is subtler.
&lt;/h2&gt;

&lt;p&gt;Revocation is easy to understand.&lt;/p&gt;

&lt;p&gt;A user says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I no longer want this recipient to have access.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The more interesting case is correction.&lt;/p&gt;

&lt;p&gt;The user may still trust the same recipient.&lt;/p&gt;

&lt;p&gt;They may still want the same task completed.&lt;/p&gt;

&lt;p&gt;They may still want continuity.&lt;/p&gt;

&lt;p&gt;What they no longer want is for the recipient to act on an obsolete version of reality.&lt;/p&gt;

&lt;p&gt;That creates a distinct condition:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;recipient is still valid
scope is still relevant
a previous authorization existed

but

requested version is stale
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The correct answer is neither:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;nor:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;It is:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Version-bound permissions, scoped grants, expiration and revocation are established access-control patterns. This prototype combines them with encrypted context delivery and a recipient-side check before decryption. We claim an implemented and tested composition for this AI context handoff scenario.&lt;/p&gt;




&lt;h2&gt;
  
  
  Authorization must happen before disclosure
&lt;/h2&gt;

&lt;p&gt;Another implementation principle became important during the prototype.&lt;/p&gt;

&lt;p&gt;A recipient should not:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fetch protected context
↓
decrypt it
↓
assemble it
↓
then ask whether access was allowed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By that point the authorization boundary has already failed.&lt;/p&gt;

&lt;p&gt;The protected path should instead look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;verify
↓
ALLOW
↓
fetch
↓
decrypt
↓
assemble
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;while:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;verify
↓
VERSION_STALE / REVOKED
↓
STOP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our current prototype checks authorization before releasing the encrypted envelope, and the independent recipient process checks the authorization state again before decrypting and assembling the context.&lt;/p&gt;

&lt;p&gt;The design rule is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Verify first. Disclose second.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What would falsify the boundary?
&lt;/h2&gt;

&lt;p&gt;The reference path checks authorization at two separate decision points.&lt;/p&gt;

&lt;p&gt;If the sender's read returns &lt;code&gt;VERSION_STALE&lt;/code&gt; or &lt;code&gt;REVOKED&lt;/code&gt;, that request must stop before a new envelope fetch or release. If the recipient's own read returns either denial, it must stop before decryption, context assembly and the controlled gateway call.&lt;/p&gt;

&lt;p&gt;A failed boundary would be a component observing a denial and still performing the downstream operation it is supposed to gate.&lt;/p&gt;

&lt;p&gt;The two reads are snapshots. If the sender observes &lt;code&gt;ACTIVE&lt;/code&gt; and authorization changes before the recipient checks, ciphertext may already have arrived. The recipient can then refuse decryption. State can also change after the last read; the prototype does not make authorization checking and delivery atomic.&lt;/p&gt;

&lt;p&gt;In the two recorded denial requests, the sender observed denial before release, and project instrumentation recorded zero new downstream work. Those records support the tested paths. Chain receipts do not independently prove the off-chain counters.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq4quak91rsf9ont42w5i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq4quak91rsf9ont42w5i.png" alt="Shanhai Continuity architecture showing encrypted context stored off-chain, authorization state on Monad, and AI agents verifying authorization before decrypting or using inherited context." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the property our recorded scenario was designed to test.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Monad?
&lt;/h2&gt;

&lt;p&gt;The obvious engineering question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why not put this in PostgreSQL?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes, you should.&lt;/p&gt;

&lt;p&gt;If one application is the only trust domain, an application database may be entirely sufficient.&lt;/p&gt;

&lt;p&gt;Shanhai is not claiming that every AI permission needs a blockchain.&lt;/p&gt;

&lt;p&gt;The problem changes when context crosses independently controlled applications.&lt;/p&gt;

&lt;p&gt;Imagine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a user,&lt;/li&gt;
&lt;li&gt;a context provider,&lt;/li&gt;
&lt;li&gt;Agent A,&lt;/li&gt;
&lt;li&gt;and Agent B&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;all needing a shared answer to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Is this authorization still valid?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the final authorization record belongs exclusively to Agent B's platform, then the party requesting access also controls the state that determines whether it is allowed access.&lt;/p&gt;

&lt;p&gt;That weakens the meaning of user-owned continuity.&lt;/p&gt;

&lt;p&gt;Our principle is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The party requesting access should not be the final authority on whether access is allowed.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Shanhai therefore uses Monad when the authorization state needs to cross that trust boundary.&lt;/p&gt;

&lt;p&gt;The private context itself remains encrypted and off-chain.&lt;/p&gt;

&lt;p&gt;Monad provides a common authorization state and durable transaction evidence that independent parties can verify.&lt;/p&gt;

&lt;p&gt;So the architecture separates two things:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;private human context
│
│ encrypted
▼
OFF-CHAIN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;authorization state
│
▼
MONAD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The precise claim is therefore not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;blockchain is always better than a database.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;when independent applications need a shared answer to whether a cross-application authorization is still valid, that state should not belong exclusively to the application requesting access.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the role Monad plays in this prototype.&lt;/p&gt;

&lt;p&gt;Or more compactly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Private content. Publicly verifiable authorization state.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why not let every application build its own authorization layer?
&lt;/h2&gt;

&lt;p&gt;They can.&lt;/p&gt;

&lt;p&gt;For a closed application, that may be the right design.&lt;/p&gt;

&lt;p&gt;The interoperability problem begins when a supposedly user-owned context layer crosses product boundaries.&lt;/p&gt;

&lt;p&gt;If every AI application independently keeps a private record saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I am still authorized to use this user's context,&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;then the user's portable context has escaped one silo only to encounter another at the authorization layer.&lt;/p&gt;

&lt;p&gt;A shared primitive becomes useful when applications need a common answer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;owner
recipient
scope
version
current authorization status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;without treating the requester itself as the sole authority.&lt;/p&gt;

&lt;p&gt;This is also why the integration point can remain small.&lt;/p&gt;

&lt;p&gt;Before inherited context is decrypted or assembled, the integration should check the requested grant. The following is conceptual pseudocode, not a shipped SDK API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;verify(
  owner,
  recipient,
  scope,
  version
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The source-level reference entry is &lt;a href="https://github.com/mengxiujie/shanhai-continuity-protocol/blob/main/protocol/reference/owner-web/sprint-runtime.mjs" rel="noopener noreferrer"&gt;createSprintRuntime&lt;/a&gt;, with a &lt;a href="https://github.com/mengxiujie/shanhai-continuity-protocol/blob/main/examples/brief-handoff.mjs" rel="noopener noreferrer"&gt;local example&lt;/a&gt;. It is not a published stable SDK.&lt;/p&gt;

&lt;p&gt;The authorization result determines whether the checked path continues.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Context request
      │
      ▼
Continuity Authorization
      │
 ┌────┼────┐
 ▼    ▼    ▼
ALLOW STALE REVOKED
 │      │      │
 ▼      └──┬───┘
disclose   ▼
          STOP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal is not to build another giant AI platform.&lt;/p&gt;

&lt;p&gt;It is to make this permission boundary composable.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the current prototype actually proves
&lt;/h2&gt;

&lt;p&gt;Precision matters here.&lt;/p&gt;

&lt;p&gt;During the Monad Metropolis build period, we executed a fixed fictional scenario against Monad Testnet.&lt;/p&gt;

&lt;p&gt;The recorded run includes five confirmed state transactions and covers the authorization lifecycle demonstrated above:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v1 authorized → ALLOW
context corrected → old grant becomes VERSION_STALE
v2 authorized → ALLOW
authorization revoked
subsequent request → REVOKED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The public deployment is a read-only evidence verifier.&lt;/p&gt;

&lt;p&gt;It can re-check the recorded transaction receipts against Monad Testnet.&lt;/p&gt;

&lt;p&gt;It does not initiate a fresh wallet-signing ceremony from the browser, and it is not presented as a production authorization network.&lt;/p&gt;

&lt;p&gt;The evidence has two sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Five Monad Testnet receipts establish successful authorization-state transactions and their recorded block alignment.&lt;/li&gt;
&lt;li&gt;Project instrumentation in the original exports records where the tested handoff requests stopped, including zero new downstream work in the two sender-denied requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The public verifier checks the exported hashes and can re-read the transaction receipts. Hash matching preserves the records; it does not independently certify the off-chain instrumentation.&lt;/p&gt;

&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; demonstrate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;production-grade security;&lt;/li&gt;
&lt;li&gt;a completed security audit;&lt;/li&gt;
&lt;li&gt;real-user adoption;&lt;/li&gt;
&lt;li&gt;large-scale developer adoption;&lt;/li&gt;
&lt;li&gt;model quality;&lt;/li&gt;
&lt;li&gt;production identity separation;&lt;/li&gt;
&lt;li&gt;or long-term operational resilience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The scenario uses fictional material.&lt;/p&gt;

&lt;p&gt;The final announcement output uses a fixed template rather than a live AI model.&lt;/p&gt;

&lt;p&gt;The owner-side and request-signing operations in this run used the same test wallet.&lt;/p&gt;

&lt;p&gt;The recipient execution path ran in a separate local process.&lt;/p&gt;

&lt;p&gt;Therefore this experiment does not establish independent human identities or production key separation.&lt;/p&gt;

&lt;p&gt;The property under test is narrower:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;authorization-state enforcement across the protected handoff path.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is what the evidence should be used to evaluate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fozceh5e284gsmoo8er8c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fozceh5e284gsmoo8er8c.png" alt="Authorization flow comparing an ACTIVE request that proceeds through fetch, decrypt, assemble, and delivery with VERSION_STALE or REVOKED requests that stop before downstream disclosure work." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Revocation cannot make a recipient forget
&lt;/h2&gt;

&lt;p&gt;Another boundary deserves to be explicit.&lt;/p&gt;

&lt;p&gt;Once plaintext has legitimately been delivered to another system, a later blockchain transaction cannot guarantee that every existing copy disappears.&lt;/p&gt;

&lt;p&gt;Shanhai does not claim otherwise.&lt;/p&gt;

&lt;p&gt;Revocation means:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;future disclosure through the protected authorization path is no longer permitted.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It does not mean:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;remotely erase every byte previously received.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This distinction matters because “revocable AI memory” can easily become an overclaim.&lt;/p&gt;

&lt;p&gt;The property we are building is a permission boundary, not remote mind erasure or DRM.&lt;/p&gt;

&lt;p&gt;That narrower property is still valuable.&lt;/p&gt;

&lt;p&gt;The existence of information and the continuing authorization to supply or process it are not the same thing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Authorization, not legal consent
&lt;/h2&gt;

&lt;p&gt;We also deliberately use the term &lt;strong&gt;authorization&lt;/strong&gt; rather than claiming to implement legal or regulatory consent.&lt;/p&gt;

&lt;p&gt;Human consent can involve requirements around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;notice,&lt;/li&gt;
&lt;li&gt;comprehension,&lt;/li&gt;
&lt;li&gt;voluntariness,&lt;/li&gt;
&lt;li&gt;capacity,&lt;/li&gt;
&lt;li&gt;purpose limitation,&lt;/li&gt;
&lt;li&gt;jurisdiction,&lt;/li&gt;
&lt;li&gt;and withdrawal semantics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This prototype does not attempt to encode all of those requirements.&lt;/p&gt;

&lt;p&gt;What it implements is narrower:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;a technical authorization state tied to a particular recipient, scope and context version.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That boundary lets us reason precisely about what the system currently does without claiming more than the prototype supports.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where this primitive could fit
&lt;/h2&gt;

&lt;p&gt;The most relevant adopters are not necessarily general consumers.&lt;/p&gt;

&lt;p&gt;They are developers building systems where context crosses recipients and where user intent can change over time.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;personal AI assistants;&lt;/li&gt;
&lt;li&gt;multi-agent systems;&lt;/li&gt;
&lt;li&gt;user-owned AI memory layers;&lt;/li&gt;
&lt;li&gt;enterprise agent workflows;&lt;/li&gt;
&lt;li&gt;and sensitive-domain AI systems where freshness and scope matter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The integration point is concrete:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;before inherited context is decrypted or assembled, verify whether this recipient is still authorized for this scope and this version.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This also answers an important product question.&lt;/p&gt;

&lt;p&gt;Why would another developer use a shared authorization primitive instead of building the same logic internally?&lt;/p&gt;

&lt;p&gt;Our adoption hypothesis is that some independently controlled tools will value a common, independently readable grant record enough to accept its signing, network and integration costs.&lt;/p&gt;

&lt;p&gt;A shared database service or signed-grant design may be sufficient for other workflows. Monad supplies the shared state in this implementation; the prototype does not establish a Monad-specific performance advantage or prove that target developers will choose it.&lt;/p&gt;

&lt;p&gt;External application integration and sustained use remain to be tested.&lt;/p&gt;




&lt;h2&gt;
  
  
  From owning memory to owning continuity
&lt;/h2&gt;

&lt;p&gt;The broader design question is larger than this prototype.&lt;/p&gt;

&lt;p&gt;Much of the discussion around user-owned AI focuses on possession:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can I export my memory?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is necessary.&lt;/p&gt;

&lt;p&gt;But possession alone does not answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who can continue using it?&lt;/li&gt;
&lt;li&gt;Which part?&lt;/li&gt;
&lt;li&gt;Which version?&lt;/li&gt;
&lt;li&gt;Under what current authorization?&lt;/li&gt;
&lt;li&gt;What happens when I change my mind?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This suggests a distinction:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Owning the context is not the same as owning its permission lifecycle.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A truly user-owned context layer should eventually support both.&lt;/p&gt;

&lt;p&gt;Portability determines where information can go.&lt;/p&gt;

&lt;p&gt;Authorization determines whether it may still go there.&lt;/p&gt;




&lt;h2&gt;
  
  
  A small rule with a large consequence
&lt;/h2&gt;

&lt;p&gt;Shanhai Continuity can ultimately be reduced to one principle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A correction does not inherit the old approval.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;From that follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;explicit versioning,&lt;/li&gt;
&lt;li&gt;fresh authorization after version change,&lt;/li&gt;
&lt;li&gt;stale-version rejection,&lt;/li&gt;
&lt;li&gt;scope-bound access,&lt;/li&gt;
&lt;li&gt;revocation,&lt;/li&gt;
&lt;li&gt;and fail-closed disclosure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The mental model changes from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The AI knows this about me.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The next recipient may receive this approved scope and version through the checked handoff path.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a smaller claim.&lt;/p&gt;

&lt;p&gt;It is also a much more controllable one.&lt;/p&gt;




&lt;h2&gt;
  
  
  Evidence
&lt;/h2&gt;

&lt;p&gt;The current prototype and recorded run can be inspected directly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Source repository
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/mengxiujie/shanhai-continuity-protocol" rel="noopener noreferrer"&gt;Shanhai Continuity Protocol — GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the hackathon implementation and the disclosure of the pre-existing Shanhai product context.&lt;/p&gt;

&lt;h3&gt;
  
  
  Live evidence verifier
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://mengxiujie.github.io/shanhai-continuity-proof/apps/demo/brief-evidence.html" rel="noopener noreferrer"&gt;Shanhai Continuity — Monad Testnet Evidence Verifier&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No login or wallet is required.&lt;/p&gt;

&lt;p&gt;The page presents the recorded authorization outcomes and can re-check the five recorded transaction receipts against Monad Testnet.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technical demo
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://youtu.be/nTZoqwLfsjo" rel="noopener noreferrer"&gt;Shanhai Continuity — Technical Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The 69-second technical demo shows a post-run walkthrough of the read-only verifier, including archived evidence and a fresh receipt check. It does not record the original wallet-signing run or a new recipient handoff.&lt;/p&gt;

&lt;h3&gt;
  
  
  Project pitch
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://youtu.be/hig7qjxeCFQ" rel="noopener noreferrer"&gt;Shanhai Continuity — Pitch&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Recorded test sequence
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;approve context v1
deliver authorized v1
create corrected context v2
reject use of stale authorization
separately authorize v2
deliver authorized v2
revoke authorization
reject subsequent access
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Five authorization-state transactions from this recorded run are exposed through the public evidence verifier and can be re-checked against Monad Testnet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Build-window disclosure
&lt;/h2&gt;

&lt;p&gt;The broader Shanhai product direction predates this hackathon.&lt;/p&gt;

&lt;p&gt;The work described in this article concerns the Shanhai Continuity authorization prototype built during the Monad Metropolis hackathon period.&lt;/p&gt;

&lt;p&gt;That hackathon-period work includes the protocol implementation, Monad authorization integration, independent recipient execution path, browser workbench, executed fictional test scenario, and public evidence-verification surface.&lt;/p&gt;

&lt;p&gt;The intention of this disclosure is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the argument in this article should stand on the work actually built and tested for this submission, not on the existence of the broader pre-existing Shanhai project.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What comes next
&lt;/h2&gt;

&lt;p&gt;The next questions are no longer primarily about adding more protocol features.&lt;/p&gt;

&lt;p&gt;They are about whether the primitive survives contact with other developers.&lt;/p&gt;

&lt;p&gt;Among them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can an independent developer reproduce the authorization flow quickly?&lt;/li&gt;
&lt;li&gt;What is the smallest usable integration API?&lt;/li&gt;
&lt;li&gt;Which application events should explicitly create a new context version?&lt;/li&gt;
&lt;li&gt;How should shared scopes be represented across different AI products?&lt;/li&gt;
&lt;li&gt;How should recipients be identified across ecosystems?&lt;/li&gt;
&lt;li&gt;Where should authorization checks sit inside existing agent frameworks?&lt;/li&gt;
&lt;li&gt;How should delegated or derived context inherit — or fail to inherit — authorization?&lt;/li&gt;
&lt;li&gt;How much friction will users tolerate when re-authorizing materially changed context?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those questions need evidence, not speculation.&lt;/p&gt;

&lt;p&gt;The current prototype is meant to make them testable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;AI memory is becoming portable.&lt;/p&gt;

&lt;p&gt;That is useful.&lt;/p&gt;

&lt;p&gt;User-owned context is better.&lt;/p&gt;

&lt;p&gt;But neither concept alone answers what happens after the information changes.&lt;/p&gt;

&lt;p&gt;A system still needs to know:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;May this recipient obtain this approved version of the context through the next handoff?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Our answer is that AI continuity should be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;authorized, scoped, version-bound, and revocable by the human.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Private context can remain off-chain.&lt;/p&gt;

&lt;p&gt;Authorization state can remain independently verifiable.&lt;/p&gt;

&lt;p&gt;A stale or revoked grant can stop downstream disclosure rather than merely changing a label in a database.&lt;/p&gt;

&lt;p&gt;And when a person explicitly changes the context being shared, yesterday's approval should not silently follow.&lt;/p&gt;

&lt;p&gt;Because:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A correction does not inherit the old approval.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The version is not metadata around the permission. It is part of the permission.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And ultimately, the goal is not to make AI forget continuity.&lt;/p&gt;

&lt;p&gt;It is to make continuity answerable to the person it describes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Users should control which approved context reaches the next recipient.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;Shanhai Continuity&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;The permission layer for human-owned AI continuity.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Built on Monad Testnet for the Monad Metropolis Hackathon.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>web3</category>
      <category>blockchain</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
