SPIKES GUILD 運用マニュアル
SPIKES GUILD (全学生団体データベース) (4S株式会社) を運用するための実務マニュアル。10画面・49アクションの全ボタンと、7つの業務フロー、押す前に知らないと事故る 落とし穴を記載する。内容は 5 レンズの監査 (UI状態 / ワークフロー / セキュリティ / データ整合性 / 運用) が実際のコードから確認した挙動のみで、推測は書いていない。
設計の真実源: docs/SPIKES_MASTERPLAN.md / 進捗: docs/guildnet/tasks.json (tracker.html) / 仕様ページ: /masterplan/guildnet
0. 不可逆操作 — 先にこれを読む
押すと戻せない (または戻すのに運営の DB 操作が要る) 操作。特に一番上の「暗号鍵」は 事業が止まるレベルなので、本番の鍵は絶対に触らない。
| 操作 | 何が起きるか | ルール |
|---|---|---|
| 暗号鍵 (EMAIL_ENC_KEY) のローテーション | 全 person の氏名・連絡先・勤務先が永久に読めなくなる。復旧手段は無い。 | 本番の鍵は固定。変えるなら全 PII の再暗号化スクリプトが先。 |
| 取込の「承認」 | 在籍レコードと氏名が本テーブルに載る | 名寄せは承認の後にやる。 |
| 会費の「一括請求」 | 対象者全員に請求が飛ぶ | 先に「対象人数を確認」。 |
| 会費プランの「締切」 | 以後は一括請求できない | — |
| 商談の「成約」 | 手数料が確定し履行チェックリストが展開される | 金額を確認してから。中止は可能。 |
| 年次ロールオーバー | 団体が休眠・凍結に落ちる (GUILD の公開面・企業検索から消える) | 4〜5月にだけ押す。プレビューで件数確認。 |
| 「引退を記録する」 | 在籍が終了し OB スコープになる | 唯一の owner は引退できない。 |
| Primary Contact の移譲 | 旧 owner が editor に降格する | claim 済みの人しか指名できない。 |
| 戦績の削除 | 行が物理削除される (台帳に記録は残る) | 二段階クリック。 |
| AI 抽出 (外部送信の同意) | 委託名簿が外部 API に送られる (取消不能) | 同意チェックなしなら送られない。 |
| エクスポート | 氏名込みのデータがローカルに落ちる | ダウンロードの事実は台帳に残る。 |
1. 役割と入口
| 役割 | できること | 入口 |
|---|---|---|
| 運営 (4S) | 全画面。団体の承認・取込・招待・企業審査・年次運用 | /admin/guildnet |
| 団体の代表・幹部 | 自団体のページ・名簿・年鑑・戦績・協賛メニュー・会費 (現状は運営が代理操作) | 運営に依頼 → /admin/guildnet/[団体] |
| OB・OG | 招待 URL から claim → 自分史を見る・公開範囲を変える・更新提案を承認する・会費を確認する | /claim/[招待トークン] → (サインイン後) /guild/me |
| 企業 | 企業パートナー登録 → 運営と協業テーマを整理。公開検索はデータ成立まで停止中 | /guild/sponsors |
現状、団体の幹部・OB会幹事が自分でログインして操作する画面は未実装 — 運営 (4S) が admin から 代理操作する。本人 (OB・現役部員) だけは自分の画面を持つ: 招待 URL から claim したあと、サインインすれば /guild/me で 公開範囲の変更・更新提案の承認・会費の確認ができる (同意の天井は本人しか動かせないため、 運営が代理で変更してはいけない)。
2. 業務フロー (7)
① 団体を立ち上げる
担当: 運営
- 団体を開設する (名前・大学名)/admin/guildnet/renewal
- slug (公開 URL) を設定する/admin/guildnet/[団体]slug が無いと GUILD の公開面に永久に出ない
- 創立年・公認区分を入れる/admin/guildnet/[団体]
- 名簿を取り込む → 招待 → claim (フロー②③)—
- PLG で開設した団体は claim 済み 25 人に達するまで公開されない (dormant のまま)。中身が空の GUILD ページを作らないための設計。
- 既存の承認済み団体 (SPIKES GUILD 由来の 76 団体) は閾値を免除して有効化済み。
② 名簿を取り込む
担当: 運営
- CSV を貼り付けて「プレビュー」/admin/guildnet/importDB には書かない
- 「ドラフトを作成」同上この時点では誰にも見えない (org 隔離ドラフト)
- 「レビュー」→ 行を確認 → 「承認」同上承認した行だけが名簿に載る
- (必要なら) 名寄せ候補を確認/admin/guildnet/merges**承認の後**にやる
- 名寄せ (merges の統合) を承認より先にやってはいけない。 統合された仮 person に後から承認で在籍を足すと、部員数にも会費にも現れない幽霊行ができる。順序は「取込 → 承認 → 名寄せ」。
- CSV には退部年 (卒業年) の列を必ず入れる。 無いと全員が「現役」扱いになり、OB 会費の対象者が 0 人になる (逆に現役会費が OB 全員に飛ぶ)。
- 同じ CSV を二度取り込むと二重人物になるため、DB レベルで拒否される (既存ドラフトへ誘導)。
- AI 抽出 (AiExtractPanel) は外部送信の同意チェックが必須。未チェックなら決定論パースに落ちる — 委託名簿を Anthropic に送るのは個情法の「委託先への提供」に当たるため。
③ OB を招待して claim してもらう
担当: 運営 → 本人
- 団体を選ぶ → 未 claim の人を選択 → 「招待を発行」/admin/guildnet/invites「メールでも送る」にチェックすると、登録済みアドレスへ claim URL を自動送信する (既定 off)
- **すぐに「全 URL をコピー」して保存する**同上平文 URL はこの応答にしか存在しない
- メール未登録・LINE 等それ以外の経路の人には URL を手動で送る—自動送信があるのはメールだけ (既定 off・チェックで有効化)。LINE 等の自動送信は無い
- 本人が claim → 18歳申告 → 公開範囲を選ぶ → 自分史が見える/claim/[token]
- 本人がサインインして継続利用する (公開範囲の変更・提案承認・会費確認)/guild/meログイン中に claim すれば自動で紐づく。後からでも招待リンクを貼れば紐づく
- 招待 URL は画面を閉じると二度と取得できない (DB には HMAC ハッシュしか無い)。再発行はできるが、古い URL も 90 日間は有効なまま残る。
- 招待を出した日から 24 ヶ月で claim されなければ、氏名等が暗号鍵ごと自動破棄される (保持期限)。
- 本人に案内するプライバシーポリシーは /guild/privacy。/privacy は SPIKES LP の別物。
- claim だけで終わると本人は迷子になる。 トークンを失った本人には公開範囲を変える手段が無くなるので、claim 後に /guild/me へのサインインまで案内する (通知の遷移先もすべてこの画面)。
④ 会費を集める
担当: 運営 / OB会幹事
- プランを作る (年度・金額・対象・期限・振込先案内)/admin/guildnet/fees
- **「対象人数を確認」を必ず押す**同上0人・想定外の人数なら止める
- 「一括請求」同上対象者に請求が飛ぶ (取り消せない)
- 「明細」で氏名を出す → メール/郵送で連絡 (手動)同上
- 入金を「入金」ボタンで記録同上
- 「未納督促」は記録と同時に本人へ督促メールを自動送信する (登録済みメールアドレスへ best-effort・冷却7日・上限3回)。メール未登録の人には送れないので、その分だけ「明細」で氏名を出して人力で連絡する。
- 資金は預からない。 振込先は団体の口座を案内文に書く。プラットフォームは納付状況を管理するだけ。
- 徴収率の分母: 免除 (waived) は分母から外すが、連絡不能 (lost) は外さない — lost を外すと名簿の腐敗が数字から消えるため。
- 「締切」は片道。締切後は一括請求ができなくなる。
⑤ 協賛を取る
担当: 運営 / 団体 / 企業
- 団体の協賛メニューを棚に置く (種別・価格・履行内容)/admin/guildnet/sponsor
- 企業がパートナー登録し、協業テーマを送る/guild/sponsors
- 運営が企業を審査 → 「承認」/admin/guildnet/sponsor
- 運営が条件の合う団体へ個別に接続する同上公開検索はデータ成立まで停止中
- 交渉 → 「成約」(手数料が自動確定)同上
- 履行チェックリストを提出 → 承認 → 「完了」同上完了で履行実績が付く
- 履行内容のラベルには「SNS投稿」の語を必ず入れる。 #PR 必須チェックはラベルの正規表現で判定するため、「リール告知」等だと #PR なしで提出できてしまう (ステマ規制違反)。
- 企業には個人データを一切見せない (職安法)。公開検索を再開する場合も団体レベルの集計だけを扱う。
- 協賛メニューの「停止」は掲載を止めるだけ。団体が休眠に落ちると、その団体のメニューは企業検索から消える。
- 高野連加盟団体は協賛の掲載自体ができない (協賛可否マトリクスが自動で弾く)。
⑥ 代替わりする (年次)
担当: 運営 / 団体
- 3-5月: 新入部員の追加・新歓ページ更新など通常の管理操作をする各画面
- 「副産物を自動判定して完了にする」/admin/guildnet/renewal管理操作のあった団体を再登録完了にする
- 引き継ぎチェックリストを埋める同上財務・SNS認証情報・スポンサー連絡先など7項目
- 「Primary Contact を移譲」で新代表を立てる同上
- 引退部員の「引退を記録する」 (OB 意思表明)同上OB・OG 向け GUILD 面の獲得タッチポイント
- 次期代表に指名できるのは claim 済み (18歳申告済み) の人だけ。 未 claim の部員を選ぶと必ず失敗する → 先に招待して claim してもらう。
- 年次ロールオーバー (団体を休眠に落とす操作) は 4〜5月にだけ押す。 1〜3月に押すと、その年度の再登録を完了した団体まで休眠に落ちる。押す前に必ず「副産物を自動判定」を先に実行し、プレビューで件数を確認する。
- 唯一の owner は引退できない (先に代替わりが必要)。OB が現役ページを編集する事故を防ぐため。
⑦ 年鑑と戦績を残す
担当: 運営 / 団体
- 戦績を追加 (大会・年・部門・成績・出典URL)/admin/guildnet/[団体]
- 年鑑を作成 (年度を指定)同上ロスターと戦績は自動で入る
- 年鑑を「公開」同上
- 出典 URL を付けると検証レベルが「自己申告 → 出典あり」に上がる。 出典なしの記録はランキング等の集計対象にならない。
- 戦績は自由テキストではなく「大会 × 年 × 部門 × ラウンド + 成績の型」で持つ。テンプレートは対戦トーナメント型と審査採点型の2種。
- 年鑑を公開しても個人名は出ない (ロスターは「部員52名 (公開12名)」の集計表示)。
3. 全画面・全ボタン
ハブ /admin/guildnet
担当: 運営 — 団体の状態 (稼働/休眠/凍結) の把握と、年次ロールオーバー。全画面への導線。
| ボタン | 何をするか | 危険度 | 押す前に |
|---|---|---|---|
| 年次ロールオーバー実行 | 再登録が未完了の団体を 稼働 → 休眠 → 凍結 に落とす (ページは消さない) | 不可逆 | 4〜5月にだけ押す。1〜3月に押すと当年度の再登録済み団体まで落ちる。実行前にプレビューで件数を確認し、先に renewal の「副産物を自動判定」を回すこと。 |
団体編集 /admin/guildnet/[団体]
担当: 運営 — プロフィール (創立年・公認区分・slug)・可視性の既定・年鑑・戦績。
| ボタン | 何をするか | 危険度 | 押す前に |
|---|---|---|---|
| 保存 (プロフィール) | 創立年・公認区分を台帳に記録 | 可逆 | — |
| slug を設定 | 公開 URL (/guild/orgs/[slug]) を決める | 準不可逆 | slug が無いと GUILD の公開面に出ない。変更すると旧 URL は 404 になる。 |
| 可視性の既定を変更 | 氏名・勤務先・連絡先を団体としてどこまで見せるかの既定値 | 可逆 | 本人の同意の天井を超えては広がらない (三層 ACL)。 |
| 年鑑を作成 / 公開 / 非公開に戻す | 年度の年鑑を作り公開する | 可逆 | — |
| 戦績を追加 | 大会 × 年 × 部門 × 成績を台帳に記録 | 可逆 | 出典 URL を付けると検証レベルが上がる (集計対象になる)。 |
| 戦績を削除 | 戦績を物理削除 | 不可逆 | 二段階クリック。台帳には削除の記録が残るが、行は戻らない。 |
| 今年度の再登録を完了にする | 稼働状態に戻し、最終確認年度を更新 | 準不可逆 | — |
取込 /admin/guildnet/import
担当: 運営 — 名簿 (CSV/貼り付け/AI抽出) → org 隔離ドラフト → レビュー承認 → 名簿反映。
| ボタン | 何をするか | 危険度 | 押す前に |
|---|---|---|---|
| プレビュー | パース結果を見る (DB には書かない) | 読取のみ | — |
| ドラフトを作成 | PII を金庫に封入して非公開ドラフトを作る | 準不可逆 | 同じ内容の二度目は DB が拒否する (二重人物の防止)。取り込んだ日から24ヶ月で保持期限が始まる。 |
| 選択した N 行を承認 | 在籍レコードと氏名を本テーブルに載せる | 不可逆 | 名寄せ (merges) を先にやってはいけない。 統合済みの person に承認すると幽霊行になる。 |
| 却下 / 却下を戻す | 行をレビュー対象から外す (戻せる) | 可逆 | — |
| AI で抽出する | LLM で自由形式の名簿を構造化する | 不可逆 | 外部送信の同意チェックが必須 (委託名簿を外部 API に送るのは個情法の委託先提供)。未チェックなら決定論パースに落ちる。送信の意思決定は監査ログに残る。 |
claim ファネル /admin/guildnet/invites
担当: 運営 — 招待の発行・claim 率の把握・代理更新提案の承認。
| ボタン | 何をするか | 危険度 | 押す前に |
|---|---|---|---|
| 招待を発行 | 招待 URL を作る (DB にはハッシュのみ) | 不可逆 | 発行したら即「全 URL をコピー」する。 画面を離れると二度と取得できない。再発行しても古い URL は90日間有効。 |
| 全 URL をコピー (TSV) | 氏名 + URL をクリップボードへ | 読取のみ | — |
| 代理更新提案の承認 / 却下 | 仲間からの「転職したよ」提案を反映/破棄 | 準不可逆 | 本人には通知が飛ぶ。検証レベルは peer_confirmed (本人確定は騙らない)。 |
会費 /admin/guildnet/fees
担当: 運営 / OB会幹事 — プラン作成 → 一括請求 → 納付管理 → 未納督促 → 回収率。資金は預からない。
| ボタン | 何をするか | 危険度 | 押す前に |
|---|---|---|---|
| 対象人数を確認 | 請求が飛ぶ人数を事前に見る | 読取のみ | 一括請求の前に必ず押す。 |
| プランを作る | 年度・金額・対象・期限を決める (draft) | 可逆 | — |
| 一括請求 | 対象者全員に請求を発行 | 不可逆 | 対象人数を確認してから。冪等なので再実行しても二重にはならない (差分のみ発行)。 |
| 未納督促 | 督促した事実を記録し、通知を作る | 不可逆 | メール登録済みの人には自動でメールが送られる (best-effort・冷却7日・上限3回)。メール未登録の人には送れないので、その分だけ「明細」で氏名を出して手動で連絡する。 |
| 明細 | 氏名込みの請求一覧 (admin のみ・金庫から復号) | 読取のみ | — |
| 入金 / 免除 / 連絡不能 / 取消 | 納付状態を記録 | 可逆 | — |
| 締切 | プランを閉じる | 不可逆 | 以後は一括請求できない。 |
スポンサー市場 /admin/guildnet/sponsor
担当: 運営 — 企業審査・SKU棚・商談・手数料・履行管理。企業に個人データは一切出さない。
| ボタン | 何をするか | 危険度 | 押す前に |
|---|---|---|---|
| 企業を承認 / 停止 | 審査。承認された企業だけが問い合わせできる | 準不可逆 | — |
| プラン設定 (標準3万 / 包括10万) | 企業サブスクの月額 | 可逆 | — |
| 棚に置く (協賛メニュー) | 種別・価格・履行内容を掲載 | 可逆 | 履行内容に「SNS投稿」の語を入れる (#PR 必須チェックの作動条件)。高野連団体は掲載自体が弾かれる。 |
| 停止 / 再開 (掲載) | 掲載の一時停止 | 可逆 | — |
| 成約 | 成約額を確定し手数料を自動計算 (逆進)。履行チェックリストを自動展開 | 不可逆 | 手数料込みの確認が出る。中止は「中止」ボタンで。 |
| 履行の提出 / 承認 | 証跡 URL を登録して承認する | 準不可逆 | SNS 履行は #PR チェックが無いと提出できない (ステマ規制)。 |
| 完了 | 商談を完了し履行実績を付ける | 不可逆 | — |
再登録・代替わり /admin/guildnet/renewal
担当: 運営 — 年次再登録の自動判定・代替わり・引退OB・復活・PLG開設・エクスポート。
| ボタン | 何をするか | 危険度 | 押す前に |
|---|---|---|---|
| 副産物を自動判定して完了にする | 3-5月の管理操作があった団体を再登録完了にする | 準不可逆 | 対象一覧を目視してから押す。稼働団体のみが対象 (凍結団体は迂回復活しない)。 |
| Primary Contact を移譲 | 新代表を立てる (旧 owner は editor に降格) | 不可逆 | claim 済み (18歳申告済み) の人しか選べない。 未 claim なら先に招待する。 |
| 引退を記録する | 在籍を終了し OB スコープを付与 | 不可逆 | 唯一の owner は引退できない (先に代替わり)。OB 意思にチェックを入れると claim 招待の通知が出る。 |
| 復活させる (系譜を継ぐ) | 休眠・凍結の団体を稼働に戻す | 準不可逆 | 新代表の指名が必要。 |
| 団体を開設する | PLG 開設 (claim 25人まで非公開) | 準不可逆 | — |
| claim 数を再判定 | 閾値到達なら公開する | 準不可逆 | — |
| エクスポートしてダウンロード | 団体の全データ (氏名含む) を JSON/CSV で保存 | 不可逆 | PII がローカルに落ちる。取り扱いに注意。ダウンロードの事実は台帳に残る。 |
名寄せ /admin/guildnet/merges
担当: 運営 — 同一人物候補の承認・統合・取り消し (unmerge)・誤マージの影響調査。
| ボタン | 何をするか | 危険度 | 押す前に |
|---|---|---|---|
| 同一人物として統合 | 2つの person を1つにまとめる | 準不可逆 | 取込の承認より先にやらない。 誤マージは他人の勤務先・戦績が見える事故になる。 |
| 別人として却下 | 候補を消す | 可逆 | — |
| 統合を取り消す (unmerge) | マージ前の記録 (provenance) を頼りに2人に分け直す | 準不可逆 | マージ後に生まれた行は機械には振り分けられないので、レビューキューに戻る。 |
| 影響を調べる | 誤って合成されたプロフィールを誰が見たかを洗い出す | 読取のみ | — |
マイページ (本人) /guild/me
担当: OB・OG / 現役部員 (本人のみ) — 本人が自分のデータを操作する唯一の常設面。公開範囲の変更・更新提案の承認/却下・会費の納付状況・通知の受信箱・自分史。
| ボタン | 何をするか | 危険度 | 押す前に |
|---|---|---|---|
| 招待リンクで紐づける | 招待 URL を貼ってアカウントと GUILD の記録を結びつける | 準不可逆 | claim 済みの招待リンクだけが使える。 未 claim のリンクを貼ると claim ページへ誘導される。1 アカウント = 1 person (既に紐づいた記録は奪えない)。 |
| 公開範囲を変更 (項目ごと) | 本人が同意した上限 (天井) を変える。同意ログに追記され、狭める操作は「撤回」として残る | 可逆 | 天井を広げても表示が広がらないことがある。 実際の見え方は min(団体の既定, 本人の設定, 天井)。団体の既定が狭い場合は画面に「団体の既定が上限」と出る — その先は団体管理者の操作 (/admin/guildnet/[団体]) が要る。勤務先は org_ob まで・連絡先は org_members までしか選べない (許可リストで固定)。 |
| 更新提案を承認 / 却下 | 仲間からの「転職したよ」提案を名簿に反映 / 破棄する | 準不可逆 | 承認すると検証レベル self_reported で名簿に載る (本人確認なので最も強い扱いにはしない)。勤務先は既存の現職を過去にしてから積むので履歴は消えない。提案者の氏名は本人にも表示しない (他人の PII を可視性エンジンの外に出さないため)。 |
| 会費の確認 | 請求額・期限・振込先案内・納付状況を見る | 読取のみ | この画面から決済はできない (Stripe Connect 未開通)。振込は団体の口座へ直接。入金の記録は団体側 (/admin/guildnet/fees) が行い、この画面に反映される。 |
| 既読にする / すべて既読 | 通知を既読にする | 可逆 | — |
団体間ボード /admin/guildnet/board
担当: 運営 / 団体 — 合同練習・合同イベント・交流・運営募集の掲示と返信。
| ボタン | 何をするか | 危険度 | 押す前に |
|---|---|---|---|
| 掲示する | 募集を出す | 可逆 | 本文に連絡先 (メール・電話) は書けない (拒否される)。 |
| 返信する | 掲載元に返信 (相手の管理者に通知) | 可逆 | — |
| 締切 / 再掲 | 募集を閉じる・戻す | 可逆 | — |
4. 禁止事項 (法務)
コードで機械的に防いでいるものが多いが、運用で破れるものもある。理由まで理解して運用する。
5. トラブルシューティング
招待した人が claim してくれない
URL の有効期限は 90 日。再発行できるが古い URL も生きたまま。claim 率は invites 画面で見える。なお「招待済み」の数字は取り込んだ人数であり、実際に URL を配った人数ではない。
招待 URL を紛失した
DB にはハッシュしか無いので復元できない。再発行する (古い URL も 90 日は有効なまま残る)。次回は発行直後に「全 URL をコピー」して TSV を保存すること。
GUILD の公開面に団体が出ない
3 つの条件を全部満たす必要がある: ① slug が設定されている ② 有効化されている (PLG なら claim 25人 / 既存団体は免除済み) ③ 稼働状態 (休眠・凍結だと出ない)。
公開ページに部員の名前が出ない
仕様。公開面に出るのは「部員52名 (公開12名)」の集計だけ。本人が全体公開を選んでも、団体の既定と同意の天井の min を取るため、既定が団体内のままなら出ない。出したい場合は団体編集画面で可視性の既定を変える。
会費の対象者が 0 人になる
OB の判定は「退部年があり、終了理由が卒業・引退」。CSV に退部年の列が無いと全員が現役扱いになる。取込後に renewal の「引退を記録する」で終了理由を付けるか、CSV を作り直す。
間違えて統合 (マージ) してしまった
merges 画面の「統合を取り消す (unmerge)」。マージ前の記録 (provenance) から2人に分け直す。マージ後に生まれた行はレビューキューに戻る。「影響を調べる」で誰が誤ったプロフィールを見たかを洗い出せる (漏えい評価)。
取込の承認をしたのに部員数が増えない
名寄せを承認より先にやった可能性が高い。統合された person に在籍を足すと幽霊行になる。unmerge して承認済み行を確認する。順序は「取込 → 承認 → 名寄せ」。
督促したのに OB から連絡が来ない
督促ボタンはメール登録済みの人には自動でメールを送る (best-effort)。まず「明細」でその人がメール未登録でないか確認する — 未登録なら送れないので手動でメール・郵送する。登録済みでも迷惑メール・アドレス変更で届かないことはあるので、その場合も手動で連絡する。督促の通知はアプリ内にも積まれ、本人が /guild/me の会費セクションで金額・期限・振込先を確認できる (サインインが必要)。
本人から「公開範囲を変えたい」と言われた
運営が代理で変更してはいけない (同意の天井は本人しか動かせない)。本人に /guild/me へサインインしてもらう。GUILD の記録と紐づいていない場合は、招待リンクを貼ってもらえば紐づく。招待リンクが失効していたら /admin/guildnet/invites で再発行する。
本人が「全体公開にしたのに名前が出ない」と言っている
実際の見え方は min(団体の既定, 本人の設定, 本人が同意した天井)。団体の既定が団体内のままなら本人がいくら開いても出ない。/guild/me の可視性表に「団体の既定が上限」と出ているはず。公開したい場合は団体編集画面 (/admin/guildnet/[団体]) で可視性の既定を広げる。
更新提案がいつまでも承認されない
提案は本人が承認するまで反映されない (これが適法性の要)。本人宛に通知が飛び、/guild/me の提案セクションに承認待ちとして出る。本人が反応しない場合のみ、運営が /admin/guildnet/invites で承認できる (検証レベルは peer_confirmed になる)。
1〜3月に年次ロールオーバーを押してしまった
当年度の再登録済み団体まで休眠に落ちている可能性がある。renewal の「副産物を自動判定」を回すと、管理操作のあった団体は稼働に戻る。ページ自体は消えていないので復旧可能。
企業から「申請が集中しています と出て申請できない」と連絡が来た
レート制限 (公開の書き込み口の防御) に掛かっている。企業申請は同一 IP から 1 時間に 5 回まで。同じ会社の複数人が同じ社内ネットワークから連投すると掛かりうる。時間をおけば自動で解除される (管理画面に解除ボタンは無い)。急ぎなら運営が admin の企業画面から代理で登録する。
管理画面に「試行回数が多すぎます」と出てログインできない
パスワード総当たり防御。同一 IP から 10 分に 8 回まで。10 分待てば自動で解除される。パスワードを忘れた場合は待っても解決しないので、Vercel の環境変数 ADMIN_PASSWORD を確認する。
レート制限を本番で確実に効かせたい (複数インスタンス)
Vercel はリクエスト毎に別インスタンスが立ちうるため、プロセス内カウンタだけでは取りこぼす。Vercel の環境変数に UPSTASH_REDIS_REST_URL と UPSTASH_REDIS_REST_TOKEN を設定すると、共有ストアで全インスタンスを跨いで数える。未設定でもプロセス内カウンタは常に動くので「無制限」にはならない。閾値の一覧は src/lib/rateLimit/policy.ts が唯一の真実源。
6. 用語集
| claim | 本人が招待 URL から自分の記録を引き取る操作。これをして初めて可視性を自分で選べる。適法性の中核。 |
| 金庫 (pii_vault) | 氏名・連絡先・勤務先の保管先。person ごとの鍵で暗号化されており、削除請求は鍵を破棄するだけで台帳・ドラフト・投影を横断して読めなくなる。 |
| 三層 ACL | 見える範囲 = min(団体の既定, 本人の設定, 本人が同意した天井)。管理者は本人の同意を超えて公開を広げられない。 |
| 台帳 (assertion) と投影 (projection) | 事実は追記のみ (上書きしない)。公開値は「検証レベルが高い順 → 信頼度 → 新しさ」で勝者を選んで投影する。 |
| 検証レベル | 自己申告 < 相互確認 < 出典あり < 団体確認 < 連盟公式。出典なしの記録は集計対象にならない。 |
| PLG (25人閾値) | 誰でも団体を開設できるが、claim 済み 25 人に達するまで公開しない。中身が空の GUILD ページを作らないための仕組み。 |
| 3ステート | 稼働 / 休眠 (再登録1回未完了) / 凍結 (2回連続未完了)。ページは絶対に消さない。 |
| 年度の定義 | 再登録・代替わりは 4月始まりの年度。会費プランは暦年。画面ごとに既定値が違うので年欄は必ず目視確認する。 |
| 協賛手数料 | 協賛市場と実契約が成立した段階で、実際の契約条件と一致する料金だけを公開する。現在の料金ページは非公開。 |
| 履行実績 | 完了した商談の数。次の協賛の成約率を上げる循環をつくる。 |
| レート制限 | ログイン不要で書き込める口 (企業申請・団体登録・claim・管理ログイン) を接続元ごとに数え、短時間の連投を弾く仕組み。判定に失敗したときは通さず弾く (fail-closed)。ただし配信停止と開封計測だけは例外で、壊れるより通す (法令・メール表示の都合)。接続元は生の IP ではなく復元不能なハッシュで数えるため、IP は保存されない。 |