Skip to content

feat(openspec): gpu-session-baseline-and-idle-reclaim(自 deferred 傘型切出 T1) - #416

Merged
monkey1sai merged 3 commits into
mainfrom
feat/gpu-session-baseline-carveout
Jul 28, 2026
Merged

feat(openspec): gpu-session-baseline-and-idle-reclaim(自 deferred 傘型切出 T1)#416
monkey1sai merged 3 commits into
mainfrom
feat/gpu-session-baseline-carveout

Conversation

@monkey1sai

Copy link
Copy Markdown
Owner

目的

Step 2(使用者 2026-07-28 批准):自 add-single-gpu-session-ai-review-mvp(已標 Status: deferred,#415)切出 T1 六項成獨立小 change gpu-session-baseline-and-idle-reclaim,承接該傘型中真正無人認領、不依賴重物的兩條主線:

  1. gpu-session-baseline(New):量測 harness measure-session-baseline.ps1、環境指紋 schema、隔離 soak 記憶體斜率、本地實測 SLO 寫入部署文件(禁外部數字)、無基準報告 admission loader 硬 gate(母 change tasks 1.1–1.5 原文承接)。
  2. session-lifecycle(New,slim):僅「回收倒數與互動保活」第二回收路徑(母 change task 2.11;2026-07-22 使用者原話裁決「同意, 但是前端追加 session 進入倒數10秒顯示」)。改寫為疊加落在既有 coordinator session close 路徑,不依賴佇列/SessionBroker(「下一位獲派」明確排除,屬母 change)。

Requirement 名稱刻意沿用母版,thaw 時做 requirement/successor crosswalk;佇列/健康探針/202 冷啟動/IfcClash/LLM/BCF 3.0 等維持凍結於母 change(supersede 證據見其 Status 段)。

Change Classification

Field Value
Change lane G
Behavior contract changed no
Requirement source existing contract: add-single-gpu-session-ai-review-mvp deferred Status 段(#415)之 T1 承接規劃 + 2026-07-22 使用者對 2.11 的直接裁決 + 2026-07-28 使用者批准 Step 2

驗證

  • npx openspec validate gpu-session-baseline-and-idle-reclaim --strict → valid
  • 純 spec 提案(proposal/tasks/兩個 capability delta,4 檔 +109 行),零 production code 變更
  • git diff --check 乾淨

已知風險

  • docs(openspec): add-single-gpu-session-ai-review-mvp 標記 deferred #415(母 change deferred 標記)無檔案交集,兩 PR 可任意順序 merge;若本 PR 先進,母 change Status 段落後補齊即一致。
  • session-lifecycle capability 與 deferred 母 change 的同名 delta 並存屬預期(deferred 不構成 capability owner);archive 時依 crosswalk 調和,proposal 已明文。

🤖 Generated with Claude Code

https://claude.ai/code/session_01Bi4ujiFajBbd4nRhayJFxe

…erred 傘型切出 T1)

自 add-single-gpu-session-ai-review-mvp(deferred 2026-07-28)切出六項可完成切片:
量測 harness 1.1-1.5(gpu-session-baseline)+回收倒數 2.1(session-lifecycle slim,
2026-07-22 使用者裁決)。Requirement 名稱沿用母版利 thaw crosswalk;疊加式、不動凍結三檔。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bi4ujiFajBbd4nRhayJFxe
Copilot AI review requested due to automatic review settings July 28, 2026 02:58
@monkey1sai
monkey1sai enabled auto-merge (squash) July 28, 2026 02:58
@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@monkey1sai, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 30 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: f02003a1-6d92-4d2c-bfd2-2e5bfde3e189

📥 Commits

Reviewing files that changed from the base of the PR and between 8aaf248 and 18daa84.

📒 Files selected for processing (4)
  • openspec/changes/gpu-session-baseline-and-idle-reclaim/proposal.md
  • openspec/changes/gpu-session-baseline-and-idle-reclaim/specs/gpu-session-baseline/spec.md
  • openspec/changes/gpu-session-baseline-and-idle-reclaim/specs/session-lifecycle/spec.md
  • openspec/changes/gpu-session-baseline-and-idle-reclaim/tasks.md
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/gpu-session-baseline-carveout

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR carves a small, self-contained OpenSpec change (gpu-session-baseline-and-idle-reclaim) out of the deferred umbrella change add-single-gpu-session-ai-review-mvp (#415). It captures the two genuinely unclaimed, dependency-light workstreams from that umbrella's "T1" scope: (1) a GPU session baseline measurement harness with environment-fingerprint schema, isolated soak testing, locally-derived SLOs, and an admission hard-gate; and (2) a slim "idle reclaim countdown with interaction keep-alive" second-reclaim path that layers onto the existing coordinator session-close path without depending on queue/SessionBroker semantics. It is a documentation/spec-only change with zero production code, fitting into the repo's OpenSpec spec-driven development workflow under openspec/changes/.

Changes:

  • Adds proposal.md and tasks.md scoping the two carved-out workstreams (6 tasks: baseline harness 1.1–1.5 + idle-reclaim 2.1).
  • Adds a new gpu-session-baseline capability delta (3 requirements: fingerprinted baseline report, isolated soak memory-slope, numeric-SLO deployment doc + hard gate).
  • Adds a slim session-lifecycle capability delta (1 requirement: 10-second reclaim countdown with interaction cancellation), deliberately reusing the parent's requirement name to support the eventual thaw/crosswalk.

I verified the OpenSpec structure (English parser headers with Traditional Chinese body per openspec/AGENTS.md:31), confirmed each Requirement carries at least one Scenario, checked that the requirement names exactly match the parent change for crosswalk, confirmed the two capabilities have no existing canonical spec (so ## ADDED is correct), and verified all referenced artifacts exist (governance-service/bcf/bcf_writer.py, governance-service/diff_engine/keys.py, docs/verification/2026-06-05-host-gpu-runtime-reality-check.md, KitGpuFleetPage). Item and line counts are internally consistent (6 items; 109 lines). No concrete defects were found.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated no comments.

File Description
openspec/changes/gpu-session-baseline-and-idle-reclaim/proposal.md States Why/What Changes/Impact and documents the crosswalk relationship to the deferred parent change.
openspec/changes/gpu-session-baseline-and-idle-reclaim/tasks.md Six tasks carried over from parent T1 (baseline harness 1.1–1.5 + idle-reclaim 2.1).
openspec/changes/gpu-session-baseline-and-idle-reclaim/specs/gpu-session-baseline/spec.md New capability delta: 3 requirements with scenarios for baseline report, soak, and SLO gating.
openspec/changes/gpu-session-baseline-and-idle-reclaim/specs/session-lifecycle/spec.md New slim capability delta: reclaim-countdown requirement with 3 scenarios, decoupled from SessionBroker/queue.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 322be3f202

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@@ -0,0 +1,19 @@
## Why

自 `add-single-gpu-session-ai-review-mvp`(已於 2026-07-28 標 `Status: deferred`)切出的最小可完成切片。依 2026-07-28 read-only 盤點,該傘型 change 中真正無人認領、且不依賴 SessionBroker/IfcClash/LLM/BCF 3.0 等重物的獨有主線只有兩條:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Mark the predecessor deferred before opening this successor

At this commit, openspec/changes/add-single-gpu-session-ai-review-mvp/proposal.md still begins with ## Why, contains no canonical Status: deferred ... marker, and retains active deltas for both capabilities added here. Merging in this state therefore creates two active owners for gpu-session-baseline and session-lifecycle, so either change can be implemented or archived against conflicting requirements despite this line claiming the predecessor is deferred; defer the predecessor canonically and record the handoff before adding this successor.

AGENTS.md reference: openspec/AGENTS.md:L29-L29

Useful? React with 👍 / 👎.

Comment on lines +53 to +55
- **WHEN** GPU 型號/driver/Kit/fixture 任一變動
- **THEN** 既有 SLO SHALL 失效
- **AND** SHALL 要求重跑基準取得新指紋

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Fingerprint the measured streaming configuration

When k, resolution, codec, rendering quality, launch flags, or the application build changes while GPU/driver/Kit/fixture remain unchanged, this invalidation rule keeps the old SLO valid even though VRAM, TTFF, and safe concurrency can change substantially. Because the report explicitly measures 1 primary + k spectator and is later used for admission limits, the fingerprint must also bind the measured topology and load-affecting runtime/stream configuration; otherwise a report for one configuration can authorize a different, unsafe configuration.

Useful? React with 👍 / 👎.


### Requirement: 長連線 soak test SHALL 在隔離量測窗產出記憶體斜率報告且門檻只由本地實測決定

一條 warm primary 連線 SHALL 跑 ≥30 分鐘(目標 2 小時)soak 並產出記憶體斜率報告。洩漏 watchdog 門檻 SHALL 完全依本次本地實測結果訂定,SHALL NOT 引用未經本地驗證的任何外部系統數字(含任何 GB/日 之類外部洩漏率)。soak SHALL 於隔離 stack(獨立埠、獨立 governance)+獨佔量測窗執行,harness SHALL 內建最小 keepalive health probe 維持連線活性,量測期間 SHALL NOT 共用入口。soak 期間自然斷流 SHALL 記為 finding;連兩次同點斷流 SHALL 判定為環境污染需查因,單次 SHALL 視為量測窗雜訊不逕自作結。

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Soak the admitted spectator workload

For sessions admitted with spectators, soaking only one warm primary omits the spectator streams and their probe load, yet the resulting slope is used to set the leak watchdog and admission SLO for the full deployment. The predecessor's own OQ-5 identifies this exact gap, but this supposedly complete successor drops that unresolved condition; run the soak under the target 1 primary + k spectator topology or explicitly prevent the resulting threshold from governing spectator-enabled deployments.

Useful? React with 👍 / 👎.

Comment on lines +11 to +13
- **WHEN** session 仍有 readyState=4 peer 但連續 T_inactivity 秒無任何使用者互動,且 10 秒回收倒數內無任何互動
- **THEN** session SHALL 經既有 close 路徑 teardown
- **AND** SHALL 以 reason=inactivity 寫入 session ledger

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Reclaim the Kit runtime rather than only closing metadata

When the inactivity countdown reaches zero, the specified existing coordinator close path does not actually tear down the Kit/WebRTC runtime: bim-review-coordinator/src/app.ts:1904-1962 only releases logical leases/bindings and appends events, and tests/sessions.test.ts:541 explicitly locks in that sessions close separately from Kit release. Because this change excludes SessionBroker and lists no streaming-server runtime release work, an inactive session can become closed while its GPU process remains occupied, defeating the reclaim feature; the flow needs an owned Kit /endsession or equivalent runtime teardown with observed completion.

AGENTS.md reference: AGENTS.md:L75-L77

Useful? React with 👍 / 👎.


### Requirement: 基準量測腳本 SHALL 產出含環境指紋的結構化基準報告

執行 `measure-session-baseline.ps1` 時 SHALL 產出結構化基準報告,內容 SHALL 至少含:GPU 型號盤點(判定是否消費級 RTX、確認 MIG 不可用 → 鎖定軟體佇列路線)、1 primary + k spectator 下 VRAM 水位、time-to-first-frame(TTFF)、建立成功率。取樣 SHALL 使用 nvidia-smi(VRAM/利用率)+ WebRTC health probe + TTFF。報告 schema SHALL 含「環境指紋」必填欄位:GPU 型號、driver 版本、Kit 版本、量測 fixture 的 hash + 大小。

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Define repeated trials for TTFF and success rate

A harness can satisfy this requirement with a single establishment attempt because no trial count, observation window, timeout, success definition, or aggregation statistic is specified. That makes the reported establishment rate trivially 0% or 100% and turns one TTFF sample into the admission upper bound, so the downstream SLO can appear evidence-based while being statistically meaningless; require repeated attempts per measured topology and report the denominator plus an explicit percentile/distribution.

Useful? React with 👍 / 👎.

Comment on lines +47 to +49
- **WHEN** 尚無基準報告
- **THEN** admission 參數 SHALL NOT 上線
- **AND** admission 參數 loader SHALL 以硬 gate 拒絕未經量測的門檻

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Provide a measurement-only path through the hard gate

On a fresh deployment with no report, producing the report itself requires launching the isolated 1 primary + k spectator WebRTC workload with provisional topology parameters, but this scenario requires the admission loader to reject all unmeasured parameters before that workload can start. No measurement-only mode or bounded bootstrap exception is defined, so implementing the hard gate on the supported deployment/configuration path creates a first-run deadlock; allow an isolated non-production measurement mode that cannot serve normal admission, then enable the production loader only after it validates the generated report.

Useful? React with 👍 / 👎.


## 2. session-lifecycle(回收倒數與互動保活)

- [ ] 2.1(coordinator+web-viewer-sample)無互動軟門檻第二回收路徑(2026-07-22 使用者裁決):viewer 互動事件(輸入/DataChannel 指令)上報彙整、連續 T_inactivity 無互動觸發回收倒數、倒數 10 秒廣播至該 session 全部已連線 viewer、前端倒數 UI 顯示、任一互動取消並重置、歸零經既有 session close 路徑 teardown(reason=inactivity 入 session ledger);測試:忘關分頁回收、倒數中互動取消、活躍會議不因時長回收;前端倒數 UI 有 E2E 截圖/trace(「佇列中下一位獲派」不在本 change,屬母 change 佇列語意)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Add the required UI completion gates

This task introduces a user-facing countdown UI but only asks for an E2E screenshot/trace, so every checkbox can be closed without the mandatory two-resolution Windows Chromium pixel gate, semantic gate, pinned design reference, or route/button/API/runtime-ID and visible failure/retry evidence. Add those design-fidelity and operability checks to the task so this change cannot be declared complete while the countdown is visually incorrect or disconnected from the real session flow.

AGENTS.md reference: AGENTS.md:L44-L45

Useful? React with 👍 / 👎.

Comment on lines +35 to +37
### Requirement: SLO SHALL 以具體數值形式化寫入部署文件並綁定環境指紋

設定任何 session admission 參數時 SHALL 以基準報告為前提,SHALL 以具體數值指標形式化並寫入可稽核部署文件:session 建立成功率下限、TTFF 上限、探針逾時定義、並發上限、idle-timeout、洩漏門檻。SHALL NOT 使用「合理」「足夠」等模糊詞;無基準報告則 admission 參數 SHALL NOT 上線(硬 gate)。所有 SLO 數值 SHALL 綁定基準量測報告的環境指紋;指紋任一變動即令既有 SLO 失效須重跑基準。

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Specify the timeout consumed by this slim lifecycle

The baseline formalizes an idle-timeout, but this change explicitly excludes the predecessor's no-connected-peer idle path and the included countdown consumes a different value, T_inactivity. No report field, loader parameter, or mapping supplies a default for T_inactivity, so implementation either leaves the required default undefined or incorrectly aliases two semantically different thresholds; add the inactivity threshold to the measured configuration/deployment contract and remove or clearly separate the excluded idle timeout.

Useful? React with 👍 / 👎.

Comment on lines +19 to +21
### Requirement: 長連線 soak test SHALL 在隔離量測窗產出記憶體斜率報告且門檻只由本地實測決定

一條 warm primary 連線 SHALL 跑 ≥30 分鐘(目標 2 小時)soak 並產出記憶體斜率報告。洩漏 watchdog 門檻 SHALL 完全依本次本地實測結果訂定,SHALL NOT 引用未經本地驗證的任何外部系統數字(含任何 GB/日 之類外部洩漏率)。soak SHALL 於隔離 stack(獨立埠、獨立 governance)+獨佔量測窗執行,harness SHALL 內建最小 keepalive health probe 維持連線活性,量測期間 SHALL NOT 共用入口。soak 期間自然斷流 SHALL 記為 finding;連兩次同點斷流 SHALL 判定為環境污染需查因,單次 SHALL 視為量測窗雜訊不逕自作結。

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Separate host-memory and VRAM leak slopes

The soak requires a generic "memory slope" without identifying whether it is GPU VRAM or the Kit process's host working set/RSS, while the stated harness instrumentation only guarantees nvidia-smi. A Kit process can leak host memory with stable VRAM and still produce a compliant passing report, or two implementations can derive incompatible watchdog units; require both relevant series with units and sampling cadence, and state which slope each watchdog threshold governs.

Useful? React with 👍 / 👎.


### Requirement: session 回收倒數與互動保活 SHALL 作為第二回收路徑,前端顯示 10 秒倒數且互動即取消

session 連續 T_inactivity 秒無任何使用者互動(viewer 輸入事件/DataChannel 指令)但仍有 readyState=4 peer 連線時,session SHALL 進入回收倒數。進入回收倒數時,前端 SHALL 對該 session 所有已連線 viewer 顯示 10 秒倒數;倒數期間任一 peer 的任何互動 SHALL 取消本次回收並重置 inactivity 計時;倒數歸零 SHALL 經既有 coordinator session close 路徑 teardown 並以 reason=inactivity 寫入 session ledger。SHALL 維持無 max-hold hard cap:有持續互動的會議 SHALL NOT 因持有時長被強制回收。T_inactivity SHALL 可設定,預設值 SHALL 於 `gpu-session-baseline` 基準取得後訂定。本 Requirement SHALL 以疊加方式落在既有 coordinator session close 路徑,SHALL NOT 依賴佇列/SessionBroker 語意(該語意屬 deferred 母 change `add-single-gpu-session-ai-review-mvp`,其「佇列中下一位獲派」段不在本 capability 範圍)。

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Treat a viewer join as activity during countdown

If a viewer joins after the 10-second countdown broadcast, the parenthetical activity definition counts only input events and DataChannel commands, so the new viewer can miss the already-emitted countdown and have the session closed seconds later without a chance to react. A successful active viewer lease/join should cancel and reset the countdown, or the current countdown state and remaining time must be delivered atomically to late joiners before they are admitted.

Useful? React with 👍 / 👎.

@monkey1sai
monkey1sai merged commit fe385d1 into main Jul 28, 2026
15 checks passed
@monkey1sai
monkey1sai deleted the feat/gpu-session-baseline-carveout branch July 28, 2026 03:25

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 18daa8460c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

- [ ] 1.2 報告 schema 加「環境指紋」必填欄位(GPU 型號/driver 版/Kit 版/fixture hash+大小),缺欄位判不完整並拒絕被下游引用;於 `scripts/` 加最小驗證測試
- [ ] 1.3 實作 ≥30 分鐘(目標 2 小時)soak:隔離 stack(獨立埠+獨立 governance,沿用 branch E2E 隔離模式)+獨佔量測窗+內建 keepalive health probe;輸出記憶體斜率報告;自然斷流記 finding、連兩次同點才判污染
- [ ] 1.4 由 soak 報告訂洩漏 watchdog 門檻(只用本地實測、禁引用外部數字);將 session 建立成功率下限/TTFF 上限/探針逾時/並發上限/idle-timeout/洩漏門檻以具體數值寫入可稽核部署文件並綁定環境指紋(禁模糊詞)
- [ ] 1.5 撰寫「環境指紋變動即 SLO 失效須重跑基準」部署文件段落;驗證:無基準報告時 admission 參數 loader 拒絕上線(硬 gate 測試)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Wire measured limits into session admission

When the baseline report exists, this task only validates that an admission-parameter loader accepts it; it never requires the measured limit to be enforced by either session-creation path. I checked bim-review-coordinator/src/app.ts:1212-1224 and :2674-2685: both call the stateless allocateKitInstanceBindings, and kitPool.ts:18-30 neither reads a baseline nor checks existing active sessions. Because this change explicitly excludes SessionBroker, all listed tasks can be completed while concurrent sessions still receive the same GPU endpoint; require a task and acceptance test that wire the validated limits into both explicit and automatic session admission.

Useful? React with 👍 / 👎.


### Requirement: 基準量測腳本 SHALL 產出含環境指紋的結構化基準報告

執行 `measure-session-baseline.ps1` 時 SHALL 產出結構化基準報告,內容 SHALL 至少含:GPU 型號盤點(判定是否消費級 RTX、確認 MIG 不可用 → 鎖定軟體佇列路線)、1 primary + k spectator 下 VRAM 水位、time-to-first-frame(TTFF)、建立成功率。取樣 SHALL 使用 nvidia-smi(VRAM/利用率)+ WebRTC health probe + TTFF。報告 schema SHALL 含「環境指紋」必填欄位:GPU 型號、driver 版本、Kit 版本、量測 fixture 的 hash + 大小。

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Bind admission SLOs to a production workload envelope

When a production session loads a model materially heavier than the single benchmark fixture, the GPU/driver/Kit and benchmark-fixture fingerprint remain unchanged, so the SLO is still considered valid even though VRAM and TTFF can exceed the measured values. Recording an exact fixture hash and file size only identifies the sample; it does not define which production models the result safely covers, and file size alone is not a bound on rendered geometry or texture demand. Define measurable workload tiers or a maximum admissible model envelope and make admission fail closed outside the measured envelope.

Useful? React with 👍 / 👎.


### Requirement: session 回收倒數與互動保活 SHALL 作為第二回收路徑,前端顯示 10 秒倒數且互動即取消

session 連續 T_inactivity 秒無任何使用者互動(viewer 輸入事件/DataChannel 指令)但仍有 readyState=4 peer 連線時,session SHALL 進入回收倒數。進入回收倒數時,前端 SHALL 對該 session 所有已連線 viewer 顯示 10 秒倒數;倒數期間任一 peer 的任何互動 SHALL 取消本次回收並重置 inactivity 計時;倒數歸零 SHALL 經既有 coordinator session close 路徑 teardown 並以 reason=inactivity 寫入 session ledger。SHALL 維持無 max-hold hard cap:有持續互動的會議 SHALL NOT 因持有時長被強制回收。T_inactivity SHALL 可設定,預設值 SHALL 於 `gpu-session-baseline` 基準取得後訂定。本 Requirement SHALL 以疊加方式落在既有 coordinator session close 路徑,SHALL NOT 依賴佇列/SessionBroker 語意(該語意屬 deferred 母 change `add-single-gpu-session-ai-review-mvp`,其「佇列中下一位獲派」段不在本 capability 範圍)。

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Add readiness telemetry for the lifecycle predicate

When a primary disconnects or only spectators remain, the coordinator has no specified way to evaluate the required readyState=4 predicate: current readiness is browser-local, app.ts:330-334 accepts only first-frame/stage/DataChannel fields on lease heartbeats, Window.tsx:1896-1905 currently sends no readiness data, and spectator mode bypasses the primary lease path. Because this change explicitly excludes the health probe and only tasks interaction-event reporting, an implementation must either assume every stored session still has a live peer or ignore this condition, causing countdowns to run for disconnected sessions or never run for connected spectators. Add expiring per-peer readiness telemetry—including spectators—and acceptance tests before using this predicate.

AGENTS.md reference: AGENTS.md:L75-L80

Useful? React with 👍 / 👎.


### Requirement: SLO SHALL 以具體數值形式化寫入部署文件並綁定環境指紋

設定任何 session admission 參數時 SHALL 以基準報告為前提,SHALL 以具體數值指標形式化並寫入可稽核部署文件:session 建立成功率下限、TTFF 上限、探針逾時定義、並發上限、idle-timeout、洩漏門檻。SHALL NOT 使用「合理」「足夠」等模糊詞;無基準報告則 admission 參數 SHALL NOT 上線(硬 gate)。所有 SLO 數值 SHALL 綁定基準量測報告的環境指紋;指紋任一變動即令既有 SLO 失效須重跑基準。

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Split primary and spectator admission limits

When the measured topology is 1 primary + k spectator, a single 並發上限 value cannot safely represent both GPU-backed session concurrency and per-session spectator capacity. If the loader interprets k + 1 as the session limit, it may admit multiple primary sessions onto the single GPU; if it interprets the value as 1, it cannot admit the spectator workload that was measured. Define separate primary-session and spectator-per-session limits, preserve the measured topology in the schema, and test each admission dimension independently.

Useful? React with 👍 / 👎.


### Requirement: SLO SHALL 以具體數值形式化寫入部署文件並綁定環境指紋

設定任何 session admission 參數時 SHALL 以基準報告為前提,SHALL 以具體數值指標形式化並寫入可稽核部署文件:session 建立成功率下限、TTFF 上限、探針逾時定義、並發上限、idle-timeout、洩漏門檻。SHALL NOT 使用「合理」「足夠」等模糊詞;無基準報告則 admission 參數 SHALL NOT 上線(硬 gate)。所有 SLO 數值 SHALL 綁定基準量測報告的環境指紋;指紋任一變動即令既有 SLO 失效須重跑基準。

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Define independent acceptance targets for the baseline

When the measured runtime is already unusable—for example, a very low establishment rate or extremely high TTFF—this requirement still permits those observations to become the success-rate lower bound and TTFF upper bound, so the hard gate accepts any hardware simply because it was measured. Repeated trials alone do not solve this tautology; define an independent product acceptance target or require the harness to reduce the admitted topology until predefined targets are met, and mark the deployment unsupported when no topology passes.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants