Changelog
Every change to the field set, the enums and the declaration format. Dated, version-stamped, newest first.
How to rely on this
Additive only, with notice
New fields and new enum values may be added at any time. Existing fields are not removed or repurposed without 90 days' notice published here first. A changelog on its own records what changed; this is the promise that what you build against will keep working.
Pin to a version string if you need to. Each entry carries one.
2026-11-06 · v1.10.0
Record page and structured data
- A record's opening paragraph now says where the Creator publishes, with each handle linked to its profile, then their platform's own account year and post total where the platform states them, their topics and post formats in plain words, and their audience. Every statement is left out when we hold no evidence for it.
- A platform is called primary only when its audience is more than 30% larger than the next, and leading when it is larger by 30% or less, using the exact counts. The combined audience is added from those counts and banded once.
- Account control is stated only for accounts the Creator signed in to through the platform, and it never makes an audience figure verified. "Within the last 30 days" appears only while every count it covers is that recent.
- Where the platform states it, the paragraph names the account's own post formats (a video is never called a Reel), links one of the Creator's posts (their single pinned post, or one from the last 30 days), lists any credential the Creator published as theirs, and gives recent average and median views and engagement by followers for the leading account, or for both of a close pair.
- An audience figure is said to be "verified directly with" a platform only when that platform's API returned the figure printed; otherwise it is a public count.
- The paragraph no longer lists hashtags or says "approximately".
- JSON-LD description is now that paragraph, without its citation marks. It is still a string. No other field changed shape.
2026-11-05 · v1.9.0
Record page and categories
- A record can show a Content format row under Known for: up to two of the Content Genome's 21 formats (a tutorial, a review, a vlog, a skit), strongest first, read from the account's public posts and labelled Sourced. A Creator does not state one. A record whose posts we have not read shows "Not established".
- The Content Genome is now version 1.2, with 32 primary topics instead of 25, so JSON-LD knowsAbout and the topic pages can carry the new names. The 25 existing topics keep their names and addresses, and so does every existing sub-niche page.
- No existing field changed shape.
2026-11-04 · v1.8.0
Formats, search and structured data
- A page answers in HTML unless the request's Accept header prefers Markdown. A tie, a missing header or q=0 gets HTML. The user agent no longer decides, so a fetcher that asks for HTML gets HTML. ?mode=agent and each page's index.md still give Markdown.
- A handle now addresses a record when its platform is named: /{platform}/{handle}, such as /instagram/x2.gabriel, redirects (301) to the record that holds that account today, and an unknown handle redirects to a search for it. The record's address is still its SPRK-ID, and that is still the key to store: a handle can change.
- /search/?q= now has its results in the page's HTML, for readers that run no script. A results page is noindex, follow. The query forms it takes are in llms.txt.
- A record with exactly one handle its owner confirmed by sign-in or code names it in its <title> and at the start of its description, and in JSON-LD alternateName (as @handle) when it has no preferred name. alternateName is still a string.
- JSON-LD description says a Creator "describes their content as" a topic they chose, rather than reporting it as what their posts are about.
- The description's AI sentence is about the person's identity, not the page: "AI use of their identity subject to terms." and "No AI use of their identity." The record page can still be read, indexed and cited.
- Notice: on or after 2027-02-02, JSON-LD identifier.propertyID changes from SPRK-ID to SPRK, the label the declaration already uses, and alternateName may become a list (the preferred name and every confirmed handle). The value and shape stay as they are until then.
2026-11-04 · v1.7.1
Record page
- Notable work can now show an Instagram account's most-viewed Reel, above its most-liked post. The count is Instagram's own, read through the Creator's sign-in and marked Verified, so it appears only when the Creator let us read their Instagram insights. Only Reels count, because Instagram shows a Reel's views publicly and a photo's not at all. A post whose counts the Creator hid is never shown.
- About this record now says a platform can show up to two figures, not one.
- No field or enum in the structured data changed.
2026-10-16 · v1.7.0
Structured data
- The record's JSON-LD ProfilePage now carries mentions: one WebPage per account the audience table shows a figure for, with the account's url and about pointing at the record's Person.
- Its description leads with the figure's confidence label, then the band, the source and the date, as in Sourced: 150K–180K followers. Source: Public profile page. As of 28 Jul 2026. Read the label from the text before the first colon.
- These are not interactionStatistic on the Person. That property is for followers on the site hosting the profile, and these figures come from other platforms. There is no follower count either: audience figures are published as ranges, and an integer would claim a precision the record does not have.
- An account carrying the platform's own badge, such as a blue tick, ends with Platform badge: yes. That is not a confidence label: Verified is.
2026-10-16 · v1.6.2
Documentation
- The For AI & Search page said prohibited rules out indexing for AI answers. It doesn't, and never has in the declaration: it rules out generating and training on the Creator, and the record page can still be read, indexed and cited. The page now says so, matching every record's license.xml and llms.txt.
- No declaration changed, so no registration-id changes.
2026-10-15 · v1.6.1
Declaration format
- The record page's RSL 1.0 <content> element now permits all when all six scopes are Allowed. It permitted ai-all, which covers ai-train, ai-input and ai-index but not search, so a record whose Creator allowed everything granted search less than the site default does. Every other record is unchanged.
- No registration-id changes, because no Creator's terms changed.
2026-10-07 · v1.6.0
Structured data
- The record's JSON-LD now emits each handle by how it was established. sameAs lists only the handles the owner confirmed through a platform sign-in or a one-time code (Verified). An unclaimed record, or a link the owner pasted, has none there. sameAs used to carry an unclaimed record's own sourced account.
- Every other handle is an identifier value of the same Person, on a new ProfilePage.about node that names it by @id, so a JSON-LD reader merges them. Each is a PropertyValue: propertyID is the platform, value the handle, url the profile, and description its label (Sourced or Stated) and that it is not independently confirmed. Person.identifier itself is unchanged: one object, the SPRK-ID.
- A link that names no account (a video, a chat link, a share link) is never emitted as a handle, and profile URLs lose share trackers such as si and utm_*.
- dateCreated and dateModified carry a time and a zone (ISO 8601), for example 2026-09-24T07:12:34Z. They were bare dates. Every other page's dateModified does the same. Sitemap lastmod stays a date.
- The Person has an @id: the record URL with #person.
2026-09-29 · v1.5.0
Declaration format and new files
- Each claimed record publishes its terms as an ODRL 2.2 policy at /{SPRK-ID}/odrl.json. There is one rule per declared scope: Allowed permits, Conditional permits with an obtainConsent duty, and Prohibited prohibits. A scope with no terms gets no rule. The Creator is its assigner.
- New: /.well-known/tdmrep.json. tdm-reservation is 0 only for a record whose six scopes are all Allowed, and 1 for everything else, including unclaimed records. A reserved record names our TDM policy, /tdm-policy.json, in tdm-policy. It permits tdm:mine with an obtainConsent duty, and Sparkonomy is its assigner, because we publish the page. A Creator's rights over their identity stay in their own odrl.json.
- Record pages carry <meta name="tdm-reservation"> and, when reserved, <meta name="tdm-policy">. The matching HTTP headers are not sent yet.
- The record's JSON-LD ProfilePage carries license (the declaration) and usageInfo (the ODRL policy). The Person's subjectOf names the declaration and the consent certificate.
- license.xml carries <sprk:certificate>, a child of <rsl> in the https://creatorgraph.sparkonomy.com/ns/certificate namespace, with the certificate's id, URL and verify link. The ODRL policy carries the same as sprk:certificate. Both are absent until a certificate is issued.
- Each row of the consent table carries data-scope and data-status (none, allowed, conditional or prohibited), so a parser does not need the CSS classes.
2026-09-29 · v1.4.2
Declaration format
- The record page's RSL 1.0 <content> element now has two outcomes. It permits ai-all when all six scopes are Allowed. Anything else, including a scope that is Prohibited or has no terms, gets the site default: it permits search, ai-input and ai-index and prohibits ai-train. It used to prohibit ai-all when any scope was Prohibited or had no terms.
- Prohibited rules out generating and training on the person. It does not restrict reading or citing the record. The per-scope <hcs:right> blocks are unchanged.
- Every <content> element, on the root /license.xml and on each record, now names Sparkonomy as the page's publisher: a <copyright> for Sparkonomy Pte. Ltd. with contactEmail and contactUrl, a <terms> at /license.txt, and mailto:creator.graph@sparkonomy.com as its contact. A record page's <content> used to point its terms and contact at the Creator's record.
- <terms> is now a sibling of <license>, as RSL 1.0 3.1 and HCS 3.1 require. It was inside <license>, both in <content> and in every Conditional <hcs:right>.
- Terms are files, not page anchors. Each claimed record now publishes /{SPRK-ID}/license.txt, its terms in words, generated from the same stances as its declaration. A Conditional right's <terms> and <payment><custom> point there instead of #licence on the record page. The root /license.txt carries our reuse terms in full, and every <content> element's <terms> points at it.
- No registration-id changes, because no Creator's terms changed.
2026-09-28 · v1.4.1
Declaration format
- issued is now when the Creator declared these terms, not when the record was last saved. Before, a declaration's registration-id could differ from the one its consent certificate names.
- subject-id stays the one the certificate was issued under, even after the record's addressing account changes.
- Where either differed, those registration-ids change once and the old lookup records are retired. No Creator's terms changed.
2026-09-28 · v1.4.0
Declaration format
- Conditional now permits, bound to its <payment> clearance route. HCS evaluates every term in a declaration together, so under v1.3.0 a conforming parser read the prohibition and the route granted nothing: Conditional was indistinguishable from Prohibited. The meaning is unchanged, "ask first". Allowed and Prohibited are unchanged.
- The record page's RSL 1.0 <content> element now has three outcomes. It permits ai-all when all six scopes are Allowed and prohibits it when any scope is Prohibited or has no terms. Otherwise, with Conditional alone or mixed with Allowed, it permits search, ai-input and ai-index and prohibits ai-train.
- The root /license.xml default, which is the only RSL signal an unclaimed record has, now permits search, ai-input and ai-index and prohibits ai-train. It prohibited ai-all, which also hid unclaimed Creators from AI answers and indexing, contrary to the reuse terms on /for-ai-and-search#reuse.
- max-age is now 30 days, down from 90, on every declaration and every registry lookup record (maxAge). Re-check anything you cache at least every 30 days. YouTube's API terms cap stored data at 30 days, and a consent window may not outlast the data it governs. The 90 days' notice for field changes is a separate clock and is unchanged.
- No registration-id changes, because no Creator's terms changed.
2026-09-05 · v1.3.0
Declaration format
- The identity declaration moved from RSL-MEDIA to HCS 1.0. RSL Media became the Human Consent Foundation in August 2026 and republished the same vocabulary under a new name, so <media:right> is now <hcs:right>, the namespace is https://humanconsent.org/hcs, and the tokens are hcs:ai-generate and hcs:ai-train. The six scopes, the four stances and the per-facet model are unchanged.
- registry-id is replaced by registration-id (this declaration) and subject-id (the person). Both are issued by our own registry and resolve under /registry/. Key on subject-id: it survives a handle change, and a new registration-id is minted whenever the terms are edited. The SPRK-ID is unchanged and still on the page and in the declaration's <schema>.
- scope is now subject-scope.
- Conditional now prohibits and carries a <payment> route, where it previously permitted and carried the same route. The meaning documented on /for-ai-and-search has not changed — "ask first" — but a parser that ignored <payment> used to read it as an unconditional grant.
- issued is now the time this declaration was issued, and the date the terms began to apply moved to valid-from. A Creator who reverses their stance no longer publishes the reversal under the date the permission it reverses was granted. Both are RFC 3339.
- status="active" is now stated rather than left to the default.
- Each declaration also carries a plain RSL 1.0 <content> element about the record page, permitting ai-all only when all six scopes are Allowed. HCS voids a declaration containing any usage token but its own two, so it could not live inside the right.
- The root /license.xml is a valid RSL document. It used an <index> element that RSL 1.0 does not define; the sitemap and changelog pointers it carried are in robots.txt, and it now states the site-level default.
- Every page's licence link is rel="license" type="application/rsl+xml", and a record page points at its own declaration rather than at the site index. Declarations are served as application/rsl+xml.
- A declaration whose terms are withdrawn is deleted from the bucket on the next publish, instead of being served until something swept it.
2026-08-11 · v1.2.0
Declaration format
- The identity declaration moved from RSL 1.0 <content> to RSL-MEDIA <media:right subject="identity">. RSL 1.0 describes a file at a URL; identity consent has to describe a person wherever they appear.
- AI consent is now declared per facet across six standard scopes: name, image, likeness, voice, movement, signature.
- The summary badge is lossy by design: Allowed only when all six are Allowed, Prohibited only when all six are Prohibited, Conditional for any mix. Read the per-facet blocks, never the badge.
- isrd is deliberately omitted while the Registration Authority is not operating.
- Unclaimed records emit no declaration at all. Absence is never permission.
2026-07-28 · v1.0.0
First public field set
- Record fields, provenance vocabulary (verified > sourced > stated) and the 25-slug content taxonomy published.
- Flat record URLs at /{SPRK-ID}. SPRK-IDs are permanent, and a handle never addresses a record.
- Removed records return HTTP 410.