From fb82f0414590d77d3218b89fbc1ec61bf6d5f31b Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 04:31:10 +0900 Subject: [PATCH 1/9] test(docs): catch stale protected email maturity --- src/protectedEmailDocumentationStatus.test.ts | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/protectedEmailDocumentationStatus.test.ts diff --git a/src/protectedEmailDocumentationStatus.test.ts b/src/protectedEmailDocumentationStatus.test.ts new file mode 100644 index 000000000..ca7e4d90f --- /dev/null +++ b/src/protectedEmailDocumentationStatus.test.ts @@ -0,0 +1,20 @@ +import { readFileSync } from 'node:fs'; +import { resolve } from 'node:path'; + +import { describe, expect, it } from 'vitest'; + +const repositoryFile = (path: string): string => + readFileSync(resolve(process.cwd(), path), 'utf8'); + +describe('protected email documentation maturity', () => { + it('does not leave the merged email language/direction capability labeled as active-PR work', () => { + for (const path of [ + 'docs/email-output.md', + 'docs/doctoring/email-document-language-direction.md', + ]) { + const document = repositoryFile(path); + expect(document).toContain('Status: Implemented on protected main'); + expect(document).not.toContain('Status: Implemented on active PR'); + } + }); +}); From c086205c4484aac5da28b062f99e2963928b1dfa Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 04:37:08 +0900 Subject: [PATCH 2/9] docs(email): mark language metadata protected --- docs/email-output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/email-output.md b/docs/email-output.md index 6cb7587bc..2de2af4d3 100644 --- a/docs/email-output.md +++ b/docs/email-output.md @@ -1,6 +1,6 @@ # Deterministic email HTML output -Status: Implemented on active PR +Status: Implemented on protected main Inkspan's `markdownToEmailHtml()` is a deterministic Markdown-to-HTML bridge for email compose/send integrations. It is not a MIME builder, transport client, mailbox API, authentication surface, or persistence service. Hosts such as naruon own transport, recipients, authorization, tenant isolation, delivery policy, durable audit, retention, and downstream mail-client policy. From ed2fd7f4f031818bd038543feb31aa8b1ff614f1 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 04:37:35 +0900 Subject: [PATCH 3/9] docs(email): reconcile standards record maturity --- docs/doctoring/email-document-language-direction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/doctoring/email-document-language-direction.md b/docs/doctoring/email-document-language-direction.md index 9d66e8a8d..080322cd3 100644 --- a/docs/doctoring/email-document-language-direction.md +++ b/docs/doctoring/email-document-language-direction.md @@ -1,6 +1,6 @@ # Email document language and direction — standards doctoring -Status: Implemented on active PR +Status: Implemented on protected main ## Decision under review From fbc41013a10cdbbf04d5a150a13a6b48dc7298c0 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 04:42:11 +0900 Subject: [PATCH 4/9] test(docs): align email maturity contract with protected main --- src/emailOutputDocumentation.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/emailOutputDocumentation.test.ts b/src/emailOutputDocumentation.test.ts index cececd184..652b5d1d0 100644 --- a/src/emailOutputDocumentation.test.ts +++ b/src/emailOutputDocumentation.test.ts @@ -12,7 +12,7 @@ describe('deterministic email document metadata documentation', () => { it('documents full-document language and direction without moving host authority', () => { const guide = repositoryFile('docs/email-output.md'); - expect(guide).toContain('Status: Implemented on active PR'); + expect(guide).toContain('Status: Implemented on protected main'); expect(guide).toContain('languageTag'); expect(guide).toContain('textDirection'); expect(guide).toContain('Intl.getCanonicalLocales()'); From f2da2920ba8c2f346c48f01376e216cbae808ee9 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 5 Sep 2026 02:26:47 +0900 Subject: [PATCH 5/9] test(ci): cover event-specific Python matrix Signed-off-by: Seongho Bae --- office/tests/test_python_support_contract.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/office/tests/test_python_support_contract.py b/office/tests/test_python_support_contract.py index 7104fd661..209f48454 100644 --- a/office/tests/test_python_support_contract.py +++ b/office/tests/test_python_support_contract.py @@ -50,10 +50,14 @@ def test_python_support_range_matches_classifiers_and_ci_matrix() -> None: office_job = _workflow_job_block(workflow, "office") assert "runs-on: ubuntu-24.04" in office_job assert "runs-on: ubuntu-latest" not in office_job - matrix_match = re.search(r'python-version:\s*\[([^\]]+)\]', office_job) + matrix_match = re.search(r"python-version:\s*(.+)", office_job) assert matrix_match is not None - matrix_versions = tuple(re.findall(r'"(3\.\d+)"', matrix_match.group(1))) - assert matrix_versions == SUPPORTED_PYTHON_VERSIONS + pull_request_versions, push_versions = ( + tuple(re.findall(r'"(3\.\d+)"', versions)) + for versions in re.findall(r"fromJSON\('(\[[^']+\])'\)", matrix_match.group(1)) + ) + assert pull_request_versions == (SUPPORTED_PYTHON_VERSIONS[-1],) + assert push_versions == SUPPORTED_PYTHON_VERSIONS def test_python_support_documentation_matches_the_fixed_ci_environment() -> None: From 4e90b181923a1dbede19f15e2baa7e9a8de08d99 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 5 Sep 2026 02:32:54 +0900 Subject: [PATCH 6/9] test(ci): bind Python matrix to event Signed-off-by: Seongho Bae --- office/tests/test_python_support_contract.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/office/tests/test_python_support_contract.py b/office/tests/test_python_support_contract.py index 209f48454..a52ddec39 100644 --- a/office/tests/test_python_support_contract.py +++ b/office/tests/test_python_support_contract.py @@ -50,11 +50,16 @@ def test_python_support_range_matches_classifiers_and_ci_matrix() -> None: office_job = _workflow_job_block(workflow, "office") assert "runs-on: ubuntu-24.04" in office_job assert "runs-on: ubuntu-latest" not in office_job - matrix_match = re.search(r"python-version:\s*(.+)", office_job) + matrix_match = re.search( + r"python-version:\s*\$\{\{\s*github\.event_name\s*==\s*'pull_request'" + r"\s*&&\s*fromJSON\('(\[[^']+\])'\)\s*\|\|\s*" + r"fromJSON\('(\[[^']+\])'\)\s*\}\}", + office_job, + ) assert matrix_match is not None pull_request_versions, push_versions = ( tuple(re.findall(r'"(3\.\d+)"', versions)) - for versions in re.findall(r"fromJSON\('(\[[^']+\])'\)", matrix_match.group(1)) + for versions in matrix_match.groups() ) assert pull_request_versions == (SUPPORTED_PYTHON_VERSIONS[-1],) assert push_versions == SUPPORTED_PYTHON_VERSIONS From 618db429e08bb847a259d974082b7b5b44a49ee7 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sat, 5 Sep 2026 06:16:59 +0900 Subject: [PATCH 7/9] revert(ci): restore Office contract owner Remove the duplicated Python support contract changes from this email documentation branch. PR #405 remains the single writer while this branch keeps its protected-status documentation delta. Signed-off-by: Seongho Bae Commit-Message-Assisted-by: Claude (via Claude Code) --- office/tests/test_python_support_contract.py | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/office/tests/test_python_support_contract.py b/office/tests/test_python_support_contract.py index a52ddec39..7104fd661 100644 --- a/office/tests/test_python_support_contract.py +++ b/office/tests/test_python_support_contract.py @@ -50,19 +50,10 @@ def test_python_support_range_matches_classifiers_and_ci_matrix() -> None: office_job = _workflow_job_block(workflow, "office") assert "runs-on: ubuntu-24.04" in office_job assert "runs-on: ubuntu-latest" not in office_job - matrix_match = re.search( - r"python-version:\s*\$\{\{\s*github\.event_name\s*==\s*'pull_request'" - r"\s*&&\s*fromJSON\('(\[[^']+\])'\)\s*\|\|\s*" - r"fromJSON\('(\[[^']+\])'\)\s*\}\}", - office_job, - ) + matrix_match = re.search(r'python-version:\s*\[([^\]]+)\]', office_job) assert matrix_match is not None - pull_request_versions, push_versions = ( - tuple(re.findall(r'"(3\.\d+)"', versions)) - for versions in matrix_match.groups() - ) - assert pull_request_versions == (SUPPORTED_PYTHON_VERSIONS[-1],) - assert push_versions == SUPPORTED_PYTHON_VERSIONS + matrix_versions = tuple(re.findall(r'"(3\.\d+)"', matrix_match.group(1))) + assert matrix_versions == SUPPORTED_PYTHON_VERSIONS def test_python_support_documentation_matches_the_fixed_ci_environment() -> None: From d24b5d295bb7234392e87249678246e9b112ba12 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 7 Sep 2026 14:13:42 +0900 Subject: [PATCH 8/9] test(docs): reject stale email decision maturity Co-Authored-By: Codex Signed-off-by: Seongho Bae --- src/protectedEmailDocumentationStatus.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/protectedEmailDocumentationStatus.test.ts b/src/protectedEmailDocumentationStatus.test.ts index ca7e4d90f..8eafa4e18 100644 --- a/src/protectedEmailDocumentationStatus.test.ts +++ b/src/protectedEmailDocumentationStatus.test.ts @@ -15,6 +15,7 @@ describe('protected email documentation maturity', () => { const document = repositoryFile(path); expect(document).toContain('Status: Implemented on protected main'); expect(document).not.toContain('Status: Implemented on active PR'); + expect(document).not.toContain('## Decision under review'); } }); }); From ebe7e009828dc0bde90a1fcdb15e307a37ed0d4b Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 7 Sep 2026 14:14:14 +0900 Subject: [PATCH 9/9] docs(email): align decision heading with shipped behavior Co-Authored-By: Codex Signed-off-by: Seongho Bae --- docs/doctoring/email-document-language-direction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/doctoring/email-document-language-direction.md b/docs/doctoring/email-document-language-direction.md index 080322cd3..7ca12ee2c 100644 --- a/docs/doctoring/email-document-language-direction.md +++ b/docs/doctoring/email-document-language-direction.md @@ -2,7 +2,7 @@ Status: Implemented on protected main -## Decision under review +## Implemented decision A self-contained HTML email document generated by Inkspan may preserve explicit document language and base writing direction on its root `` element. Fragment output remains host-owned and therefore does not manufacture root-document metadata.