From a1d78336c46bc871916bc962edfc1f8835676fc3 Mon Sep 17 00:00:00 2001
From: Anthony Ettinger
Date: Sun, 13 Sep 2026 13:10:58 +0000
Subject: [PATCH] OpenWebring and OpenWiki carry the whole AI Content
Disclosure vocabulary
The W3C AI Content Disclosure community group defines four attributes,
not one: ai-disclosure, ai-model, ai-provider and ai-prompt-url. Both
specs carried only the first, as `disclosure`. They now carry all four,
as `disclosure`, `ai_model`, `ai_provider` and `ai_prompt_url`: which
model, whose, and a page describing how it is used, optional and
meaningful only beside a disclosure other than none. `mixed`, the value
the group's meta tag form allows, is accepted at the site level in
OpenWebring and the page level in OpenWiki.
A ring host copies all of them into the member entry as the member said
them. A wiki carries them on the page and per revision, and a host
rendering a page puts the same four on it as the group's meta tag and
attributes. Both specs are 0.1.1; the wire version stays 0.1, since every
field is additive and absent is still unstated.
Co-Authored-By: Claude Fable 5.1
Claude-Session: https://claude.ai/code/session_01XYae2mH3khdwiXUVzcVMDw
---
apps/logicsrc-web/src/app/openwebring/page.tsx | 10 +++++++---
apps/logicsrc-web/src/app/openwiki/page.tsx | 9 +++++++--
docs/openwebring.md | 11 ++++++++---
docs/openwiki.md | 16 +++++++++++-----
4 files changed, 33 insertions(+), 13 deletions(-)
diff --git a/apps/logicsrc-web/src/app/openwebring/page.tsx b/apps/logicsrc-web/src/app/openwebring/page.tsx
index a41b74af..d5862c01 100644
--- a/apps/logicsrc-web/src/app/openwebring/page.tsx
+++ b/apps/logicsrc-web/src/app/openwebring/page.tsx
@@ -18,6 +18,8 @@ const MEMBER = `{
"author": "https://chovy.com/.well-known/openprofile.md" },
"made_by": "human",
"disclosure": "ai-assisted",
+ "ai_model": "gpt-5.1", "ai_provider": "OpenAI",
+ "ai_prompt_url": "https://chovy.com/ai-methodology#posts",
"rings": [ { "ring": "https://rssamplifier.com/ring/small-web", "slug": "chovy" } ]
}`;
@@ -82,7 +84,7 @@ export default function OpenWebringPage(): ReactNode {
A ring for the human web and a ring for the machine web are the same ring with one field.
- Status: 0.1. The first host is{" "}
+ Status: 0.1.1. The first host is{" "}
rssamplifier.com, one ring per topic out of
the feeds it already reads; the first directory reading rings is{" "}
nichedb.dev/c/webrings. A member owes a ring
@@ -100,8 +102,10 @@ export default function OpenWebringPage(): ReactNode {
rings is the one thing no existing format carries: the
site's own statement of which rings it belongs to. disclosure{" "}
- is optional and uses the W3C AI Content Disclosure vocabulary verbatim, so it maps onto the
- HTML attribute and the IETF header without translation.
+ is optional and uses the W3C AI Content Disclosure vocabulary verbatim, with{" "}
+ ai_model, ai_provider and{" "}
+ ai_prompt_url beside it, so all four map onto the group's HTML
+ attributes and the IETF header without translation.
diff --git a/apps/logicsrc-web/src/app/openwiki/page.tsx b/apps/logicsrc-web/src/app/openwiki/page.tsx
index 71481b38..614b7254 100644
--- a/apps/logicsrc-web/src/app/openwiki/page.tsx
+++ b/apps/logicsrc-web/src/app/openwiki/page.tsx
@@ -19,6 +19,9 @@ summary: What makes a thing spread, and what only looks like it.
author: https://chovy.com/.well-known/openprofile.md
made_by: both
disclosure: ai-assisted
+ai_model: gpt-5.1
+ai_provider: OpenAI
+ai_prompt_url: https://goviral.wiki/ai-methodology#pages
updated: 2026-09-13T12:40:00Z
---
@@ -92,7 +95,7 @@ export default function OpenWikiPage(): ReactNode {
files that say so, and the rules the tools already mostly follow.
- Status: 0.1. A folder that follows this opens unchanged in Obsidian and Logseq, and any
+ Status: 0.1.1. A folder that follows this opens unchanged in Obsidian and Logseq, and any
such folder becomes an OpenWiki by adding the two files. The first host,{" "}
goviral.wiki, is being built on it.
@@ -107,7 +110,9 @@ export default function OpenWikiPage(): ReactNode {
made_by and author describe the page as
it stands; the history carries them per revision. disclosure{" "}
- uses the W3C AI Content Disclosure vocabulary verbatim. redirect{" "}
+ uses the W3C AI Content Disclosure vocabulary verbatim, with ai_model,{" "}
+ ai_provider and ai_prompt_url beside it: the
+ same four a host puts on the rendered page as the group's meta tag and attributes. redirect{" "}
names the page this one now is.
diff --git a/docs/openwebring.md b/docs/openwebring.md
index 9229ed32..f819a673 100644
--- a/docs/openwebring.md
+++ b/docs/openwebring.md
@@ -2,7 +2,7 @@
OpenWebring is a webring that says who made it. A ring is an ordered set of sites with a link from each to the next, the way rings have worked since 1995; what this adds is one file a ring serves about its members, one file a member may serve about itself, and a declaration on every member of whether the site is made by a person, by AI, or by both. A reader who wants only the human web can follow the ring and get it. A reader who wants to see what agents are writing can follow that ring instead. Nobody has to guess, and nobody has to install a script. It is maintained by Profullstack, Inc. as part of the LogicSRC open-standards surface.
-Status: **0.1**. A description of a ring already running, published so any site can host one and any site can join one.
+Status: **0.1.1**. A description of a ring already running, published so any site can host one and any site can join one.
Slug: `openwebring`
@@ -48,6 +48,9 @@ A member may also serve a descriptor at `/.well-known/openwebring.json`:
},
"made_by": "human",
"disclosure": "ai-assisted",
+ "ai_model": "gpt-5.1",
+ "ai_provider": "OpenAI",
+ "ai_prompt_url": "https://chovy.com/ai-methodology#posts",
"rings": [
{ "ring": "https://rssamplifier.com/ring/small-web", "slug": "chovy" }
],
@@ -58,7 +61,8 @@ A member may also serve a descriptor at `/.well-known/openwebring.json`:
- **`site.url`** is the canonical home page, with the trailing slash the site itself uses. It is the identity a ring matches hops against.
- **`site.feed`**, **`lang`**, **`banner`**, **`author`** are what existing rings ask for: a feed so a ring can be read as one river, a language, an 88 by 31 banner for rings that show one, and the person behind the site as an [OpenProfile.md](/openprofile) URL. Absent is unstated.
- **`made_by`** is `human`, `ai` or `both`. `human` means a person makes the content, with tools at most. `ai` means a model or agent makes it, with a person at most pointing it. `both` means a mix the site does not care to split. It is a self-declaration and nothing verifies it; a ring that wants more asks for it in its own terms.
-- **`disclosure`** is finer, optional, and uses the vocabulary of the W3C AI Content Disclosure community group verbatim: `none`, `ai-assisted`, `ai-generated`, `autonomous`, so it maps onto the `ai-disclosure` HTML attribute and the IETF `AI-Disclosure` header without translation. A site that says `made_by: human` and `disclosure: ai-assisted` writes its own words and lets a model tidy them, and says so.
+- **`disclosure`** is finer, optional, and uses the vocabulary of the W3C AI Content Disclosure community group verbatim: `none`, `ai-assisted`, `ai-generated`, `autonomous`, so it maps onto the `ai-disclosure` HTML attribute and the IETF `AI-Disclosure` header without translation. A site that says `made_by: human` and `disclosure: ai-assisted` writes its own words and lets a model tidy them, and says so. A site whose involvement differs page by page may say `mixed`, the value the group's meta tag form allows, and let each page carry its own attributes.
+- **`ai_model`**, **`ai_provider`** and **`ai_prompt_url`** are the rest of that vocabulary, the `ai-model`, `ai-provider` and `ai-prompt-url` attributes under our naming: which model, whose, and a page on the site describing how it is used. Optional, and meaningful only beside a `disclosure` other than `none`. A site that says them on its pages says them here once, and a directory shows them beside the disclosure.
- **`rings`** is the one thing no existing format carries: the site's own statement of which rings it belongs to, each as the ring's URL and the member's slug there. A directory learns a site's rings from the site, and a ring learns a member is still willing from the member.
## The host
@@ -117,7 +121,7 @@ And each ring's own file, at `members_url` (a host with one small ring may put `
- **`accepts`** is the ring's policy on `made_by`: which declarations it admits. Absent means all three. A reader filtering rings for the human web looks for `["human"]`.
- **`join`** is where a site asks in. How is the host's business: a form, a sign-in with the site's own URL, a pull request, or the oldest way, putting the links on the page and clicking one.
-- **`members`** is the list in ring order. Each member is a subset of the member descriptor plus **`status`** (`active`, `inactive`, `pending`), **`since`**, and **`checked`**, when the host last saw the member's link. Order is the hop order and is stable: a member keeps its place until it leaves.
+- **`members`** is the list in ring order. Each member is a subset of the member descriptor, with `made_by`, `disclosure`, `ai_model`, `ai_provider` and `ai_prompt_url` copied as the member said them, plus **`status`** (`active`, `inactive`, `pending`), **`since`**, and **`checked`**, when the host last saw the member's link. Order is the hop order and is stable: a member keeps its place until it leaves.
- **`opml`** is the same members as an OPML 2.0 outline of their feeds, so the ring is a subscription list in one click, and so the tools that already read a ring's OPML read this one.
## Hops
@@ -195,6 +199,7 @@ A host is a table of rings, a table of members with a position, three redirect r
| Version | Date | Change |
|---|---|---|
| 0.1 | 2026-09-13 | First publication: the member, the host, the two files, six hop rules, verification, discovery, what a directory owes a ring. |
+| 0.1.1 | 2026-09-13 | `ai_model`, `ai_provider` and `ai_prompt_url` beside `disclosure`, the rest of the W3C AI Content Disclosure vocabulary; `mixed` allowed at the site level; a host copies all of them into the member entry. |
## License
diff --git a/docs/openwiki.md b/docs/openwiki.md
index 9dbd2d12..a3c023bc 100644
--- a/docs/openwiki.md
+++ b/docs/openwiki.md
@@ -2,7 +2,7 @@
OpenWiki is a wiki that is a folder of Markdown files. One file per page, links between pages written as `[[Page]]`, a small front matter vocabulary at the top of each file, and two files the wiki serves about itself: a descriptor at `/.well-known/openwiki.json` and an index of its pages. Every page is readable as the Markdown it is stored as, every revision of every page is readable the same way, and every revision says who made it: a person, an AI, or both. A folder that follows this opens unchanged in Obsidian, Logseq, and every note tool that already speaks `[[Page]]`, and any of those folders becomes an OpenWiki by adding the two files. It is maintained by Profullstack, Inc. as part of the LogicSRC open-standards surface.
-Status: **0.1**. A description of what the `[[Page]]` convention already is in practice, written down so a wiki can be moved, mirrored, read by a directory and edited by an agent without reading any engine's source.
+Status: **0.1.1**. A description of what the `[[Page]]` convention already is in practice, written down so a wiki can be moved, mirrored, read by a directory and edited by an agent without reading any engine's source.
Slug: `openwiki`
@@ -34,6 +34,9 @@ summary: What makes a thing spread, and what only looks like it.
author: https://chovy.com/.well-known/openprofile.md
made_by: both
disclosure: ai-assisted
+ai_model: gpt-5.1
+ai_provider: OpenAI
+ai_prompt_url: https://goviral.wiki/ai-methodology#pages
created: 2026-09-13
updated: 2026-09-13T12:40:00Z
license: CC-BY-4.0
@@ -51,7 +54,8 @@ Nothing else counts; see [[Vanity metrics#Reach]].
- **`summary`** is one line about the page, for a listing.
- **`author`** is who wrote the page as it stands: an [OpenProfile.md](/openprofile) URL, or a name. Per-revision authorship is in the history, below.
- **`made_by`** is `human`, `ai` or `both`, for the page as it stands. `human` means a person wrote it, with tools at most. `ai` means a model or agent wrote it, with a person at most pointing it. `both` means a mix the page does not care to split. It is a self-declaration and nothing verifies it.
-- **`disclosure`** is optional and uses the W3C AI Content Disclosure vocabulary verbatim: `none`, `ai-assisted`, `ai-generated`, `autonomous`.
+- **`disclosure`** is optional and uses the W3C AI Content Disclosure vocabulary verbatim: `none`, `ai-assisted`, `ai-generated`, `autonomous`, and at the page level `mixed`, for a page whose sections differ.
+- **`ai_model`**, **`ai_provider`** and **`ai_prompt_url`** are the rest of that vocabulary, the `ai-model`, `ai-provider` and `ai-prompt-url` attributes under our naming: which model, whose, and a page describing how it is used. Optional, and meaningful only beside a `disclosure` other than `none`. A host rendering the page puts the same four on it, `` and the attributes on the element that holds the body, so a browser and a crawler read what the file says.
- **`created`** and **`updated`** are dates or timestamps, ISO 8601.
- **`license`** is an SPDX identifier, for the page when it differs from the wiki's.
- **`lang`** is a BCP 47 tag.
@@ -89,14 +93,15 @@ A page named `Going viral` lives at `/going-viral`. The slug is the na
"url": "https://goviral.wiki/going-viral",
"revisions": [
{ "id": "8f3a1c", "at": "2026-09-13T12:40:00Z", "author": "https://chovy.com/.well-known/openprofile.md",
- "made_by": "both", "summary": "K-factor, not reach", "parent": "2b77e0", "bytes": 1840 },
+ "made_by": "both", "disclosure": "ai-assisted", "ai_model": "gpt-5.1", "ai_provider": "OpenAI",
+ "summary": "K-factor, not reach", "parent": "2b77e0", "bytes": 1840 },
{ "id": "2b77e0", "at": "2026-09-12T09:10:00Z", "author": "https://chovy.com/.well-known/openprofile.md",
"made_by": "human", "summary": "First draft", "parent": null, "bytes": 1120 }
]
}
```
-A revision id is opaque. A host backed by git uses the commit; a host backed by a table uses its own. `parent` is the revision this one edited, so a fork of the history is visible as two revisions with one parent. `made_by` is the revision's, and may differ from the page's front matter, which describes the page as it stands.
+A revision id is opaque. A host backed by git uses the commit; a host backed by a table uses its own. `parent` is the revision this one edited, so a fork of the history is visible as two revisions with one parent. `made_by` is the revision's, and may differ from the page's front matter, which describes the page as it stands. So are `disclosure`, `ai_model`, `ai_provider` and `ai_prompt_url`, when the revision says them.
## The wiki
@@ -163,7 +168,7 @@ X-OpenWiki-Summary: Fixed the K-factor formula
X-OpenWiki-Made-By: ai
```
-The body is the whole file, front matter included. `If-Match` is the revision the editor started from; a mismatch is `412` and the editor reads the current file and tries again, which is the only merge rule a wiki has ever had. The answer is `200` with the new revision id in `ETag`, or `201` when the page is new. `X-OpenWiki-Made-By` is the revision's `made_by`; absent is unstated, and a wiki whose `accepts` excludes the value answers `403`. A host that issues tokens with [OpenAccess](/openaccess) names the scope `openwiki:edit`. `DELETE` on a page is a revision that empties it; the history stays.
+The body is the whole file, front matter included. `If-Match` is the revision the editor started from; a mismatch is `412` and the editor reads the current file and tries again, which is the only merge rule a wiki has ever had. The answer is `200` with the new revision id in `ETag`, or `201` when the page is new. `X-OpenWiki-Made-By` is the revision's `made_by`; absent is unstated, and a wiki whose `accepts` excludes the value answers `403`. The page's `disclosure`, `ai_model`, `ai_provider` and `ai_prompt_url` travel in the front matter as saved; a revision that differs from the page says so in `X-OpenWiki-Disclosure`, `X-OpenWiki-AI-Model`, `X-OpenWiki-AI-Provider` and `X-OpenWiki-AI-Prompt-URL`. A host that issues tokens with [OpenAccess](/openaccess) names the scope `openwiki:edit`. `DELETE` on a page is a revision that empties it; the history stays.
An agent editing a wiki is a program reading a Markdown file and putting it back. That is the whole API, and it is the same one a person's editor uses.
@@ -217,6 +222,7 @@ A host is a folder, a way to render a Markdown file, two JSON files it can gener
| Version | Date | Change |
|---|---|---|
| 0.1 | 2026-09-13 | First publication: the page and its front matter, wikilinks and how they resolve, three representations at one URL, the history, the two files, editing as `PUT`, discovery, what a directory owes a wiki. |
+| 0.1.1 | 2026-09-13 | `ai_model`, `ai_provider` and `ai_prompt_url` beside `disclosure` on pages and revisions, the rest of the W3C AI Content Disclosure vocabulary; `mixed` at the page level; a host renders the four as the group's meta tag and attributes. |
## License