Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
a114a7f
spec(core): add instance_id to records and make client IDs pairwise
tnunamak Oct 6, 2026
727c892
spec(core): report freshness per instance as a success timestamp
tnunamak Oct 6, 2026
929b500
spec: define request resolution and add access and MCP profiles
tnunamak Oct 6, 2026
a845f4b
spec(access): list presentation inputs and carry freshness over MCP
tnunamak Oct 6, 2026
22f95b5
spec(mcp): define freshness and presentation-input result paths
tnunamak Oct 11, 2026
a0090ee
spec(mcp): explain child rediscovery after re-authorization
tnunamak Oct 11, 2026
1a9095b
fix(spec): align reference sync and instance resolution
tnunamak Oct 11, 2026
8957a4d
fix(spec): reconcile access profile selection and identifiers
tnunamak Oct 11, 2026
0731a05
spec(core): distinguish empty sync results from an empty store
tnunamak Oct 11, 2026
b60a877
spec(access): define the presentation inputs JSON array
tnunamak Oct 11, 2026
df8b11b
spec(core): count the conditional freshness metadata member
tnunamak Oct 11, 2026
a7d1163
spec(access): scope fan-out inputs to presentation results
tnunamak Oct 11, 2026
f7cbf40
spec(core): make AI training a closed processing permission
tnunamak Oct 13, 2026
a6db443
spec(core): define what ending a grant does to data the client holds
tnunamak Oct 13, 2026
dbf0132
spec(core): scope restore safety to declared paths and close held-dat…
tnunamak Oct 14, 2026
e2ca4c5
spec(access,mcp): include owner-chosen subject IDs; scope MCP forwarding
tnunamak Oct 14, 2026
76afdf1
spec(core): resend a record whose reference was redacted mid-session
tnunamak Oct 14, 2026
4ad0581
spec(core): scope the multi-grant result rule to companion credentials
tnunamak Oct 14, 2026
991396e
spec(core): scope AS item 44 and pairwise reassignment to declared paths
tnunamak Oct 14, 2026
0691e47
spec(core): point resources[] at the Section 4 canonical key form
tnunamak Oct 14, 2026
3d78a97
spec(core): index issuer retention as client item 28
tnunamak Oct 14, 2026
ad3c1d1
spec(mcp): state the single_use limit on separated-resource forwarding
tnunamak Oct 14, 2026
853be3f
spec(core): state the owner-token scope of the reference catch-up
tnunamak Oct 14, 2026
c7c9b2c
spec(core): require a registered permission for independent-recipient…
tnunamak Oct 14, 2026
9ea4d5c
spec: add the authorization privacy boundary; carry required_fields t…
tnunamak Oct 14, 2026
82bdfc7
spec(core): state that the provider_native source check is owner-inde…
tnunamak Oct 14, 2026
c7151cd
spec(core): add independent-recipient conformance cases and close wor…
tnunamak Oct 14, 2026
e3e68b8
spec: treat private-declaration infeasibility as eligibility; scope t…
tnunamak Oct 14, 2026
66bc1de
spec(core): settle owner destinations, hosted providers and change of…
tnunamak Oct 14, 2026
a524d9e
spec(core): align AS items 2 and 27 with the authorization privacy bo…
tnunamak Oct 14, 2026
96c6f22
Merge rev/instance-identity (#387) into rev/instance-freshness (#388)
tnunamak Oct 14, 2026
9638aa9
Merge rev/instance-freshness (#388) into rev/access-extension (#390)
tnunamak Oct 14, 2026
9dc62ec
Merge rev/access-extension (#390) into rev/presentation-inputs (#391)
tnunamak Oct 14, 2026
8a06b42
Merge rev/presentation-inputs (#391) into rev/processing-permissions …
tnunamak Oct 14, 2026
70eb595
Merge rev/processing-permissions (#400) into rev/held-data (#401)
tnunamak Oct 14, 2026
d41f3cd
spec(core): apply held-data prototype findings
tnunamak Oct 14, 2026
2f70e15
spec(core): scope revocation dispositions to every covered grant and …
tnunamak Oct 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions apps/site/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ node_modules/
/content/docs/spec-collection-profile.mdx
/content/docs/spec-connector-ecosystem.mdx
/content/docs/spec-core.mdx
/content/docs/spec-access-extension.mdx
/content/docs/spec-mcp-profile.mdx
/content/docs/spec-data-query-api.mdx
/content/docs/spec-discovery-and-trust.mdx
/content/docs/governance.mdx
Expand Down
2 changes: 2 additions & 0 deletions apps/site/content/docs/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
"pages": [
"---Specification---",
"spec-core",
"spec-access-extension",
"spec-mcp-profile",
"spec-ext-lexical-search",
"spec-ext-aggregation",
"spec-semantic-retrieval-extension",
Expand Down
10 changes: 10 additions & 0 deletions apps/site/next.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,16 @@ const nextConfig = {
permanent: true,
source: "/spec-collection-profile",
},
{
destination: "/specification/spec-access-extension",
permanent: true,
source: "/spec-access-extension",
},
{
destination: "/specification/spec-mcp-profile",
permanent: true,
source: "/spec-mcp-profile",
},
{
destination: "/specification/spec-architecture",
permanent: true,
Expand Down
9 changes: 8 additions & 1 deletion apps/site/scripts/sync-spec-docs.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,14 @@ const headerDir = path.join(siteDir, "spec-headers");
// Non-spec docs (reference-implementation*, open-questions, extension specs,
// index, README) live only under content/docs and are NOT touched here.
const SPECS = [
"spec-access-extension",
"spec-architecture",
"spec-auth-design",
"spec-change-tracking",
"spec-collection-profile",
"spec-connector-ecosystem",
"spec-core",
"spec-mcp-profile",
"spec-data-query-api",
"spec-discovery-and-trust",
];
Expand Down Expand Up @@ -74,7 +76,12 @@ function toMdxSafe(body) {
// as the start of a tag name; `)` cannot start a tag name, so the parse
// fails. Backtick-quoting it (already how this table quotes every other
// token) makes the comparison operator literal.
.replace("(exclusive, <), evaluated", "(exclusive, `<`), evaluated"));
.replace("(exclusive, <), evaluated", "(exclusive, `<`), evaluated")
// MDX does not accept HTML comments (`<!--` fails as a tag name). The
// root specs use single-line editorial markers such as
// `<!-- OWNER DECISION OD-4 -->` next to a value; carry them into the
// site copy as MDX comments so they stay invisible there too.
.replace(/<!--[ \t]*(.*?)[ \t]*-->/g, "{/* $1 */}"));
}
// Root header shape (uniform across all spec files):
// line 1: `# <Title>`
Expand Down
7 changes: 7 additions & 0 deletions apps/site/scripts/sync-spec-docs.mts
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,14 @@ const headerDir = path.join(siteDir, "spec-headers");
// Non-spec docs (reference-implementation*, open-questions, extension specs,
// index, README) live only under content/docs and are NOT touched here.
const SPECS = [
"spec-access-extension",
"spec-architecture",
"spec-auth-design",
"spec-change-tracking",
"spec-collection-profile",
"spec-connector-ecosystem",
"spec-core",
"spec-mcp-profile",
"spec-data-query-api",
"spec-discovery-and-trust",
];
Expand Down Expand Up @@ -81,6 +83,11 @@ function toMdxSafe(body) {
// fails. Backtick-quoting it (already how this table quotes every other
// token) makes the comparison operator literal.
.replace("(exclusive, <), evaluated", "(exclusive, `<`), evaluated")
// MDX does not accept HTML comments (`<!--` fails as a tag name). The
// root specs use single-line editorial markers such as
// `<!-- OWNER DECISION OD-4 -->` next to a value; carry them into the
// site copy as MDX comments so they stay invisible there too.
.replace(/<!--[ \t]*(.*?)[ \t]*-->/g, "{/* $1 */}")
);
}

Expand Down
8 changes: 8 additions & 0 deletions apps/site/spec-headers/spec-access-extension.header.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
title: Extended access profile
description: Optional owner-selected authorization, grant packages, and presentation reads.
---

<Callout type="warn">
Draft. Implementation and interoperability remain to be tested.
</Callout>
8 changes: 8 additions & 0 deletions apps/site/spec-headers/spec-mcp-profile.header.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
title: MCP read profile
description: Draft binding of MCP tool access to PDPP grants.
---

<Callout type="warn">
Draft. Not an adopted standard or implemented conformance claim.
</Callout>
2 changes: 1 addition & 1 deletion apps/site/src/app/(concept)/build/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ const FAQS: readonly Faq[] = [
role: "Building an accessor",
question: "Which purpose code do I put in my request?",
answer:
"Every grant names a purpose from the registry. Most requests fit an existing code, and ai_training is the one that triggers a protocol-level consent step. If nothing fits you can propose one, and proposals are considered on a published cycle.",
"Every grant names a purpose from the registry. Most requests fit an existing code. If nothing fits you can propose one, and proposals are considered on a published cycle. Under the revised Core draft, a purpose never authorizes AI training: training is a separate processing permission that stays unavailable until the AI Training Profile is published and registered.",
cta: "Purpose registry",
href: "/specification#purpose-registry",
},
Expand Down
12 changes: 9 additions & 3 deletions apps/site/src/components/sections/reference-app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1889,7 +1889,10 @@ Content-Type: application/json
monogram instead of fetching arbitrary remote logos.
</p>
<p>
ai_training purpose code requires explicit affirmative consent — the sole protocol-level requirement.
The revised Core draft reserves AI training as a separate processing permission. Training remains
unavailable until the AI Training Profile is published and registered. The reference implementation
still uses the earlier purpose-code consent rule; that rule confers no training authority under the
revised draft.
</p>
</DetailPanel>
}
Expand Down Expand Up @@ -2222,8 +2225,11 @@ Introspection cache TTL ≤ 60 seconds
RS sees revocation within max(token_exp, 60s)`}
</pre>
<p>
Revocation stops <em>future</em> access only. Records already delivered are governed by the grant's
retention policy and legal obligations. PDPP does not retroactively reach into client-side data stores.
Revocation ends <em>future</em> reads. On owner withdrawal, the owner chooses keep or delete for held
data. Keep permits only the grant's surviving use: ordinary grants allow use within purpose and
retention; processing-permission grants allow custody only, subject to the learned-parameter exception.
Delete is an erasure instruction the client must act on. Clients learn of it through the grant lifecycle
operation.
</p>
<p>
Grant narrowing is not supported in v0.1. Scope reduction: revoke the existing grant, issue a new
Expand Down
4 changes: 4 additions & 0 deletions apps/site/src/lib/spec-nav-slugs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ export const PRIMARY_SLUGS = ["spec-core"] as const;
export const GUIDANCE_SLUGS = [
"spec-discovery-and-trust",
"spec-collection-profile",
"spec-access-extension",
"spec-mcp-profile",
"spec-ext-lexical-search",
"spec-ext-aggregation",
"spec-semantic-retrieval-extension",
Expand All @@ -54,12 +56,14 @@ export const GUIDANCE_SLUGS = [
// the self-host coverage table) reads it from here so the two lists cannot
// silently diverge in three different places instead of one.
export const GENERATED_MDX_SPEC_SLUGS = [
"spec-access-extension",
"spec-architecture",
"spec-auth-design",
"spec-change-tracking",
"spec-collection-profile",
"spec-connector-ecosystem",
"spec-core",
"spec-mcp-profile",
"spec-data-query-api",
"spec-discovery-and-trust",
] as const;
Expand Down
6 changes: 6 additions & 0 deletions docs/reference/consultation-agenda.md
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,12 @@ policy and applicable legal obligations. The specification deliberately does
not overload revocation responses or introspection state to imply downstream
erasure, and no active erasure signal is defined in v0.1.

**Superseded.** The paragraph above records the position the consultation
opened on. A proposed held-data revision would replace it: every owner withdrawal carries a
keep or delete disposition, and clients learn of erasure instructions through
the grant lifecycle operation
([spec-core, held data](https://www.pdpp.dev/docs/spec-core#held-data)).

**What input helps.** Prior art on machine-to-machine deletion requests and
their acknowledgment (including how legal-hold and retention obligations are
represented). A view on whether erasure belongs in Core or in a companion
Expand Down
6 changes: 6 additions & 0 deletions scripts/spec-check.ts
Original file line number Diff line number Diff line change
Expand Up @@ -192,11 +192,17 @@ const ANCHOR_ID_PATTERN = /[ \t]+[[{]#[A-Za-z0-9_-]+[\]}]/g;
// expected, allowlisted difference rather than reported drift.
const BARE_LT_ESCAPE_PATTERN = /\(exclusive, `<`\), evaluated/g;

// sync-spec-docs.mjs's toMdxSafe also turns a root HTML comment such as
// `<!-- OWNER DECISION OD-4 -->` into an MDX comment `{/* OWNER DECISION OD-4 */}`,
// because MDX rejects `<!--`. Map the site form back to the root form.
const MDX_COMMENT_PATTERN = /\{\/\* (.*?) \*\/\}/g;

function normalizeBody(text: string): string {
return text
.replace(CRLF_PATTERN, "\n")
.replace(ANCHOR_ID_PATTERN, "")
.replace(BARE_LT_ESCAPE_PATTERN, "(exclusive, <), evaluated")
.replace(MDX_COMMENT_PATTERN, "<!-- $1 -->")
.split("\n")
.map((line) => line.trimEnd())
.join("\n")
Expand Down
Loading
Loading