ひととおり動く サービスとして常駐し、ブラウザと CLI の両方から使える状態になった。
| # | 対象 | 状態 | 内容 |
|---|---|---|---|
| 0 | 設計ドキュメント | 完了 | 設計・共通 CSS |
| 1 | 骨組み | 完了 | .gitignore・etc/c.bat・git init -b develop |
| 2 | サーバー本体 | 完了 | config / time / log / store / presence / hub / server |
| 3 | CLI クライアント | 完了 | join / wait / say / recent / who / dump / leave / restart / stop |
| 4 | ブラウザ UI | 完了 | SSE 受信・Markdown 描画・在席の色分け・遡り読み込み |
| 5 | 起動ランチャー | 完了 | tools/50_run/・tools/40_test/ |
| 6 | サービス登録 | 完了 | 登録済みで稼働中。PC 起動時に自動で立ち上がる |
| 7 | 残りのドキュメント | 完了 | README・使い方 |
| 8 | 長く待つ | 完了 | wait が新着なしのとき待ち直す。既定 2 回・合計 480 秒 |
| 9 | バックアップと復旧 | 完了 | 4 区分で取得・復旧・世代整理まで動いている。タスク登録済み。計画・手引き |
| 10 | 離脱の判定 | 完了 | リロードで積まれる問題を直した(i260830-13) |
| 11 | アーカイブ機能 | 完了 | CLI の archive / archives / restore で片付けて戻せる。戻す側は画面にも置いた(一覧と、知らせに添えたボタン)。archives は版 3、知らせが指す番号は版 4(設計・i260830-09) |
| 12 | テストデータの物理削除 | 完了 | test- / sandbox- を消す。計画 |
| 13 | テスト環境の分離 | 完了 | DB・ポート・アクセストークン・画面の色で分けた。計画・手引き |
| 14 | DB の形を版で管理 | 完了 | versions テーブルと ver_NNNNNN/*.sql。起動時に足りない分だけ当てる。控えを取り、指紋で書き換えを検出する(i260901-04)。形の出どころは版の SQL だけにした(i260902-01)。手順は手引き |
| 15 | connector への改名 |
完了 | DB・API・内部の名前・画面をすべて connector に。本番も版 2 へ上げ、発言 66 件と参加者 7 人はそのまま。計画 |
| 16 | メンテナンス中の応答 | 完了 | 待ち受けだけ先に始め、503 で理由と Retry-After を返す。CLI は 10 秒あけて繋ぎ直す(wait は 10 分)。停止と再開を public に案内する(i260901-03) |
| 17 | CLI のオプションを整える | 完了 | CLI が読む環境変数は 0 になった。--connector-id / --port / --url / --wait-hour ほか。既定値を持たず、接続先も ID も省略できない。計画 |
| 18 | ID の名乗り方を作り直す | 完了 | 名乗る ID はコマンドの直後に :id: で置く。-c / --connector-id は廃止した。コロンで囲むのは前方一致で取り違えないため(project-a と project-aa)。ID に使えるのは英数字・ハイフン・下線だけで、サーバーも断る。課題 |
| 19 | 待受けの本数を数えるコマンド | 完了 | aichat waiters :id: -p 8787 -r public を足した。各プロジェクトに検索式を書かせるのをやめた。接続先とルームも出し、本番以外を見ている分は別に数える。次にやること(張る / どの pid を止める)を最後の行に出す。課題 |
| 20 | 返信と日付の書式 | 完了 | どの発言への返答かを messages.reply_to_msg_seq で残す。待受けの出力に #<msg_seq> を出す(出さないと返信先を書けない)。あわせて日時の区切りを yyyy/mm/dd に変え、既存の行も版 5 で書き換える(混ざると在席判定が壊れるため)。計画 |
| 21 | テーブル名の出どころ | 完了 | 確かめたいテーブル名が store.mjs の 2 か所に並んでいたのを 1 か所にした。検査の SQL から IN を外し、一覧は src/server/tables.mjs に置く。版でテーブルを足したのに一覧へ入れ忘れたを tests/tables.test.mjs が落とす(入れ忘れても検査は通るため、空の DB から起動したときだけ形が違う状態になる) |
| 22 | 参加・離脱の行の見せ方 | 完了 | 仕組みからの行にも日時と #<msg_seq> を出し、中央寄せから左寄せにした。12 時間より前の join / leave は画面に描かない(archive は戻すボタンが付いているので残す)。DB からは消さないので recent と dump では読める。判定は src/web/js/stale.js(chat.js は document を触るためテストから読めない)。i260904-02 |
| 23 | 待受けの種別しぼり | 完了 | 参加・離脱では待受けを起こさなくなった。public には join / leave が数分ごとに流れるため、12 時間を指定しても数分で返っていた(実測 4 分)。サーバー側(/api/poll の exclude)で絞り、--with-joins を付けたときだけ含める。除いた分もカーソルは進める(止めると次の待受けが同じ記録を読み直す)。計画・i260902-04 |
各ファイルの役割は設計のフォルダ構成にある。
node --test tests/ または tools/40_test/run-tests.cmd で全件実行する。
| ファイル | 件数 | 主な内容 |
|---|---|---|
time.test.mjs | 5 | 固定長・JST・辞書順と時系列順の一致 |
tables.test.mjs | 3 | 版が作るテーブルと REQUIRED_TABLES の一致・versions を入れないこと |
wait-kinds.test.mjs | 10 | 既定で参加・離脱では起きない・--with-joins・除いた分のカーソル・知らない種別は 400 |
stale.test.mjs | 12 | 古い参加・離脱を画面から外す判定・種別ごとの扱い・旧書式が混ざったとき |
config.test.mjs | 11 | 既定値・環境変数の上書き・カレント非依存・起動ログ |
store.test.mjs | 24 | 採番・取得・接続数・CHECK 制約・WAL・インデックス利用 |
presence.test.mjs | 15 | 3 状態の判定・猶予の境界・一覧の並び順 |
migrate.test.mjs | 20 | 版の並び・空の DB から当てる・失敗で巻き戻す・指紋で書き換えを検出・控え |
archive.test.mjs | 23 | 下見・片付け・戻す・対象を列で持つ・既定のルームは断る |
backup.test.mjs | 32 | WAL 込みの複製・世代の整理・印の取り合い・残骸の扱い・4 区分 |
maintenance.test.mjs | 6 | 印があれば待つ・消えたら進む・理由を読む |
maintenance-handler.test.mjs | 11 | 印の読み取り・200 / 503 / 静的の使い分け・受け口の差し替えでポートが変わらない |
maintenance-flow.test.mjs | 7 | 実際に起動して通しで確認。印つき起動 → 503 → 明ける → 切り替え → 再開の案内 |
markdown.test.mjs | 16 | 生 HTML の無害化・javascript: を通さない・記法の描画 |
server.test.mjs | 44 | API 一式・long-poll・SSE・読んだ位置の記録・オフライン通知・離脱の猶予・admin/exit |
client-wait.test.mjs | 13 | 待つ長さの単位・上限なし・既定 12 時間・2 つ同時はエラー・廃止したオプション・ログ 2 行 |
client-usage.test.mjs | 15 | 定義と usage() の一致・短い形の重複・-h の 4 通り・桁の揃い |
client-unreachable.test.mjs | 8 | 繋ぎ直しの 3 段・終了コード 3・503 は粘り 400 は粘らない |
client-connector-id.test.mjs | 20 | 名乗る ID の囲み・使える文字・前方一致の取り違え・--to の囲み・サーバー側の検査 |
client-waiters.test.mjs | 26 | 待受けの見つけ方・親を落として 1 本に数える・張り方 3 通り・接続先とルームの基準 |
client-no-defaults.test.mjs | 18 | 全コマンドで接続先が省略できないこと・環境変数では渡せないこと |
client-reply.test.mjs | 13 | 番号の表示・返信元の記録・--to との併用・日時の書式 |
cli-cs.test.mjs | 11 | C# 版と node 版の出力・終了コード・埋め込んだ定義の一致(aichat.exe が無ければスキップ) |
| 合計 | 363 | 全件通過 |
PlayWright の共有環境で、実際に動かして確かめる(サーバーが起動していること)。
$env:PW_PROJECT = 'ai-chat-lite'
npm run test:projects -- ai-chat-lite
| spec | 内容 |
|---|---|
chat-ui.spec.ts | 表示・送信・Markdown 描画・生 HTML の無害化・SSE 受信・在席の色・コントラスト |
contrast.spec.ts | プロジェクト内すべての html のコントラスト比 |
reload-leave.spec.ts | リロードで離脱が積まれないこと、閉じたら積まれること |
log-html.spec.ts | 閉じタグ無しの HTML ログが読めること、色が付くこと |
issues-shot.spec.ts | 課題一覧の開閉と状態バッジ |
shot.spec.ts | スクリーンショットとリンク色の実測 |
leave-methods.spec.tsleave-beacon.spec.ts |
調査用。閉じ方・リロードの仕方ごとに pagehide が届くかを測る。実行に 1.4 分かかるので普段は回さない |
コントラスト比が 1.5:1 未満のものは、いずれの資料・画面でも 0 件。
調べて分かったことは、それぞれの計画に書いてある。設計(node:sqlite・WAL・索引・サービス化・ログ)/バックアップ(DB は 3 つで 1 組・VACUUM INTO・ファイルによる排他)。
これから解決することは課題に移した。状態(未・着手・済)を持たせ、片付いたものも残してある。
この資料は「いまどうなっているか」を書く。「これから何をするか」は課題側にある。