diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md
new file mode 100644
index 000000000..0691bb2c6
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug.md
@@ -0,0 +1,39 @@
+---
+name: 不具合
+about: 動かない・想定と違う挙動を報告する
+labels: bug
+---
+
+
+
+## 現象
+
+
+
+## 環境
+
+| | |
+|---|---|
+| バージョン | |
+| ターゲット | |
+| DBMS | |
+
+## 再現手順
+
+
+
+## 期待する動作
+
+## 調べたこと
+
+
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 000000000..6212323d7
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,16 @@
+# Issue テンプレートの設定
+#
+# blank_issues_enabled: true にしてあるため、**テンプレートは任意**である。
+# 「Open a blank issue」から、素の Issue も起票できる。
+#
+# テンプレートを Markdown(.md)にしているのも、任意にするため。
+# YAML フォーム(.yml)にすると必須項目を強制でき、書きたいことが書けなくなる。
+blank_issues_enabled: true
+
+contact_links:
+ - name: 脆弱性の報告(Security)
+ url: https://github.com/OpenTouryoProject/OpenTouryo/security/advisories/new
+ about: セキュリティに関する問題は、公開の Issue ではなく Private vulnerability reporting へ。SECURITY.md を参照。
+ - name: 質問・相談
+ url: https://github.com/OpenTouryoProject/OpenTouryo/issues?q=is%3Aissue
+ about: 同じ問題が既に挙がっていないか、先に検索してください。
diff --git a/.github/ISSUE_TEMPLATE/enhancement.md b/.github/ISSUE_TEMPLATE/enhancement.md
new file mode 100644
index 000000000..425f10f31
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/enhancement.md
@@ -0,0 +1,31 @@
+---
+name: 機能追加・改善
+about: 新しい機能や、既存機能の改善を提案する
+labels: enhancement
+---
+
+
+
+## 何をしたいか
+
+## なぜ必要か
+
+
+
+## 案
+
+
+
+## 影響
+
+
diff --git a/.github/ISSUE_TEMPLATE/quality.md b/.github/ISSUE_TEMPLATE/quality.md
new file mode 100644
index 000000000..75c466431
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/quality.md
@@ -0,0 +1,47 @@
+---
+name: 品質改善
+about: リファクタリング、規約整備、CI・セキュリティの整備、文書の整理
+labels: quality improvement
+---
+
+
+
+## 概要
+
+
+
+## 現状
+
+
+
+## 対応
+
+
+
+## 検証
+
+
+
+## 利用者への影響
+
+
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 000000000..5b2af8c41
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,46 @@
+
+
+## 概要
+
+
+
+## 変更内容
+
+
+
+## 検証
+
+
+
+## 利用者への影響
+
+
+
+---
+
+
diff --git a/AGENTS.md b/AGENTS.md
index 171d94214..1caa82b7d 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -60,6 +60,23 @@ gh issue create --repo OpenTouryoProject/OpenTouryo --title
--body-file
- 本文は一時ファイルに書き、`--body-file` で渡す(改行・記号の欠落を避ける)
- 投稿後は URL を報告する
+**テンプレートは自動では適用されない。読んで、その構成に沿って書くこと。**
+
+`gh issue create` / `gh pr create` の `--template` は「エディタで編集する前提の
+開始テキスト」であり、**`--body-file` と併用すると本文で上書きされる。**
+エージェントは `--body-file` を使うため、テンプレートは効かない。
+
+```
+.github/ISSUE_TEMPLATE/bug.md 不具合
+.github/ISSUE_TEMPLATE/enhancement.md 機能追加・改善
+.github/ISSUE_TEMPLATE/quality.md 品質改善(リファクタリング・規約・CI・文書)
+.github/pull_request_template.md PR
+```
+
+**テンプレートは任意**(`blank_issues_enabled: true`)だが、
+**「利用者への影響」は、無いなら「無し」と明記する。**
+空欄だと、確認したのか未確認なのかが読み手に分からない。
+
**このリポジトリでは `OsscJpDevInfra` アカウントを使用する。**
`gh auth status` に複数のアカウントが登録されていることがあるため、
投稿前にアクティブなアカウントを確認すること。異なる場合は `gh auth switch` で切り替える。
@@ -72,6 +89,23 @@ gh auth switch --user OsscJpDevInfra # 異なる場合は切り替え
**Issue のクローズ・ラベル変更・アサイン、PR の作成やマージは人が行う。**
これらは成果物の検収と同じ扱いとし、エージェントは提案に留める。
+**PR のレビューは、`--comment` だけ行ってよい。**
+
+| 操作 | 誰が行うか |
+|---|---|
+| `gh pr review --comment` | **エージェント可**(文面を提示し、承認を得てから) |
+| `gh pr review --approve` / `--request-changes` | **人のみ。検収に当たる** |
+| PR の作成・マージ | **人のみ** |
+
+`--comment` は `COMMENTED` として記録され、**必須レビューを満たさない**。
+`reviewDecision` は `REVIEW_REQUIRED` のまま変わらないので、
+**マージを進めてしまう心配は無い。**
+
+> **承認が必須レビューとして数えられるのは `write` 以上の人だけ。**
+> 公開リポジトリなので誰でも `read` は持つが、それでは足りない。
+> **自分が出した PR は、自分で承認できない。**
+> レビュアーの構成は [`GitHubUsage.md`](GitHubUsage.md) 2 節。
+
### コーディング規約は CODING.md、領域ごとの事情は ANALYSIS.md に従う
**規約は全領域に共通、分析は領域ごと**に分かれている。
diff --git a/GitHubUsage.md b/GitHubUsage.md
index 42ea1018c..28966f9f5 100644
--- a/GitHubUsage.md
+++ b/GitHubUsage.md
@@ -234,23 +234,72 @@ fixed 12 件 ≠ 12 件が直った
| ブランチ | 役割 | 保護 |
|---|---|---|
| `develop` | 既定ブランチ。開発の集約先 | force-push 禁止 / 削除禁止 |
-| `master` | リリース | 上記 + **レビュー 1 名必須** |
+| `master` | リリース | 上記 + **レビュー 1 名必須** + **必須チェック `build`** |
| `deps` | Dependabot PR の受け先 | なし |
ブランチ運用は git-flow。**規約は [`Contributing.ja.md`](Contributing.ja.md)。**
-### 現状の弱点
+### レビュアー
+
+`master` へのマージには**レビュー 1 名の承認**が要る(必須チェック `build` とあわせて 2 つの関所)。
+
+| | ロール | 承認 |
+|---|---|---|
+| `daisukenishino2` | admin | 可 |
+| `OsscJpDevInfra` | admin | 可 |
+| `daisukenishino77` | **write**(2026-08-10 に追加) | 可 |
+
+> **承認が必須レビューとして数えられるのは、`write` 以上の人だけ。**
+> `read` / `triage` でもレビューは書けるが、**ブランチ保護は満たさない。**
+> 公開リポジトリなので誰でも `read` は持つが、それでは足りない。
+
+> **自分が出した PR は、自分で承認できない。**
+> 3 名いるので、誰が PR を出しても残り 2 名から選べる。
+
+組織の `default_repository_permission` は `none`。
+リポジトリへの権限は**明示的に付与する**(`affiliation=direct` で確認できる)。
+
+```bash
+gh api repos/OpenTouryoProject/OpenTouryo/collaborators//permission --jq '{permission, role_name}'
+gh api "repos/OpenTouryoProject/OpenTouryo/collaborators?affiliation=direct" --jq '.[] | "\(.login) \(.role_name)"'
+gh api repos/OpenTouryoProject/OpenTouryo/invitations # 承諾待ちの招待
+```
+
+### 意図的にそうしている設定
+
+**弱点に見えるが、この運用では正しい**もの。理由を書いておかないと、また提案が出る。
+
- **`develop` に必須ステータス チェックは置かない**(意図的)。
`deps` ⇔ `develop` ⇔ feature と往復が多く、毎回のマージが CI 待ちになるため。
- 代わりに **`master` 宛の PR で CI を動かす**(7 節)
+ 代わりに **`master` 宛の PR で CI を動かす**(3 節・7 節)
- `master` の `enforce_admins` は無効(少人数運用のため意図的)
-- `delete_branch_on_merge` は無効。マージ済みブランチが残る
+- **`delete_branch_on_merge` は無効にしておく**(意図的)。
+ **作業ブランチを継続利用する運用**のため。`3rd_agent` は 4 回、`2nd_agent` は 6 回と、
+ 同じブランチを何度も `develop` へマージしている。
+ **自動削除にすると 1 回目で消えて、毎回作り直しになる。**
+ `deps`(Dependabot の受けブランチ)が消えると、`dependabot-retarget.yml` も機能しなくなる。
+ この設定は **PR ごとに使い捨てるブランチ**を前提としたもので、この運用には合わない
+
+### マージ方式は「通常のマージ」だけ
+
+```
+allow_merge_commit true
+allow_squash_merge false … 2026-08-10 に無効化
+allow_rebase_merge false … 同上
+```
-> **squash merge / rebase merge を許可している。**
-> ただし **squash はコミットを消すため、NuGet パッケージの Source Link を壊す**
-> ([`root/programs/CS/NuGet/README.md`](root/programs/CS/NuGet/README.md) 7 節)。
-> `master` へは `--no-ff` で入れること。**運用で担保している。**
+**squash と rebase はコミットを消す**(rebase は SHA が変わる)。
+公開済みの NuGet パッケージは**詰めた時のコミットに固定される**ため、
+そのコミットが到達不能になると **Source Link が壊れる。公開後には直せない**
+([`root/programs/CS/NuGet/README.md`](root/programs/CS/NuGet/README.md) 7 節)。
+
+**以前は「`master` へは `--no-ff` で」という申し合わせだけで担保していた。**
+実績としても squash は未使用、rebase も 1 度だけだったため、
+**選択肢ごと無くして、仕組みで防ぐことにした。**
+
+> ローカルの `git rebase`(push 前の整理)には影響しない。
+> PR のマージ ボタンから選択肢が消えるだけである。
---
@@ -263,6 +312,8 @@ fixed 12 件 ≠ 12 件が直った
| [`workflows/build-windows.yml`](.github/workflows/build-windows.yml) | 検証 3 本(ビルド・単体テスト・疎通)を windows-latest で |
| [`workflows/dependabot-retarget.yml`](.github/workflows/dependabot-retarget.yml) | Dependabot PR の向き先を `deps` へ変更 |
| [`secret_scanning.yml`](.github/secret_scanning.yml) | Secret scanning のアラートから除外するパス(1 節) |
+| [`ISSUE_TEMPLATE/`](.github/ISSUE_TEMPLATE) | Issue テンプレート 3 種 + `config.yml`(5 節) |
+| [`pull_request_template.md`](.github/pull_request_template.md) | PR テンプレート(5 節) |
**`dependabot.yml` は置いていない**(4 節)。
@@ -325,7 +376,57 @@ Actions が PR を承認できると、`master` のレビュー必須が形骸
---
-## 5. 有効にしていない機能
+## 5. Issue と PR
+
+### ラベル
+
+11 個を定義している。**設定は人が行う**(`AGENTS.md`)。
+
+| ラベル | 用途 |
+|---|---|
+| `bug` / `enhancement` / `question` | 種別 |
+| `duplicate` / `invalid` / `wontfix` | 処理の結果 |
+| **`quality improvement`** | 品質改善。**リファクタリング・規約整備・CI/セキュリティの整備**はここ |
+| `good first issue` / `help wanted` | 外部の参加者向け |
+| `dependencies` / `.NET` | **Dependabot が自動で付ける**。手で付けない |
+
+```bash
+gh label list --repo OpenTouryoProject/OpenTouryo
+gh issue view <番号> --repo OpenTouryoProject/OpenTouryo --json labels
+```
+
+### テンプレート
+
+```
+.github/ISSUE_TEMPLATE/config.yml 任意化 + Security への導線
+.github/ISSUE_TEMPLATE/bug.md 不具合 → labels: bug
+.github/ISSUE_TEMPLATE/enhancement.md 機能追加・改善 → labels: enhancement
+.github/ISSUE_TEMPLATE/quality.md 品質改善 → labels: quality improvement
+.github/pull_request_template.md PR
+```
+
+**強制しない。** そのために次の 2 点を選んでいる。
+
+| | 理由 |
+|---|---|
+| **Markdown 形式(`.md`)** | YAML フォーム(`.yml`)は**必須項目を強制できる**。書きたいことが書けなくなる |
+| **`blank_issues_enabled: true`** | 「Open a blank issue」から**素の Issue も起票できる** |
+
+`config.yml` の `contact_links` で、**セキュリティ問題を Private vulnerability reporting へ
+誘導している**(Issue の選択画面で分岐するので、公開 Issue に書かれる前に止まる)。
+
+**ラベルはテンプレートの front matter が自動で付ける。**
+画面から起票した場合のみで、`gh` の `--body-file` では付かない。
+
+> **エージェントにはテンプレートが自動適用されない。**
+> `--template` は「エディタで編集する前提の開始テキスト」で、
+> **`--body-file` と併用すると本文で上書きされる。**
+> エージェントはテンプレートを**読んで、その構成に沿って書く**
+> ([`AGENTS.md`](AGENTS.md))。
+
+---
+
+## 6. 有効にしていない機能
| 機能 | 判断 |
|---|---|
@@ -337,7 +438,7 @@ Actions が PR を承認できると、`master` のレビュー必須が形骸
---
-## 6. 実行したコマンドの記録
+## 7. 実行したコマンドの記録
**エージェントが `gh` で直接実行した設定変更。** 参照系(GET)は除く。
@@ -424,6 +525,76 @@ gh api repos/OpenTouryoProject/OpenTouryo/actions/permissions/workflow
grep -A3 '^permissions:' .github/workflows/*.yml
```
+### 2026-08-10 : master に必須チェックを設定
+
+`develop → master` の PR で `build-windows.yml` を発火させ(`pull_request: [master]`)、
+その成功をマージの条件にする。**リリースの関所。**
+
+**チェック名は `build`**(ワークフロー名 `Build on Windows` ではなく **ジョブ名**)。
+実測で確認すること。**名前を誤ると、通らないチェックを待ち続けてマージできなくなる。**
+
+```bash
+gh api repos/OpenTouryoProject/OpenTouryo/actions/runs//jobs --jq '.jobs[].name'
+```
+
+**`PATCH .../required_status_checks` は使えない**(未設定の状態では 404)。
+**ブランチ保護全体を `PUT` する**ため、**既存の設定を取得してから同じ値を明示的に渡す。**
+渡し漏れた項目は既定値に戻ってしまう。
+
+```bash
+# 1. 現在の設定を確認する
+gh api repos/OpenTouryoProject/OpenTouryo/branches/master/protection
+
+# 2. 既存値を保ったまま required_status_checks を足して PUT する
+cat > prot.json <<'JSON'
+{
+ "required_status_checks": { "strict": false, "contexts": ["build"] },
+ "enforce_admins": false,
+ "required_pull_request_reviews": {
+ "dismiss_stale_reviews": false,
+ "require_code_owner_reviews": false,
+ "require_last_push_approval": false,
+ "required_approving_review_count": 1
+ },
+ "restrictions": null,
+ "required_linear_history": false,
+ "allow_force_pushes": false,
+ "allow_deletions": false,
+ "block_creations": false,
+ "required_conversation_resolution": false,
+ "lock_branch": false,
+ "allow_fork_syncing": false
+}
+JSON
+
+gh api -X PUT repos/OpenTouryoProject/OpenTouryo/branches/master/protection --input prot.json
+
+# 3. 全項目を照合する(渡し漏れが無いか)
+gh api repos/OpenTouryoProject/OpenTouryo/branches/master/protection
+```
+
+`strict`(Require branches to be up to date)は **`false`**。
+`true` にすると、`master` が動くたびに PR の再更新と CI 再実行が要る。
+リリース時の 1 回きりの操作なので不要。
+
+> **詰まったら。** `enforce_admins` は `false` なので管理者権限で回避できる。
+> 解除は同じ `PUT` で `required_status_checks` を `null` にする。
+
+**設定した直後に、検証用の PR で動作を確かめた**(`#539`、マージせずクローズ)。
+
+```
+build pass 13m57s ← pull_request:[master] で発火し、成功
+CodeQL pass
+mergeStateStatus BLOCKED
+reviewDecision REVIEW_REQUIRED ← 止まっているのはレビュー未承認だけ
+```
+
+**チェック名が違っていれば、`build` が「Required だが未実行」として別の形で止まる。**
+`BLOCKED` の理由がレビューだけであることを確認すれば、名前が一致していると分かる。
+
+**CI は約 14 分**かかる。ローカルの実測(ビルド 9 分 + テスト + 疎通)より長いのは、
+DB の導入と初期化が入るため。**リリース時はこれを見込むこと。**
+
### 有効化後の運用
**新しく push する内容だけ**が検査される。既存の履歴は対象外。
@@ -440,15 +611,11 @@ grep -A3 '^permissions:' .github/workflows/*.yml
---
-## 7. 未着手の提案
+## 8. 未着手の提案
| | 内容 |
|---|---|
-| **`master` の CI 必須化** | `build-windows.yml` に `on: pull_request: branches: [master]` を足し、`master` のブランチ保護で必須チェックにする。**リリースの関所**として働く(下記) |
| `allowed_actions` を絞る / SHA 固定 | 現在 `all` / 強制なし。サプライ チェーン対策。**運用が重くなる**ので、必要性とあわせて判断する |
-| `delete_branch_on_merge` | マージ済みブランチを自動削除する |
-| `SECURITY.md` | Private vulnerability reporting は有効にしたが、文書は未整備 |
-| Issue / PR テンプレート | 「調査 → 実装 → 検証」の型が定まっているのでテンプレート化できる |
| `.github/dependabot.yml` | #517 の決着後 |
> **`develop` を必須チェックの対象にはしない。**
diff --git a/README.md b/README.md
index aa56059e6..84b531b6b 100644
--- a/README.md
+++ b/README.md
@@ -36,3 +36,12 @@ For the setup and build steps, refer to [/root/README.md](root/README.md).
### [AGENTS.md](AGENTS.md)
This is the **entry point** when working on this repository with a coding agent.
It summarizes the policies to follow and the links to the documents to refer to.
+
+### [CONTRIBUTING.md](CONTRIBUTING.md)
+Coding rules and conventions, the branching model, and the granularity of pull requests.
+**The same rules apply to people and to coding agents.**
+
+### [SECURITY.md](SECURITY.md)
+How to report a vulnerability, which versions are supported, and what is out of scope.
+**Do not open a public issue for a security problem** — use
+[private vulnerability reporting](https://github.com/OpenTouryoProject/OpenTouryo/security/advisories/new).
diff --git a/Readme.ja.md b/Readme.ja.md
index 8c4c44fa9..c5fff4a81 100644
--- a/Readme.ja.md
+++ b/Readme.ja.md
@@ -36,3 +36,12 @@ Open 棟梁のドキュメントは、[OpenTouryoDocuments リポジトリ](http
### [AGENTS.md](AGENTS.md)
コーディング エージェントで本リポジトリを扱う場合の**入口**です。
守るべきポリシーと、参照すべき文書への導線をまとめています。
+
+### [Contributing.ja.md](Contributing.ja.md)
+コーディング規約、ブランチ運用、プルリクエストの粒度をまとめています。
+**人もコーディング エージェントも、同じ規約に従います。**
+
+### [Security.ja.md](Security.ja.md)
+脆弱性の報告方法、対象バージョン、対象範囲をまとめています。
+**セキュリティに関する問題を、公開の Issue に書かないでください。**
+[Private vulnerability reporting](https://github.com/OpenTouryoProject/OpenTouryo/security/advisories/new) を使ってください。
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 000000000..ae0f63e3c
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,76 @@
+# Security Policy
+
+Click [here](Security.ja.md) for the Japanese version of this file.
+
+## Supported Versions
+
+Security fixes are applied to the latest release line only.
+
+| Version | Supported |
+|---|---|
+| 3.0.x | :white_check_mark: |
+| 2.x | :x: |
+
+Prerelease packages (`-preview*` / `-alpha*`) are for evaluation and are not supported.
+
+## Reporting a Vulnerability
+
+**Please do not open a public issue for a security problem.**
+
+Use **[Private vulnerability reporting](https://github.com/OpenTouryoProject/OpenTouryo/security/advisories/new)**.
+The report stays private until a fix is published, and the discussion happens in the same place.
+
+Please include:
+
+- Which assembly and version (for example, `OpenTouryo.Public.Security` 3.0.0)
+- Which target framework (`net48` or `net10.0`) — **the two are separate implementations
+ in several places**, so a problem may exist in only one of them
+- Steps to reproduce, or the code path you believe is affected
+- What an attacker gains
+
+We are a small team. We will acknowledge the report and tell you what we intend to do,
+but we cannot promise a fixed turnaround time.
+
+## Scope
+
+This repository contains both the framework and the samples that show how to use it.
+
+| Path | Scope |
+|---|---|
+| `root/programs/CS/Frameworks/Infrastructure/` | **In scope.** This is what ships as NuGet packages |
+| `root/programs/CS/Frameworks/Tools/` | **In scope** |
+| `root/programs/CS/Samples/`, `Samples4NetCore/`, `root/programs/VB/` | Samples. **Reports are welcome**, but they are teaching material and are not shipped |
+| `root/files/resource/X509/` | **Out of scope.** Self-signed certificates and private keys **for tests only** |
+
+## Already known and accepted
+
+**Static analysis (CodeQL) runs on this repository, and its findings have been triaged.**
+Before reporting a scanner result, please check
+**[#536](https://github.com/OpenTouryoProject/OpenTouryo/issues/536)** — it records what was
+fixed, what was dismissed, and why.
+
+The following are known and deliberate:
+
+- **`CipherMode_ECB`** is marked `[Obsolete]`. It is one of five cipher modes the caller can
+ choose, and it is **not the default** — when no mode is given, .NET's default (CBC) is used.
+ It is kept for backward compatibility
+- **`BinarySerialize`** (`BinaryFormatter`) exists **for `net48` only**. It is excluded from
+ the `net10.0` build (`` in `Public_netcore100.csproj`)
+- **Sample `Web.config` files use `requireSSL="false"`**, because the samples are meant to be
+ run over HTTP. The production setting is provided next to it, commented out, with a note to
+ enable it
+
+Reports that show a **concrete exploit** for any of the above are still welcome.
+
+## Security Practices in This Repository
+
+| | |
+|---|---|
+| Secret scanning + Push protection | Enabled |
+| Code scanning (CodeQL) | Enabled. `csharp`, `javascript-typescript`, `actions` |
+| Dependabot alerts / security updates | Enabled |
+| Private vulnerability reporting | Enabled |
+| Branch protection (`master`) | Review required + CI must pass |
+
+The settings themselves live on GitHub and are not visible from the files in this repository,
+so they are written down in [`GitHubUsage.md`](GitHubUsage.md).
diff --git a/Security.ja.md b/Security.ja.md
new file mode 100644
index 000000000..5256d9c79
--- /dev/null
+++ b/Security.ja.md
@@ -0,0 +1,75 @@
+# セキュリティ ポリシー
+
+英語版は [SECURITY.md](SECURITY.md) を参照。
+
+## 対象バージョン
+
+**セキュリティ修正は、最新のリリース系統にのみ適用する。**
+
+| バージョン | 対象 |
+|---|---|
+| 3.0.x | :white_check_mark: |
+| 2.x | :x: |
+
+プレリリース版(`-preview*` / `-alpha*`)は評価用であり、対象外。
+
+## 脆弱性の報告
+
+**セキュリティに関する問題を、公開の Issue に書かないでください。**
+
+**[Private vulnerability reporting](https://github.com/OpenTouryoProject/OpenTouryo/security/advisories/new)**
+を使ってください。修正が公開されるまで非公開のまま扱われ、やり取りも同じ場所で行えます。
+
+報告には次を含めてください。
+
+- **どのアセンブリの、どのバージョンか**(例: `OpenTouryo.Public.Security` 3.0.0)
+- **どのターゲット フレームワークか**(`net48` / `net10.0`)。
+ **両者は複数の箇所で別実装**であり、**片方にしか存在しない問題**があり得る
+- 再現手順、または問題があると考えるコード パス
+- 攻撃者が何を得られるか
+
+少人数で開発しているため、**受領と対応方針は連絡しますが、期限の確約はできません。**
+
+## 対象範囲
+
+本リポジトリには、フレームワーク本体と、その使い方を示すサンプルの両方が含まれる。
+
+| パス | 範囲 |
+|---|---|
+| `root/programs/CS/Frameworks/Infrastructure/` | **対象。** NuGet パッケージとして配布しているもの |
+| `root/programs/CS/Frameworks/Tools/` | **対象** |
+| `root/programs/CS/Samples/`、`Samples4NetCore/`、`root/programs/VB/` | サンプル。**報告は歓迎する**が、教材であり配布物ではない |
+| `root/files/resource/X509/` | **対象外。** **テスト専用**の自己署名証明書と秘密鍵 |
+
+## 既知であり、意図的なもの
+
+**本リポジトリでは静的解析(CodeQL)を実施し、検出結果をトリアージ済みである。**
+スキャナの結果を報告する前に、
+**[#536](https://github.com/OpenTouryoProject/OpenTouryo/issues/536)** を確認してください。
+**何を修正し、何を棄却し、その理由は何か**を記録している。
+
+次は既知であり、意図的なものである。
+
+- **`CipherMode_ECB`** には `[Obsolete]` を付与済み。利用者が選べる 5 つの暗号モードの 1 つで、
+ **既定ではない**(モードを指定しなければ .NET の既定である CBC が使われる)。
+ **下位互換のために残している**
+- **`BinarySerialize`**(`BinaryFormatter`)は **`net48` のみ**に存在する。
+ `net10.0` のビルドからは除外している(`Public_netcore100.csproj` の ``)
+- **サンプルの `Web.config` が `requireSSL="false"`** なのは、
+ **サンプルを HTTP で動かす前提**のため。本番用の設定は、その隣にコメントアウトで併記し、
+ 有効にするよう注記してある
+
+**上記について具体的な攻撃が成立することを示す報告**は、引き続き歓迎する。
+
+## 本リポジトリでの取り組み
+
+| | |
+|---|---|
+| Secret scanning + Push protection | 有効 |
+| Code scanning(CodeQL) | 有効。`csharp` / `javascript-typescript` / `actions` |
+| Dependabot alerts / security updates | 有効 |
+| Private vulnerability reporting | 有効 |
+| ブランチ保護(`master`) | レビュー必須 + CI の成功が必須 |
+
+設定の実体は GitHub 側にあり、**リポジトリのファイルからは見えない**ため、
+[`GitHubUsage.md`](GitHubUsage.md) に記録している。
diff --git a/root/programs/CHEATSHEET.md b/root/programs/CHEATSHEET.md
index 1d7f0d367..7940e361c 100644
--- a/root/programs/CHEATSHEET.md
+++ b/root/programs/CHEATSHEET.md
@@ -42,7 +42,8 @@ cd root\programs
**一次情報は [`RELEASE.md`](RELEASE.md) と [`CS/NuGet/README.md`](CS/NuGet/README.md)。**
```
-1. develop → master へマージ(--no-ff)し、タグをプッシュ
+1. develop → master へ PR を出し、マージ(--no-ff)してタグをプッシュ
+ master は PR 経由のみ。レビュー 1 名 + CI(build、約 14 分)が要る
2. .\0_SetVersion.ps1 -Version 3.3.0
3. コミット & push ← Source Link はこのコミットに固定される
4. CS\0_Release4Nuget.bat ← 版はアセンブリに焼き込まれる
@@ -188,5 +189,6 @@ powershell.exe -NoProfile -Command "Set-Location 'root\programs'; .\3_SmokeTest.
- **GitHub への投稿は、文面を提示して承認を得てから。** `gh` で行い、`--body-file` を使う。
アカウントは `OsscJpDevInfra`(`gh auth status` で確認)
- **Issue のクローズ・ラベル・アサイン、PR の作成やマージは人が行う**
+- **PR のレビューは `--comment` だけ。** `--approve` / `--request-changes` は人のみ
- **NuGet への push は人のみ**(外部公開で取り消しが困難)
- 前提となるサービスや DB の状態が足りないときは、**勝手に変えず対処方法とともに報告する**
diff --git a/root/programs/CS/NuGet/README.md b/root/programs/CS/NuGet/README.md
index 4e3c7f611..984115e2f 100644
--- a/root/programs/CS/NuGet/README.md
+++ b/root/programs/CS/NuGet/README.md
@@ -546,6 +546,14 @@ https://raw.githubusercontent.com/OpenTouryoProject/OpenTouryo/<SHA>/<パ
**したがって、詰めたコミットは `--no-ff` で develop → master へ流して残す。**
master は履歴を書き換えないため、これが最も確実である。
+> **上の 2 つ(squash / rebase)は、GitHub 側で選べないようにしてある。**
+> リポジトリ設定で `allow_squash_merge` / `allow_rebase_merge` を無効にしたため、
+> **PR のマージ ボタンからは「通常のマージ」しか選べない**
+> ([`GitHubUsage.md`](../../../../GitHubUsage.md) 2 節)。
+>
+> **残る 3 つは依然として手作業で起こせる。**
+> force-push と、ブランチの削除には気を付けること。
+
### 「先頭コミット」ではない
守るべきは**詰めた時点の HEAD** であり、そのブランチの先端であり続ける必要はない。
diff --git a/root/programs/RELEASE.md b/root/programs/RELEASE.md
index 3de3df9f4..1e9c55960 100644
--- a/root/programs/RELEASE.md
+++ b/root/programs/RELEASE.md
@@ -304,6 +304,9 @@ cd root\programs
… パッケージは**詰めた時のコミットに永久に固定される**。
同じバージョンは一度しか公開できないため、develop 段階で出すなら
**プレリリース版**(`3.3.0-alpha1` など)にする(`README.md` 1 節(0)・7 節)
+ … **`master` は PR 経由でしか入らない。** ブランチ保護で
+ **レビュー 1 名 + CI(`build`)の成功**が必須。**CI は約 14 分かかる**
+ (ローカルの検証 3 本に加え、CI 側は DB の導入と初期化が入るため)
- [ ] **そのコミットを push 済みである**
… 未 push だと Source Link が 404 になる。**公開後には直せない**
- [ ] `CS\0_Release4Nuget.bat` を実行した