diff --git a/CHANGELOG.md b/CHANGELOG.md index 8369f6c..1c2d273 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ here. ### Added +- Policy companion decision (#211): keep RFC 0023 Accepted at draft maturity and Policy 1.0.0 pinned, record its duplicate-identity and no-list-priority rules, and leave disagreement refusal and the second independently authored reader open. - RFC 0022 aligns reusable-subgraph bounds, routed handoff provenance, dialect-owned remapping and cross-installation packaging with the decisions on #129, #219, #232 and #170 (#233). - Dialect-owned data quality and typed research results (#170, #169): six closed deterministic diff --git a/FAQ.md b/FAQ.md index 3eddfae..15a2ef6 100644 --- a/FAQ.md +++ b/FAQ.md @@ -382,11 +382,16 @@ never imply. **Q46. Is JPS ready for production?** Yes. JPS at `0.2.0-draft` is in production use by adopters, through the pinned reference runtime, with a person accountable for every consequential outcome -(Q47). It is still a draft: pin the exact draft and the runtime release you verified, since +(Q48). It is still a draft: pin the exact draft and the runtime release you verified, since compatibility between drafts is not guaranteed and there is no certification programme yet. A pack decides; what acts on its disposition stays the adopter's own system. -**Q47. How would an enterprise adopt it safely?** Treat conformance as document hygiene, not a +**Q47. Can several policies govern one pack, and which one wins?** Several governing policies are +allowed, and their list order never makes one policy outrank another. Repeating the same policy +identity refuses. This draft does not define whether disagreeing coverage records refuse; that rule +is planned for the companion's next format version in issue #244. + +**Q48. How would an enterprise adopt it safely?** Treat conformance as document hygiene, not a decision warrant; keep a human accountable for every consequential outcome; pin immutable specification releases and recorded checksums; and keep authorization in your own systems, since the specification explicitly refuses to model it. The [non-goals](docs/non-goals.md) and diff --git a/README.md b/README.md index fb5370a..8f4374a 100644 --- a/README.md +++ b/README.md @@ -153,7 +153,7 @@ reproducing its corpus version, its results, or its every-row statement. | [`conformance/witness/`](https://github.com/Judgment-Pack/judgment-pack-spec/tree/main/conformance/witness) | 54 checkpoint witness vectors, staged until the next `specVersion` (in no corpus) | | [`spec/dialect.md`](spec/dialect.md) | Normative prose for the preparation-verifier class, a companion document beside Core | | [Dialect vectors][staged-dialect] | 47 dialect vectors; staged (see below) | -| [`spec/policy.md`](spec/policy.md) | Policy draft approved upon required green CI and PR 218 merge; publication requires its exact Policy tag and a maintainer-published GitHub release; [124 agreement vectors](conformance/policy/1.0.0/README.md) and [versioned schemas](schema/policy/1.0.0/) | +| [`spec/policy.md`](spec/policy.md) | Policy companion accepted at draft maturity; publication requires its exact Policy tag and a maintainer-published GitHub release; [124 agreement vectors](conformance/policy/1.0.0/README.md) and [versioned schemas](schema/policy/1.0.0/) | | [`TESTING.md`](TESTING.md) | A 10–15 minute external testing exercise | | [`VERSIONING.md`](VERSIONING.md) | Release and compatibility policy | | [`CHANGELOG.md`](CHANGELOG.md) | Draft and published change history | diff --git a/rfcs/0023-policy-companion.md b/rfcs/0023-policy-companion.md index 6b751d2..c23deb6 100644 --- a/rfcs/0023-policy-companion.md +++ b/rfcs/0023-policy-companion.md @@ -5,21 +5,20 @@ - Created: 2026-10-17 - Issue: [#211](https://github.com/Judgment-Pack/judgment-pack-spec/issues/211) -This PR proposes acceptance at **draft maturity**, effective only when -[PR 218](https://github.com/Judgment-Pack/judgment-pack-spec/pull/218) merges after -required CI passes. Until then the default-branch RFC remains Review; this branch -records the status proposed for merge, not a completed adoption or publication. -On merge, [spec/policy.md](../spec/policy.md) defines the bounded Policy offline-reader -companion and the selected independent draft release route. The original proposal -and unresolved questions below remain informative design history; their current -draft dispositions are in [ADOPTION.md](../conformance/policy/1.0.0/ADOPTION.md). -No stable maturity, immutable release, consumer adoption or execution authority -follows from draft acceptance. The [candidate contract](policy-companion-contract/README.md) +RFC 0023 is Accepted at **draft maturity**. Required CI passed and +[PR 218](https://github.com/Judgment-Pack/judgment-pack-spec/pull/218) merged, +completing that process disposition. [spec/policy.md](../spec/policy.md) defines +the bounded Policy offline-reader companion and the selected independent draft +release route. The original proposal and unresolved questions below remain +informative design history; their current draft dispositions are in +[ADOPTION.md](../conformance/policy/1.0.0/ADOPTION.md). Acceptance at draft +maturity establishes no stable maturity, immutable release, consumer adoption or +execution authority. The [candidate contract](policy-companion-contract/README.md) remains archived proposed material with its original status and bytes. The historical [prototype](policy-companion-prototype/README.md) remains explicitly non-normative and byte-for-byte frozen at proposal `0.0.2`, baseline commit `8a56a95d555c17640d2db4984363b779536b3c2a`. Host integration guidance below names separate -product responsibilities; acceptance of this RFC would not adopt those products' +product responsibilities; acceptance of this RFC does not adopt those products' protocols on their behalf. ## Summary @@ -167,7 +166,7 @@ consumers. A clause implemented through scope, exception or fallback can referen that actual element without inventing a dummy rule or a manual process. Informational sources are separate and do not create governing dependencies. -Scope and coverage are declarations to be reviewed, not a language for conditional +Scope and coverage are declarations to be reviewed, not a language for runtime authorization. Validation cannot prove that an organization declared every applicable policy or that an interpretation is correct. @@ -362,27 +361,37 @@ Manual and chat actions must share the existing execution/context/approval/CAS boundaries. No feature-specific model loop, permission inference or retry service is required by this RFC. +## Open criteria + +The Runtime reader is the only implementation reader so far. It and the repository +reader were both Codex-assisted. The acceptance criterion asks for a second reader +authored independently and remains **OPEN**. The Desk's import path or an Exchange +reader counts if its authorship is separate; a same-team port does not. + +The 16-source maximum in Policy format `1.0.0` is a schema maximum and the `base` +profile's value under [RFC 0026](0026-document-ceiling-profiles.md). The companion +adopts the `profile` member only in its next format version, tracked by +[issue #244](https://github.com/Judgment-Pack/judgment-pack-spec/issues/244). + ## Unresolved questions -1. Adoption/disposition of the exact proposed `1.0.0` selector, declared bounds and - closed reference/coverage grammar after public review; no released schema or - conformance class is assigned here. -2. Trust/signature/export profile for review assertions and cross-workspace adoption. -3. Reconciliation with RFC 0011's proposed pack currency registry without silently +1. Trust/signature/export profile for review assertions and cross-workspace adoption. +2. Reconciliation with RFC 0011's proposed pack currency registry without silently adopting it or treating offline membership as live authorization. -4. First real sync provider and its demonstrable revision/lifecycle/freshness +3. First real sync provider and its demonstrable revision/lifecycle/freshness semantics; document-read support alone is insufficient. -5. Host defaults for self-review versus independent review, quorum changes, +4. Host defaults for self-review versus independent review, quorum changes, role-revocation effects on old signatures, expiry/grace and scheduled publication. -6. Supported graph/composition closure and its owning execution contract. -7. Independent implementation evidence and any domain-format adapter demand. +5. Supported graph/composition closure and its owning execution contract. +6. Independent implementation evidence and any domain-format adapter demand. -## Conditional draft disposition +## Accepted draft disposition On 2026-10-19 the maintainer directed: “Accept the bounded draft after CI; record -the limited public review”. The decision accepts the exact corrected `1.0.0` +the limited public review”. Required CI passed and PR 218 merged, completing +acceptance at draft maturity. The decision accepts the exact corrected `1.0.0` content/reference/anchor/coverage grammar and bounds, Policy offline-reader scope -and independent draft release route **upon PR 218 merge after required CI**. +and independent draft release route. It explicitly accepts the limited public period for this bounded draft, without claiming outside review or independently authored interoperability evidence. The standing temporary different-vendor-review exception applies; the general @@ -392,12 +401,11 @@ The separate same-vendor review inspected tree `60b04d452efa49032a0cc7d3ac1e55a3900410a8`, committed unchanged as `7f118278e480d88e53e6a6be2fe084610a2bebf9`, and reported no material findings in [the complete PR record](https://github.com/Judgment-Pack/judgment-pack-spec/pull/218#issuecomment-6273316525). -The final CI-fix/acceptance delta remains subject to the PR's bounded review and -required CI gates; that earlier report is not a review of an unidentified later -commit. [ADOPTION.md](../conformance/policy/1.0.0/ADOPTION.md) records the actual +That report did not establish independently authored implementation evidence. +[ADOPTION.md](../conformance/policy/1.0.0/ADOPTION.md) records the actual public history, exception, scope and deferred questions with reopening conditions. -Draft acceptance adopts only [the companion](../spec/policy.md) and the narrow +Acceptance at draft maturity adopts only [the companion](../spec/policy.md) and the narrow [publication route](../conformance/policy/1.0.0/PUBLICATION.md). The first independent release identifier is `policy-v1.0.0-draft.1`; naming it in this source branch does not establish publication. Only the exact tag and a maintainer-published diff --git a/rfcs/README.md b/rfcs/README.md index e37f64f..c33e135 100644 --- a/rfcs/README.md +++ b/rfcs/README.md @@ -70,7 +70,7 @@ stable feature requires two independent implementations and conformance cases. | [0019] | The Judgment Exchange — a shared place for dialects | Draft | Research line (see below) | | [0020] | The workflow | Draft | Specification (a proposed companion document; see below) | | [0022] | Reusable subgraphs contract — explicit encapsulation and reference binding | Draft | Research line (see below) | -| [0023](0023-policy-companion.md) | Policy content and governing adoption | Accepted (upon green CI and PR 218 merge) | Specification (draft Policy offline-reader companion); live governance remains host-owned | +| [0023](0023-policy-companion.md) | Policy content and governing adoption | Accepted | Specification (companion at draft maturity; second independently authored reader criterion open); live governance remains host-owned | | [0025](0025-core-escalation-routes.md) | Core escalation routes | Accepted design (#219); review pending | Specification (Core) | | [0026](0026-document-ceiling-profiles.md) | Document ceiling profiles | Accepted design (#232); review pending | Specification and companions | @@ -117,9 +117,9 @@ repository. RFC 0021 adds [named Dialect artifact identities](0021-dialect-artifact-identity.md) through exact `formatVersion` selectors, with unchanged historical formats and separate binding digests. -RFC 0023 has conditional maintainer approval for [the bounded Policy draft](../spec/policy.md), -effective upon required green CI and PR 218 merge. The default branch remains -Review until then; no immutable Policy release or consumer adoption is claimed. +RFC 0023 is Accepted at draft maturity for [the bounded Policy companion](../spec/policy.md). +The Runtime reader is the only reader so far; the criterion for a second independently authored +reader remains open. No immutable Policy release or consumer adoption is claimed. [RFC 0026](0026-document-ceiling-profiles.md) records the accepted document ceiling profiles of issue #232. Core §4.1 owns the ceilings; extended companion readers remain future work. diff --git a/tests/test_site.py b/tests/test_site.py index c003419..acc46f9 100644 --- a/tests/test_site.py +++ b/tests/test_site.py @@ -260,9 +260,9 @@ def test_dialect_companion_document_is_published(self) -> None: def test_policy_promotion_prose_is_discoverable_and_raw_artifacts_stay_staged(self) -> None: page = self.output / "spec/policy/index.html" document = page.read_text(encoding="utf-8") - self.assertIn("Draft companion — conditional acceptance", document) + self.assertIn("Accepted at draft maturity", document) self.assertIn("Policy offline-reader class", document) - self.assertIn("default-branch RFC remains Review", document) + self.assertIn("No Policy offline-reader conformance claim is available before that release", document) self._assert_nothing_published_under("conformance/policy") self.assertFalse((self.output / "artifacts/schema/policy").exists()) for name in ("common", "policy", "governing-adoption", "fixture", "vectors"): @@ -271,13 +271,12 @@ def test_policy_promotion_prose_is_discoverable_and_raw_artifacts_stay_staged(se published = self.output / "schema/policy/1.0.0" / f"{name}.schema.json" self.assertEqual(published.read_bytes(), source.read_bytes()) - def test_policy_draft_acceptance_is_conditional_with_source_only_archives(self) -> None: + def test_policy_is_accepted_at_draft_maturity_with_source_only_archives(self) -> None: page = self.output / "rfcs" / "0023-policy-companion" / "index.html" document = page.read_text(encoding="utf-8") - self.assertIn('Draft companion — conditional acceptance', document) - self.assertIn("This PR proposes acceptance", document) - self.assertIn("required CI passes", document) - self.assertIn("Until then the default-branch RFC remains Review", document) + self.assertIn('Accepted at draft maturity', document) + self.assertIn("completing that process disposition", document) + self.assertIn("No Policy conformance claim is available before", document) self.assertIn("blob/main/rfcs/0023-policy-companion.md", document) self.assertIn("View current source", document) self.assertIn( @@ -643,9 +642,9 @@ def test_supported_microdata_mirrors_visible_content_without_scripts(self) -> No faq = (self.output / "faq" / "index.html").read_text(encoding="utf-8") self.assertIn('itemtype="https://schema.org/FAQPage"', faq) - self.assertEqual(faq.count('itemtype="https://schema.org/Question"'), 47) - self.assertEqual(faq.count('itemtype="https://schema.org/Answer"'), 47) - self.assertEqual(faq.count('itemprop="acceptedAnswer"'), 47) + self.assertEqual(faq.count('itemtype="https://schema.org/Question"'), 48) + self.assertEqual(faq.count('itemtype="https://schema.org/Answer"'), 48) + self.assertEqual(faq.count('itemprop="acceptedAnswer"'), 48) self.assertIn( '