docs(governance): policy registry sync and versioning operational guide#3187
Merged
Conversation
New page docs/governance/policy-registry-sync.mdx answering the working group's recurring questions about how to operate the registry — version pinning, registry version bumps mid-campaign, effective_date staged adoption, sunset behavior, the additive-only invariant for inline policies, and a WG-shaped FAQ. Closes #3140. Key positions taken (verified against schemas + openapi): - policy_ids[] is ID-only today; versions resolve at evaluation time (latest-wins). Same posture as TCF v2 / OpenRTB GPP — versions resolve at the decoder, not pinned at the request. - The pinning workaround is to copy the registry policy into custom_policies[] under a renamed ID (using the canonical ID would collide with the schema's anti-relaxation rule). - The audit log's policies_evaluated[] + plan_hash + the registry's /api/policies/history endpoint together provide forensic recovery of which version applied at any historical timestamp. - Inline policies are additive-only relative to registry-sourced policies (not absolutely additive — a buyer-authored inline policy unrelated to any registry policy is unconstrained). The registry-reference page (policy-registry.mdx) keeps a one-paragraph pointer at the end of the existing Temporal enforcement section. Both nav blocks in docs.json updated. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This was referenced Apr 25, 2026
bokelley
added a commit
that referenced
this pull request
Apr 25, 2026
…s examples (#3202) The sync-plans-request.json schema defines both custom_policies[] and portfolio.shared_exclusions[] as PolicyEntry[] (requiring policy_id, enforcement, policy text). The existing examples in specification.mdx and sync_plans.mdx used plain strings — a reader copy-pasting and validating against the schema would fail. Changes: - specification.mdx: convert two plain-string examples (custom_policies, shared_exclusions) to PolicyEntry objects; update shared_exclusions description; add additive-only Warning block in the Policy resolution section calling out the invariant from policy-entry.json. - sync_plans.mdx: convert custom_policies example; update field-table descriptions for both custom_policies and portfolio.shared_exclusions to reflect the PolicyEntry shape. Cherry-picked from PR #3143 (which is superseded by the merged #3187 for the conceptual sync/versioning content, but carried this real schema-validity fix). #3143 will be closed. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #3140.
Summary
Adds
docs/governance/policy-registry-sync.mdx— a new page answering the working group's recurring operational questions about the Policy Registry. Companion to the existingpolicy-registry.mdx(which is the registry reference); this one is the operations manual.The headline answer up front:
policy_ids[]carries no version qualifier today. Versions resolve at evaluation time (latest-wins). For deterministic text, copy the registry policy intocustom_policies[]under a differentpolicy_id(collision with the canonical ID hits the schema's anti-relaxation rule). The audit log +/api/policies/historytogether provide forensic recovery.What's covered
policy_ids, plan-pinned-via-custom_policies, and completed plans.effective_datestaged adoption — the four-step pattern, with a note thateffective_datehandles only the time axis; scope-based staging (channel/jurisdiction subsets) happens at the registry level.sunset_datepasses, including the publish-both-overlapping-policies pattern for successor regulations.Pre-PR review
Ran the full review pipeline:
policies_evaluated[]schema description says "registry policy IDs" but in practice agents may also record inline IDs. Tracked separately.plan_hashmakes it provable; the staged-adoption window is the registry's documented behavior, not new attack surface.Changeset
Empty per the playbook rule for non-protocol changes (this is a descriptive doc that restates existing schema and spec behavior; no schemas, tasks, or API changes).
Test plan
npm run test:docs-nav— passesschemas/latest/referencesdocs.jsonnav blocks updated🤖 Generated with Claude Code