<?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: Derive World</title>
    <description>The latest articles on DEV Community by Derive World (@deriveworld).</description>
    <link>https://dev.to/deriveworld</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%2F4234440%2Fb67fab04-79f5-4049-a3b6-46eb7a8a43d6.png</url>
      <title>DEV Community: Derive World</title>
      <link>https://dev.to/deriveworld</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/deriveworld"/>
    <language>en</language>
    <item>
      <title>The Hard Part of AI World-Building Isn't Generation — It's Authority</title>
      <dc:creator>Derive World</dc:creator>
      <pubDate>Mon, 09 Nov 2026 08:20:28 +0000</pubDate>
      <link>https://dev.to/deriveworld/the-hard-part-of-ai-world-building-isnt-generation-its-authority-25hh</link>
      <guid>https://dev.to/deriveworld/the-hard-part-of-ai-world-building-isnt-generation-its-authority-25hh</guid>
      <description>&lt;p&gt;&lt;em&gt;How we built a versioned, permission-scoped world runtime where a Personal AI can propose but never approve.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A model can generate a convincing world description in seconds. Turning that description into something a person can enter, change, share, and derive is a different problem. The hard part is not generation. It is authority: who can change the object, which version they changed, who approved it, and what happens when someone derives from it.&lt;/p&gt;

&lt;p&gt;Derive World is an open-source foundation for Living Objects: shared, versioned worlds that a person and their Personal AI can create, change, derive from, and trace through an explicit lineage. v0.2.0 is the second public release and the V2 product stage. This article is a technical look at the model behind it, not a launch announcement.   &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk2mmoxddd5y688t0uel7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk2mmoxddd5y688t0uel7.gif" alt="Derive World v0.2.0 in Fixture mode — create, approve, enter, change, derive" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Real v0.2.0 product in Fixture mode: a newcomer describes a world, approves the plan, enters it, asks the Personal AI to change it, and derives an independent branch. Fixture mode is deterministic demo data; it calls no model and is not real AI. The &lt;a href="https://raw.githubusercontent.com/QiyanAI/derive-world/main/docs/assets/demo-v02-17s.webm" rel="noopener noreferrer"&gt;full recording&lt;/a&gt; is also available.&lt;/em&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  The failure mode of chat-shaped objects
&lt;/h2&gt;

&lt;p&gt;A chat transcript is not, by itself, a versioned object. It typically has no explicit membership model, no permission boundary, no immutable snapshot, and no lineage unless the surrounding system adds them. If the same AI can propose a change and apply it, the system cannot answer a basic audit question: who authorized this state?&lt;/p&gt;

&lt;p&gt;We wanted the AI to be a contributor, not an authority. The rule is simple to state and harder to enforce: a Personal AI can propose a change or a derive; only a human can approve it.  &lt;/p&gt;

&lt;h2&gt;
  
  
  One object model, several surfaces
&lt;/h2&gt;

&lt;p&gt;A world is not a page and not a chat thread. It has content, state, variables, permissions, versions and lineage. The same world can run as a time-based 2D live scene, a readable interactive story, an editable workspace, a visual space, uploaded images or video, uploaded or procedural audio, a 3D scene with client-side gravity and collisions, or a bounded declarative custom surface. Tabs can combine several surfaces. All of them share one content, state, variable, permission, version and lineage model. &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Create with your words&lt;/th&gt;
&lt;th&gt;Derive an independent child&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&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%2F0dk33q942u7l40u599uj.jpg" alt="Create a world from a sentence — Fixture" width="800" height="500"&gt;&lt;/td&gt;
&lt;td&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%2Fke9hhpffy4v24i0kprxy.jpg" alt="An independent derived world — Fixture" width="800" height="500"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Both screenshots are from the real v0.2.0 product in Fixture mode. Fixture calls no model and is not real AI.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;That decision has a cost: every surface has to fit the same versioning and permission rules. It also has a payoff: a world does not become a different product category when its form changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rule 1: one proposal, one version increment
&lt;/h2&gt;

&lt;p&gt;Ask for a change in natural language. A bound Personal AI reads the current world state and version, proposes one mergeable change, and waits. The proposal is inert until a human applies it. Each applied change increments the version exactly once, keeps existing thing ids, survives a refresh, and rejects conflicts instead of overwriting. &lt;/p&gt;

&lt;p&gt;Two implementation details matter more than they look:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;State changes require &lt;code&gt;expected_version&lt;/code&gt;. A conflicting write returns &lt;code&gt;409 version_conflict&lt;/code&gt;; it does not silently overwrite. The rule lives in the server, not in the model prompt. &lt;/li&gt;
&lt;li&gt;The model output is bounded. One model output is capped at 8 KiB, object state at 64 KiB, and one creation confirmation at 12 KiB. The bound forces a proposal to be small enough to review, and it prevents a model from dumping an unreviewable world in one response. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The real-model evidence is deliberately narrow: three consecutive natural-language modifications were recorded on release candidate &lt;code&gt;4962b9b&lt;/code&gt;, each producing one proposal, human approval, exactly one version increment, retained thing ids and refresh persistence. The tagged &lt;code&gt;v0.2.0&lt;/code&gt; tree differs by documentation and release fixes; those flows were not re-run on the exact tag.   &lt;/p&gt;

&lt;h2&gt;
  
  
  Rule 2: the model writes a brief; the server composes the world
&lt;/h2&gt;

&lt;p&gt;A user describes a world in their own words. The Personal AI writes a compact world brief, and a server-side composer expands it into real content, state and experience. The proposal is validated before it is stored, and nothing is created until the human approves it. A new world opens private. &lt;/p&gt;

