<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://docs.w3id.org/news/</id>
    <title>w3id.org news</title>
    <updated>2026-10-14T16:19:18.685Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://docs.w3id.org/news/"/>
    <link rel="self" href="https://docs.w3id.org/news/atom.xml"/>
    <subtitle>Announcements about the w3id.org permanent identifier service: the service itself, the rules for contributing, the tooling, and its governance.</subtitle>
    <icon>https://docs.w3id.org/favicon.ico</icon>
    <rights>W3C Permanent Identifier Community Group</rights>
    <entry>
        <title type="html"><![CDATA[A new layout, a rule checker, and a documentation site]]></title>
        <id>urn:uuid:6a632748-c0fc-408b-bd83-886b3141c36a</id>
        <link href="https://docs.w3id.org/news/2026-10-02-checker-and-docs"/>
        <updated>2026-10-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Every identifier now lives under ids/, a checker runs the contribution rules on every pull request, there is a supported local Apache for testing, and the service has a documentation site.]]></summary>
        <content type="html"><![CDATA[<h1 id="a-new-layout-a-rule-checker-and-a-documentation-site" tabindex="-1">A new layout, a rule checker, and a documentation site <a class="header-anchor" href="#a-new-layout-a-rule-checker-and-a-documentation-site" aria-label="Permalink to &quot;A new layout, a rule checker, and a documentation site&quot;">&ZeroWidthSpace;</a></h1>
<p>Several things changed at once. This post covers all of them.</p>
<h2 id="everything-moved-under-ids" tabindex="-1">Everything moved under <code>ids/</code> <a class="header-anchor" href="#everything-moved-under-ids" aria-label="Permalink to &quot;Everything moved under `ids/`&quot;">&ZeroWidthSpace;</a></h2>
<p>The identifier directories used to sit at the top level of the repository,
next to its own files. They are now all under <code>ids/</code>.</p>
<p>Three reasons, in rough order of how often they came up:</p>
<ul>
<li><strong>The repository had outgrown the GitHub web interface.</strong> There were too
many files and directories for it to display.</li>
<li><strong>Basic information about the project was hard to find</strong> among a couple of
thousand identifier directories.</li>
<li><strong>Hosted and non-hosted files were mixed together</strong>, with nothing in the
layout to say which was which.</li>
</ul>
<p>It also clears the way for the rest of this post. Now that everything the
service actually serves is under one directory, tooling can tell the
identifiers apart from the repository's own files without guessing.</p>
<p>If you maintain an identifier, the change is only where the directory lives:
<code>https://w3id.org/my-project/</code> still resolves the same way, and your
<code>.htaccess</code> is unchanged.</p>
<h2 id="contributions-are-now-checked" tabindex="-1">Contributions are now checked <a class="header-anchor" href="#contributions-are-now-checked" aria-label="Permalink to &quot;Contributions are now checked&quot;">&ZeroWidthSpace;</a></h2>
<p>There is a checker in <code>tools/check/</code>. It runs on every pull request and
reports only what your own change is responsible for — findings appear as
comments on the changed lines, with the full report under <em>Checks</em>, and each
one links to a page explaining the rule.</p>
<p>You can also run it by hand, over your own directory or over everything:</p>
<div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> tools/check</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> &#x26;&#x26; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ci</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)   </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># once</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">node</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> tools/check/bin/w3id-check.js</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ids/my-project</span></span></code></pre>
</div><p>It finds thousands of issues across the tree today. They range from the
entirely benign — trailing whitespace, a missing newline at the end of a file
— to <code>.htaccess</code> errors serious enough that an identifier does not resolve at
all. A rewrite rule can look completely reasonable, be written correctly, and
never run.</p>
<p><strong>This needs testing, and the rules need your feedback.</strong> Until now none of
these rules were written down anywhere, so this is the first time most of them
have met the tree. If the checker is wrong about your files, or if it stays
quiet about something it should have caught, that is worth reporting at
<a href="https://github.com/perma-id/w3id.org/issues" target="_blank" rel="noreferrer">https://github.com/perma-id/w3id.org/issues</a>. A rule that produces false
positives is a bug in the rule.</p>
<p>A clean run is necessary but not sufficient. No checker can tell whether your
redirect points where you meant it to.</p>
<h2 id="you-can-run-the-service-locally" tabindex="-1">You can run the service locally <a class="header-anchor" href="#you-can-run-the-service-locally" aria-label="Permalink to &quot;You can run the service locally&quot;">&ZeroWidthSpace;</a></h2>
<p><code>tools/server/</code> has a supported Apache setup, so you can make a request to
your own rules and see what happens, rather than reasoning about it. There are
three ways in: a container, an Apache you already have, or one it builds for you
that needs neither Docker nor root.</p>
<div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> tools/server</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> &#x26;&#x26; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> compose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> up</span></span></code></pre>
</div><p>The point of it is the module list. It loads what the production server loads
and nothing else, so a directive from a module production does not run fails
here too, at the moment you try it, instead of passing locally and breaking on
deploy. It aligns with production rather than matching it exactly —
<a href="https://docs.w3id.org/guides/local-server.html">the guide</a> documents where it departs.</p>
<p>See <a href="https://docs.w3id.org/guides/testing.html">Testing your changes</a> for which method to reach for.</p>
<h2 id="the-documentation-site" tabindex="-1">The documentation site <a class="header-anchor" href="#the-documentation-site" aria-label="Permalink to &quot;The documentation site&quot;">&ZeroWidthSpace;</a></h2>
<p>This site is new. Before it, a single <code>README.md</code> had to explain what a
permanent identifier service is, how Apache rewrite rules work, and what a
good contribution looks like, all at once.</p>
<p>It now holds:</p>
<ul>
<li><a href="https://docs.w3id.org/overview/">What the service is for</a> and, more to the point,
<a href="https://docs.w3id.org/overview/scope.html">what it is not for</a>. Most pull requests that get sent back
are not wrong so much as out of scope — the service redirects, and it does
not host files, serve content, run code, or authenticate anyone.</li>
<li><a href="https://docs.w3id.org/guides/">Guides</a> for the actual tasks:
<a href="https://docs.w3id.org/guides/create-an-id.html">creating an identifier</a> and
<a href="https://docs.w3id.org/guides/maintain-an-id.html">maintaining one</a>, which covers the part nobody
thinks about until it matters — moving your content without breaking the
identifiers other people have published.</li>
<li><a href="https://docs.w3id.org/guides/htaccess.html">Writing <code>.htaccess</code> rules</a>, and
<a href="https://docs.w3id.org/guides/testing.html">how to test them</a>.</li>
<li>The <a href="https://docs.w3id.org/rules/">rule catalogue</a>. Each rule has a page saying what it is, why
it exists, what breaking it actually causes, and how to fix it.</li>
<li>An <a href="https://docs.w3id.org/faq.html">FAQ</a>.</li>
<li><a href="https://docs.w3id.org/news/">News</a>, which is where you are.</li>
</ul>
<h2 id="a-start-on-agent-support" tabindex="-1">A start on agent support <a class="header-anchor" href="#a-start-on-agent-support" aria-label="Permalink to &quot;A start on agent support&quot;">&ZeroWidthSpace;</a></h2>
<p>A growing share of contributions here are machine-generated: confident,
well-formatted, and wrong. The usual failure is treating the service as a file
host, or copying a broken <code>.htaccess</code> from a neighbouring directory on the
assumption that a pattern repeated in hundreds of files must be correct.</p>
<p>So there is now something for agents to read.
<a href="https://github.com/perma-id/w3id.org/blob/master/AGENTS.md" target="_blank" rel="noreferrer"><code>AGENTS.md</code></a> in
the repository is written for them, with <code>CLAUDE.md</code> pointing at it. This site
is built with machine-readable output at
<a href="https://docs.w3id.org/llms.txt" target="_blank" rel="noreferrer"><code>/llms.txt</code></a> and
<a href="https://docs.w3id.org/llms-full.txt" target="_blank" rel="noreferrer"><code>/llms-full.txt</code></a>, and any page is
available as raw Markdown by appending <code>.md</code> to its URL.</p>
<p>This is a first pass and it is thin. Agent skills for the common tasks would
be genuinely useful — <strong>volunteers welcome.</strong> Feedback on what is missing is
just as welcome.</p>
<h2 id="coming-soon" tabindex="-1">Coming soon <a class="header-anchor" href="#coming-soon" aria-label="Permalink to &quot;Coming soon&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li>More documentation.</li>
<li>More rules.</li>
<li>Revisions to the rules that are already here, based on feedback.</li>
</ul>
<p><strong>What would you like to see?</strong> Say so at
<a href="https://github.com/perma-id/w3id.org/issues" target="_blank" rel="noreferrer">https://github.com/perma-id/w3id.org/issues</a>.</p>
<h2 id="corrections" tabindex="-1">Corrections <a class="header-anchor" href="#corrections" aria-label="Permalink to &quot;Corrections&quot;">&ZeroWidthSpace;</a></h2>
<p>This site is built from the <a href="https://github.com/perma-id/w3id.org/tree/master/docs" target="_blank" rel="noreferrer"><code>docs/</code>
directory</a> of the same
repository that holds the identifiers, and every page has an edit link at the
bottom. If something here is wrong, or was true once and is not any more, that
is worth a pull request.</p>
]]></content>
        <category label="Service and operations"/>
        <category label="Tooling"/>
    </entry>
</feed>