Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
9 changes: 7 additions & 2 deletions FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
Expand Down
64 changes: 36 additions & 28 deletions rfcs/0023-policy-companion.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.

Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down
8 changes: 4 additions & 4 deletions rfcs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |

Expand Down Expand Up @@ -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.
19 changes: 9 additions & 10 deletions tests/test_site.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"):
Expand All @@ -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('<span class="artifact-label">Draft companion — conditional acceptance</span>', 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('<span class="artifact-label">Accepted at draft maturity</span>', 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(
Expand Down Expand Up @@ -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(
'<h3 itemprop="name" id="q1-what-is-a-judgment-pack-in-one-sentence">', faq
)
Expand Down
8 changes: 4 additions & 4 deletions web/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -359,9 +359,9 @@ def archive(self) -> str:
"spec/policy.md",
PurePosixPath("spec/policy/index.html"),
"Policy content and governing adoption",
"Policy draft approved conditional on required green CI and PR 218 merge; immutable content and exact governing adoption, with no published conformance claim.",
"Policy companion accepted at draft maturity; immutable content and exact governing adoption, with no published conformance claim.",
"spec",
"Draft companion — conditional acceptance",
"Accepted at draft maturity",
source_ref="main",
),
Page(
Expand Down Expand Up @@ -712,9 +712,9 @@ def archive(self) -> str:
"rfcs/0023-policy-companion.md",
PurePosixPath("rfcs/0023-policy-companion/index.html"),
"RFC 0023: Policy content and governing adoption",
"Review proposal for immutable policy content and exact governing adoption, with a proposed draft 1.0.0 contract, a frozen non-normative prototype and unresolved trust and live governance contracts.",
"Accepted standards-track RFC at draft maturity for immutable policy content and exact governing adoption, with unpublished draft artifacts and unresolved trust and live governance contracts.",
"proposals",
"Draft companion — conditional acceptance",
"Accepted at draft maturity",
source_ref="main",
),
Page(
Expand Down
Loading