&lt;p&gt;The split is intentional. The model does not write arbitrary runtime code or raw page markup. A free world's content is declarative data; the server interprets every value and never executes user code, loads external URLs, fonts or scripts, or opens network access. &lt;/p&gt;

&lt;p&gt;This is also why form extensions are module changes, not per-world pages. All five capabilities are exposed through one Broker; capability registration is configuration-only, with no runtime registration or arbitrary provider URL. &lt;/p&gt;

&lt;h2&gt;
  
  
  Rule 3: derivation is an immutable snapshot, not a pointer
&lt;/h2&gt;

&lt;p&gt;A derive creates an independent child from an immutable snapshot of the current version at the whole-world level. The parent is not modified, and the child keeps a recorded, permission-clipped ancestry. Later edits to the parent do not propagate. Derivation is not per-entity in v0.2.0.  &lt;/p&gt;

&lt;p&gt;This is the part that makes provenance useful. A branch is not a mutable view of the parent; it is a new object with its own version history. The ancestry is permission-clipped: objects you cannot read are never named. The trade-off is deliberate — whole-world derivation is simpler to reason about than partial merges. &lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture around the model
&lt;/h2&gt;

&lt;p&gt;The reference deployment is Docker Compose: a Go service, PostgreSQL with schema 11 (36 tables), and the built web client. The default Compose stack binds to loopback only.  &lt;/p&gt;

&lt;p&gt;The developer surface is concrete:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenAPI 3.1 contract: &lt;code&gt;api/openapi/openapi.yaml&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;Typed TypeScript SDK with zero runtime dependencies: &lt;code&gt;sdk/typescript&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;Five frozen capabilities: &lt;code&gt;object.read&lt;/code&gt;, &lt;code&gt;object.context&lt;/code&gt;, &lt;code&gt;object.propose_change&lt;/code&gt;, &lt;code&gt;object.derive&lt;/code&gt;, &lt;code&gt;content.structure&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;Configuration-only capability registration: &lt;code&gt;capabilities.yaml&lt;/code&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The permission boundary is enforced on the server. A caller without read permission receives 404, not 403; a public snapshot is a stored, sanitized copy. Public publication is opt-in, and contributor consent is required when other people contributed to the published version.  &lt;/p&gt;

&lt;p&gt;Provider transport is treated as part of the trust boundary: response signing, verified TLS, HMAC key rotation, per-call model ceilings, per-user daily budgets, and a deployment-wide stop. A tampered or unsigned provider response is treated as an unknown result. &lt;/p&gt;

&lt;h2&gt;
  
  
  What we deliberately did not build
&lt;/h2&gt;

&lt;p&gt;The limitations are part of the design, not a footnote:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Single instance.&lt;/strong&gt; Publication, derivation and social features are scoped to one instance; there is no cross-instance federation, public import or horizontal scaling. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No simultaneous co-editing.&lt;/strong&gt; The object workspace uses an authenticated SSE refresh signal with a polling fallback; version conflicts are reported instead of silently overwriting. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bounded forms.&lt;/strong&gt; World content is declarative 2D and 3D surfaces with uploaded media and simple client physics; it has no network access, arbitrary code, live multiplayer sync, or arbitrary video generation. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real AI is scoped.&lt;/strong&gt; Real-model evidence is limited to documented flows on DeepSeek &lt;code&gt;deepseek-flash&lt;/code&gt;; the release makes no general provider claim. Fixture mode is deterministic demo data, calls no model, and is not real AI.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not production.&lt;/strong&gt; This is a self-hostable OSS MVP, not a production platform. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are evaluating the runtime for a hardened deployment, those boundaries should be the first thing you test.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would inspect first
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;README.md&lt;/code&gt; — the supported Compose path and the Fixture and real-model mode distinction; Fixture is not real AI.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SHOWCASE.md&lt;/code&gt; — the Create → Experience → Change → Derive → Share loop.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;docs/en/limitations.md&lt;/code&gt; — the exact caps and the honest scope.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;api/openapi/openapi.yaml&lt;/code&gt; — the OpenAPI 3.1 contract.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;capabilities.yaml&lt;/code&gt; — the frozen capability registration.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sdk/typescript&lt;/code&gt; — the typed SDK.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Run it locally in Fixture mode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/QiyanAI/derive-world.git
&lt;span class="nb"&gt;cd &lt;/span&gt;derive-world
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
docker compose up &lt;span class="nt"&gt;--build&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;a href="http://127.0.0.1:8080" rel="noopener noreferrer"&gt;http://127.0.0.1:8080&lt;/a&gt;, register a local account, describe a world, approve the plan, enter it, ask for one change, and derive a branch. Fixture mode needs no model account.  &lt;/p&gt;

&lt;p&gt;The &lt;a href="https://qiyanai.github.io/derive-world/showcase/tour/" rel="noopener noreferrer"&gt;online product tour&lt;/a&gt; is a static page built from real v0.2.0 Fixture screenshots with a clearly labelled simulation; it is not a live AI service. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/QiyanAI/derive-world" rel="noopener noreferrer"&gt;github.com/QiyanAI/derive-world&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Showcase:&lt;/strong&gt; &lt;a href="https://github.com/QiyanAI/derive-world/blob/main/SHOWCASE.md" rel="noopener noreferrer"&gt;SHOWCASE.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full recording (Fixture):&lt;/strong&gt; &lt;a href="https://raw.githubusercontent.com/QiyanAI/derive-world/main/docs/assets/demo-v02-17s.webm" rel="noopener noreferrer"&gt;demo-v02-17s.webm&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have built a versioned AI object or a derivation system, I would like to compare notes on the approval boundary. The interesting question is not whether the model can generate a world. It is whether you can explain, a week later, who changed it and why.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>architecture</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
