From 1e8e67bc05776120e58d0b5414ee96d0a7d4d680 Mon Sep 17 00:00:00 2001 From: Brian Jin <35789537+kikashy@users.noreply.github.com> Date: Tue, 28 Jul 2026 17:09:20 -0400 Subject: [PATCH 1/2] chore(release): v0.4.0 Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Brian Jin <35789537+kikashy@users.noreply.github.com> --- CHANGELOG.md | 2 +- docs/adr/0009-draft-rfc-quantifier-prototype.md | 2 +- docs/adr/0010-evaluator-aligned-to-core-0.2.0-draft.md | 2 +- docs/adr/0011-first-evaluator-conformance-claim.md | 2 +- docs/adr/0012-jpack-project-convention.md | 2 +- docs/adr/README.md | 8 ++++---- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca2646c..11f8781 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ All notable changes to tagged releases are documented here. -## Unreleased +## 0.4.0 - 2026-07-28 - **Add the `jpack.json` project convention** (ADR-0012), a **non-normative convention of this runtime** and not part of the Judgment Pack Specification. It gives a project one name per decision diff --git a/docs/adr/0009-draft-rfc-quantifier-prototype.md b/docs/adr/0009-draft-rfc-quantifier-prototype.md index 0863545..aaeb35a 100644 --- a/docs/adr/0009-draft-rfc-quantifier-prototype.md +++ b/docs/adr/0009-draft-rfc-quantifier-prototype.md @@ -1,5 +1,5 @@ --- -status: proposed # proposed | accepted | deprecated | superseded by NNNN +status: accepted date: 2026-07-27 deciders: Brian Jin --- diff --git a/docs/adr/0010-evaluator-aligned-to-core-0.2.0-draft.md b/docs/adr/0010-evaluator-aligned-to-core-0.2.0-draft.md index c5221eb..68c0a09 100644 --- a/docs/adr/0010-evaluator-aligned-to-core-0.2.0-draft.md +++ b/docs/adr/0010-evaluator-aligned-to-core-0.2.0-draft.md @@ -1,5 +1,5 @@ --- -status: proposed # proposed | accepted | deprecated | superseded by NNNN +status: accepted date: 2026-07-28 deciders: Brian Jin --- diff --git a/docs/adr/0011-first-evaluator-conformance-claim.md b/docs/adr/0011-first-evaluator-conformance-claim.md index 072db40..db8bacb 100644 --- a/docs/adr/0011-first-evaluator-conformance-claim.md +++ b/docs/adr/0011-first-evaluator-conformance-claim.md @@ -1,5 +1,5 @@ --- -status: proposed # proposed | accepted | deprecated | superseded by NNNN +status: accepted date: 2026-07-28 deciders: Brian Jin --- diff --git a/docs/adr/0012-jpack-project-convention.md b/docs/adr/0012-jpack-project-convention.md index 580da80..ccb195e 100644 --- a/docs/adr/0012-jpack-project-convention.md +++ b/docs/adr/0012-jpack-project-convention.md @@ -1,5 +1,5 @@ --- -status: proposed # proposed | accepted | deprecated | superseded by NNNN +status: accepted date: 2026-07-28 deciders: Brian Jin --- diff --git a/docs/adr/README.md b/docs/adr/README.md index fe5990c..89dc6a8 100644 --- a/docs/adr/README.md +++ b/docs/adr/README.md @@ -105,7 +105,7 @@ authority, and following it confers no conformance status on anything. | [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; claim posture superseded by [0011](0011-first-evaluator-conformance-claim.md) | | [0008](0008-mcp-prompts-authoring-method.md) | Serve authoring method as MCP prompts; the intelligence stays in the client | accepted | -| [0009](0009-draft-rfc-quantifier-prototype.md) | Prototype spec RFC 0008 quantifiers behind an opt-in experimental flag | proposed | -| [0010](0010-evaluator-aligned-to-core-0.2.0-draft.md) | Retarget the experimental evaluator at 0.2.0-draft's evaluator class; claim nothing | proposed; claim-scope determination superseded by [0011](0011-first-evaluator-conformance-claim.md) | -| [0011](0011-first-evaluator-conformance-claim.md) | Supply the §10 evaluation limits and make the first §3.4.1 evaluator-conformance claim | proposed | -| [0012](0012-jpack-project-convention.md) | Adopt a `jpack.json` project convention in the runtime, deliberately outside the spec | proposed | +| [0009](0009-draft-rfc-quantifier-prototype.md) | Prototype spec RFC 0008 quantifiers behind an opt-in experimental flag | accepted | +| [0010](0010-evaluator-aligned-to-core-0.2.0-draft.md) | Retarget the experimental evaluator at 0.2.0-draft's evaluator class; claim nothing | accepted; claim-scope determination superseded by 0011 | +| [0011](0011-first-evaluator-conformance-claim.md) | Supply the §10 evaluation limits and make the first §3.4.1 evaluator-conformance claim | accepted | +| [0012](0012-jpack-project-convention.md) | Adopt a `jpack.json` project convention in the runtime, deliberately outside the spec | accepted | From 2aaa8c8f3611fd84d1d0e1bfb3b1ad0993f38525 Mon Sep 17 00:00:00 2001 From: Brian Jin <35789537+kikashy@users.noreply.github.com> Date: Tue, 28 Jul 2026 17:11:21 -0400 Subject: [PATCH 2/2] test: the claim guard scans the topmost CHANGELOG section when Unreleased is absent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A release commit renames Unreleased to the new version; that text is still live prose until the tag exists, so the guard scans it instead of failing for the section's absence. Caught by CI on the release PR — the local gate run had used cached test results. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Brian Jin <35789537+kikashy@users.noreply.github.com> --- internal/cli/app_test.go | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/internal/cli/app_test.go b/internal/cli/app_test.go index bd2bd1b..c809df7 100644 --- a/internal/cli/app_test.go +++ b/internal/cli/app_test.go @@ -309,17 +309,25 @@ func claimProse(t *testing.T) []claimSurface { return surfaces } -// unreleasedSection is the CHANGELOG's Unreleased section: everything above the -// first released heading. +// unreleasedSection is the CHANGELOG's maintained section: Unreleased when one +// exists, else the topmost version section. On a release commit "Unreleased" +// has just been renamed to the new version, but that text is still this +// change's live prose until the tag exists, so it is scanned rather than +// exempted — the guard must not go blind at exactly the moment a release PR +// touches the most words. func unreleasedSection(t *testing.T, changelog string) string { t.Helper() start := strings.Index(changelog, "## Unreleased") if start < 0 { - t.Fatal("the CHANGELOG has no Unreleased section to scan") + start = strings.Index(changelog, "\n## ") + if start < 0 { + t.Fatal("the CHANGELOG has no section to scan") + } + start++ } rest := changelog[start:] - if end := strings.Index(rest, "\n## "); end >= 0 { - return rest[:end] + if end := strings.Index(rest[3:], "\n## "); end >= 0 { + return rest[:end+3] } return rest }