Skip to content

Dev - #977

Merged
Brad-Edwards merged 75 commits into
mainfrom
dev
Jul 29, 2026
Merged

Dev#977
Brad-Edwards merged 75 commits into
mainfrom
dev

Conversation

@Brad-Edwards

Copy link
Copy Markdown
Collaborator

Summary

Related issues

Changes

Test plan

  • Relevant tests pass
  • The canonical nox -s verify gate passes, or unchecked sessions are listed below
  • The docs gate passes when public documentation changed

Checklist

  • Code follows the project coding standards
  • FM level classified if semantic change
  • Published contract schemas regenerated if models changed
  • PR title is a Conventional Commit (release-please derives the version and CHANGELOG.md from it)
  • Architectural docs updated if applicable

Notes for review

chore: back-merge v2.0.0 into dev
The canonical published-schema URI root was `https://raes.dev/schemas/`,
carried over from the identity cutover in #921. That domain is registered to
a third party, as was the root it replaced. Using an uncontrolled domain in
`$id` gives up the only property the URI form buys — that the identifier is
unambiguously ours to assign — and left issue #908 blocked on provisioning a
domain the project cannot obtain.

Repoint every published `$id`, the semantic-invariant profile URI, and the
concept authority reference at `https://raesystem.github.io/rae/`, which is
bound to the repository's own GitHub organisation. `$id` is an identifier and
is not required to resolve, so this carries no DNS or hosting obligation;
the path matches the org's GitHub Pages layout if the schemas are ever served.

Refresh the schema-publication content hashes for the 84 affected schemas and
record the correction as an amendment to ADR-096.

Also re-pin the CHANGELOG.md identity digest, which went stale on dev when
release-please appended the 2.0.0 notes. The appended content introduces no
retired identity occurrences; the count is unchanged at 297.

BREAKING CHANGE: published schema `$id` values move from
`https://raes.dev/schemas/` to `https://raesystem.github.io/rae/schemas/`.
Consumers pinning or caching schema identifiers must update them.

Refs #908
`check_identity_cutover` pinned CHANGELOG.md by whole-file digest, but
release-please rewrites that file on every release, inserting each new section
above the existing ones. The pin therefore goes stale at every release by
construction. It did at v2.0.0: PR #937 back-merged the release into `dev` with
the required `verify` check failing, and the failure was overridden rather than
fixed, leaving `dev` red on this gate.

Add a `generated-release-history` record class that matches how the file is
actually maintained. It pins the classified tail exactly and holds everything
written above it to the live-tree rule of zero retired identity occurrences, so
newly generated content carries no historical exemption. Editing or truncating
the tail still fails closed.

This is strictly stricter than the whole-file pin it replaces: the old rule
allowed any content anywhere in the file so long as the digest was re-recorded,
which is exactly the re-record-and-move-on habit that let the override stand.

Manifest schema moves to historical-identity-records/v3.

Refs #908
The identity gate holds the generated head of CHANGELOG.md to zero retired
identity occurrences, but nothing checked the text that lands there. A feature
PR into `dev` is squash-merged, so its title becomes the commit release-please
writes into the changelog, and any BREAKING CHANGE footer becomes a changelog
entry. A retired name in either surfaced days later as a red release PR, far
from the change that caused it.

Check both at the point they are authored, in the existing PR title guard that
already runs on PRs targeting `dev` from the trusted base ref.

Body prose is deliberately not checked. Explaining the retired name is
legitimate — this PR's own description does it — and only the title and
breaking-change footers reach the changelog.

The pattern is duplicated in text form rather than imported, because
check_pr_title is stdlib-only by design and check_identity_cutover pulls in
PyYAML. A test asserts the two patterns agree on the same samples so they
cannot drift.

Refs #908
The previous commit checked the PR body for BREAKING CHANGE footers. That is
the wrong text. This repository squashes with
squash_merge_commit_title=PR_TITLE and squash_merge_commit_message=COMMIT_MESSAGES,
so the squash commit body release-please parses is the concatenated commit
messages; the PR body never reaches it.

Supply the PR's commit messages to the guard from the workflow and check those.
The messages are fetched with a read-only token and written to a file rather
than passed as an argument, so untrusted PR data is never shell-interpolated.
The PR body is still checked, so the rule holds if the squash setting changes.

Refs #908
Two CI failures on this branch.

`ruff format` rejected tests/test_runtime_contracts.py. The namespace rewrite
lengthened a URI past the 120-column limit and I only linted the files I edited
by hand, not the ones the rewrite touched.

`title-guard` failed with "unrecognized arguments: --commit-messages-file". The
workflow file comes from the PR head but the checker is deliberately taken from
the base ref, so on the PR that introduces the flag the base copy cannot accept
it yet. Probe for support before passing it, matching the bootstrap shape the
workflow already uses for a missing checker. Commit-message footer enforcement
becomes active from the next PR onward; title enforcement is unaffected now.

Refs #908
fix!: repoint published schema namespace to a controlled URI root
The PyPI package metadata carried no trove classifiers, so the
Python-versions badge in the README rendered as "missing". Shields reads
Programming Language :: Python :: X.Y classifiers and does not fall back
to Requires-Python, so declare the supported interpreters explicitly.
…fiers

fix: publish Python version classifiers for the raes distribution
Resolves the open dependency alerts on the default branch by moving the
locked versions past their patched releases, and raises the direct mcp
floor so a fresh resolve cannot fall back to an affected version.

Closes #941
fix: upgrade dependencies with known vulnerabilities
…idence

test: add formal semantic evidence retest
feat: enforce participant information-flow policy
…on-policies

feat: add experiment variation selection policies
feat: add executable behavioral validation probes
feat: migrate participant control compatibility
docs: document participant input and output control
…fication

feat: add bounded determinism and replay-consistency verification (ASR-514)
…ation

feat: add deterministic trial compilation
security: define participant-relative predicate opacity
fix: replace platform profiles with composable capabilities
fix: reduce claim binding validation complexity
@Brad-Edwards
Brad-Edwards merged commit 0fde03f into main Jul 29, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant