diff --git a/CHANGELOG.md b/CHANGELOG.md
index f69c790..5ffa5f9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,52 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
+## [1.12.0] — 2026-06-02
+
+### Added
+- **Custom `change_form_template` admins now render INSIDE the SPA shell via a
+ server-rendered html-fragment — no iframe (#679).** The form-spec endpoint
+ (rest-api 1.7.0+, #75) renders a custom-template admin server-side, strips
+ the admin chrome, and returns `{renderer: "html-fragment", html, csrf_token,
+ submit_url, method, messages}`. The SPA injects that HTML into the content
+ area while the breadcrumb / sidebar / title / toolbar stay React-rendered.
+ Inline `',
+ csrf_token: 'csrf-123',
+ submit_url: '/admin/jobs/job/1/change/?run_custom=1',
+ method: 'POST',
+ messages: [],
+ ...overrides,
+ };
+}
+
+function renderFragment(frag: HtmlFragmentResponse) {
+ return render(
+
+
+
+
+ ,
+ );
+}
+
+beforeEach(() => {
+ navigateMock.mockReset();
+ submitMock.mockReset();
+});
+
+describe('HtmlFragment (#679)', () => {
+ it('injects the fragment in-shell and EXECUTES inline