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
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,17 @@

All notable changes to tagged releases are documented here.

## Unreleased

- Add the MCP `prompts` capability (ADR-0008): three non-normative authoring-method prompts —
`author_pack`, `test_pack`, `fix_pack` — served as static, versioned text that the client's model
executes with the client's key. The server still calls no model, holds no key, and opens no
network connection; serving a prompt is read-only, like `get_schema`. Method content distills the
expressiveness studies: the resolution-model shapes that avoid conflicts, the `onUnknown`
discipline, the decimal-string rule for ordered comparisons, the prepared-facts ledger, and the
instance-matrix logic probe. Following a prompt does not make a pack conformant, and no prompt
interprets any policy.

## 0.2.0 - 2026-07-27

- Add an EXPERIMENTAL evaluator (ADR-0007): `judgment-pack experimental evaluate` and the
Expand Down
4 changes: 4 additions & 0 deletions docs/adr/0003-mcp-integration-and-testing-surface.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ deciders: Brian Jin
> **Amended by [0007](0007-experimental-evaluator.md):** the surface gains exactly one explicitly
> experimental evaluation tool (`experimental_evaluate`); the validation tools still evaluate
> nothing.
>
> **Amended by [0008](0008-mcp-prompts-authoring-method.md):** the surface gains the protocol's
> `prompts` capability — non-normative authoring-method text served statically; the client's model
> executes it.

## Context and problem statement

Expand Down
87 changes: 87 additions & 0 deletions docs/adr/0008-mcp-prompts-authoring-method.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
---
status: proposed
date: 2026-07-27
deciders: Brian Jin
---

# Serve authoring method as MCP prompts; the intelligence stays in the client

> **Proposed.** The MCP server gains the protocol's `prompts` capability with three non-normative
> method prompts — `author_pack`, `test_pack`, `fix_pack` — served as static, versioned text that
> the client's model executes with the client's key.

## Context and problem statement

Authoring a judgment pack is judgment-laden translation, and by [ADR-0006](0006-authoring-lifecycle-in-the-client.md)
it lives in the client: the runtime is a stateless oracle that never authors, decides, or holds a
key. But the expressiveness studies produced hard-won *method* knowledge that currently lives only
in prose documentation a filesystem-less client cannot reach: the single-outcome/detector
architecture that §8's conflict rule forces authors to rediscover, the `onUnknown` discipline and
its fallback-blocking behavior, the decimal-string rule for ordered comparisons, and the
prepared-facts ledger that RFC 0007 makes basic authoring hygiene. Every new authoring client
currently relearns these by tripping on them.

An "encode this policy" *tool* was considered and rejected earlier in the project: it would put a
model, a key, and nondeterminism inside the runtime, and would make the reference implementation
the canonical interpreter of what policies mean — spec-by-implementation one layer up.

MCP has a third primitive that threads this: **prompts** are static text the server serves and the
*client's* model executes. The server never calls a model.

## Decision drivers

- Equip the client-side authoring loop without violating keyless / offline / stateless.
- Turn study findings into method every author inherits, instead of folklore rediscovered per pack.
- Keep interpretation plural: the runtime may teach *how to work*, never *what a policy means*.

## Considered options

- **A. MCP `prompts` capability** serving method guidance as versioned static text.
- **B. Documentation only** (status quo): the method stays in `docs/`, unreachable from a
filesystem-less client's tool surface.
- **C. An authoring tool** that produces packs server-side. Rejected again for the reasons above.

## Decision outcome

Chosen option: **A**. Serving a prompt is a read-only operation in the same class as `get_schema`:
static bytes, versioned with the binary, no model, no key, no network, no state. It *strengthens*
ADR-0006 rather than bending it — the prompt's entire content is instructions for the client-side
loop against the oracle tools.

Settled constraints:

- **Three prompts, method-only:** `author_pack` (the guided create → validate → evaluate loop, the
§8-shape guidance, the decimal-string and `onUnknown` rules, the prepared-facts ledger),
`test_pack` (the instance-matrix probe: per-outcome, conflict, unknown, missing-evidence,
not-applicable, forced-outcome, ordered-comparison rows), `fix_pack` (diagnostics-driven repair
in carrier → structural → semantic order).
- **Non-normative, and each prompt says so in its own text:** following the method does not make a
pack conformant; only validation decides conformance; the produced document belongs to the
client. No prompt implies the runtime blesses, stores, or interprets anything.
- **No policy interpretation:** prompts teach the format's mechanics and the loop's discipline.
They never state what any domain's policy means. Argument values (a policy text passed by the
caller) are echoed into the rendered prompt verbatim, not interpreted.
- **Versioned with the binary** like the embedded fixtures: prompt text changes ship as releases
and appear in the changelog.

This amends [0003](0003-mcp-integration-and-testing-surface.md) a second time: the surface is now
tools + prompts. The tools' posture is unchanged.

### Consequences

- Good, because a filesystem-less client gets the authoring method at the same place it gets the
oracle, and study findings stop being folklore.
- Good, because the division of labor becomes explicit and inspectable: the runtime ships the
method, the client ships the mind, the tools stay the oracle.
- Bad, because the reference runtime's prompts become the de facto authoring *style*; mitigated by
the non-normative marking, by the prompts being small inspectable text rather than behavior, and
by teaching mechanics rather than interpretation.
- Bad, because client support for MCP prompts is uneven; degradation is graceful (tools are
untouched) but the guidance reaches only clients that surface prompts.

## More information

Method content sources: the expressiveness studies in `judgment-pack-evaluator-experiments`
(studies 001–003) and spec RFC 0007. Protocol: MCP `prompts/list` and `prompts/get`, capability
`prompts` advertised at initialize. Follows ADR-0002 (one core), ADR-0003 (MCP surface), ADR-0006
(authoring in the client), ADR-0007 (the experimental evaluator the `test_pack` prompt drives).
1 change: 1 addition & 0 deletions docs/adr/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,4 @@ when** it became that way. architecture.md links out to the relevant ADR rather
| [0005](0005-single-jps-diagnostic-code-prefix.md) | Use a single `JPS-` prefix for diagnostic codes | accepted |
| [0006](0006-authoring-lifecycle-in-the-client.md) | The authoring lifecycle lives in the client; the runtime is a stateless oracle | accepted |
| [0007](0007-experimental-evaluator.md) | Ship an experimental evaluator behind an explicit experimental surface | accepted |
| [0008](0008-mcp-prompts-authoring-method.md) | Serve authoring method as MCP prompts; the intelligence stays in the client | proposed |
16 changes: 16 additions & 0 deletions docs/mcp-clients.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,22 @@ gitignored in this repository. Copy a snippet, don't commit one.
None of these evaluate, decide, or authorize anything, except `experimental_evaluate`, which
evaluates experimentally and says so in every payload.

## The prompts

The server also serves three **method prompts** (MCP `prompts` capability) — static, versioned,
non-normative guidance that your client's model executes with your key. In Claude Code they appear
as slash commands (`/mcp__judgment-pack__author_pack`, `…test_pack`, `…fix_pack`); other clients
surface them differently or not at all, and everything works without them.

| Prompt | Guides |
| --- | --- |
| `author_pack` | Encoding one policy decision: the create → validate → evaluate loop, the resolution-model shapes that avoid conflicts, the decimal-string and `onUnknown` rules, the prepared-facts ledger |
| `test_pack` | Probing a pack's logic with an instance matrix (per-outcome, conflict, unknown, missing-evidence, not-applicable, forced-outcome, ordered-comparison rows) |
| `fix_pack` | Repairing a non-conformant pack from the validator's diagnostics, in carrier → structural → semantic order |

Following a prompt does not make a pack conformant — only validation decides that — and the
documents you produce are yours; the runtime stores and interprets nothing (ADR-0008).

## Claude Code

One command, from any directory:
Expand Down
Loading