Skip to content

chore(skills): 移除 OpenSpec 閉環技能(改採 superpowers 分期落地) - #189

Merged
monkey1sai merged 12 commits into
mainfrom
chore/remove-openspec-skills
Jun 9, 2026
Merged

monkey1sai merged 12 commits into
mainfrom
chore/remove-openspec-skills

Conversation

@monkey1sai

@monkey1sai monkey1sai commented Jun 9, 2026 •

Copy link
Copy Markdown
Owner

目的

依產品決策淘汰 OpenSpec 閉環 workflow 技能,改採 superpowers writing-plans / subagent-driven-development 分期落地路徑(見前端重構稽核報告建議)。

移除(git rm,16 個 SKILL.md 目錄)

  • .claude/skills/:apply-and-verify、archive-and-closeout、change-id-resolve、closed-loop-orchestrator、openspec-explore-twice、opsx-worktree-guard、opsx-worktree-provision、pr-review-gate
  • .windsurf/skills/openspec-*、.cursor/skills/openspec-*(其他 IDE 同套鏡像)

保留

  • gitnexus-blast-radius(GitNexus,非 openspec)、omniverse-*、generated/、gitnexus/
  • openspec/ 規格資料目錄(changes/specs)完整保留(那是資料、非技能)

注意(需後續決定,本 PR 不處理)

  • AGENTS.md / CLAUDE.md 仍引用 OpenSpec branch→PR→Actions→merge→archive 流程;若確定淘汰需另案更新文件。
  • 全域 npm openspec CLI 殘留 shim 與本機 .claude/commands/opsx(未追蹤)另於本機清理。

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Introduced Runtime Orchestrator four-view coordinator console with Dashboard, ATC Tower, Lifecycle Flow, and Terminal/Debug tabs for runtime status monitoring and governance.
  • Documentation

    • Added design specification and implementation plan for Runtime Orchestrator Phase 1, detailing coordinator console architecture and operational semantics.

monkey1sai and others added 9 commits June 8, 2026 14:50
移除本 repo 的 OpenSpec workflow 技能:
- .claude/skills/: apply-and-verify, archive-and-closeout, change-id-resolve,
  closed-loop-orchestrator, openspec-explore-twice, opsx-worktree-guard,
  opsx-worktree-provision, pr-review-gate
- .windsurf/skills/openspec-*、.cursor/skills/openspec-* 同套鏡像

保留 gitnexus-blast-radius(GitNexus,非 openspec)與 openspec/ 規格資料目錄。
改採 superpowers writing-plans / subagent-driven-development 分期落地路徑。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings June 9, 2026 05:41
@coderabbitai

coderabbitai Bot commented Jun 9, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

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

More reviews will be available in 11 minutes and 33 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

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.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: af1d45bf-a287-49e4-bcfc-171a4c6c73b9

📥 Commits

Reviewing files that changed from the base of the PR and between 5f6ac7e and 667e021.

📒 Files selected for processing (4)
  • AGENTS.md
  • CLAUDE.md
  • docs/agents/github-workflow.md
  • docs/agents/history-and-archive.md
📝 Walkthrough

Walkthrough

This PR contains two independent change streams: removal of legacy Claude skill orchestration documentation, and implementation of the Runtime Orchestrator Phase 1 coordinator console UI. Phase 1 introduces a read-only four-tab governance dashboard backed by evidence-driven runtime status derivation, new React tab component, styling, and comprehensive test coverage.

Changes

Skill Documentation Cleanup

Layer / File(s) Summary
Remove Claude orchestration skill documentation
.claude/skills/pr-review-gate/SKILL.md
Deletes the PR review gate workflow specification that defined CI/check gating, reviewer classification, and merge authority enforcement.

Runtime Orchestrator Phase 1 Coordinator Console

Layer / File(s) Summary
Design specification and Phase 1 implementation plan
docs/superpowers/specs/2026-06-08-runtime-orchestrator-four-view-coordinator-design.md, docs/superpowers/plans/2026-06-08-runtime-orchestrator-phase-1.md
Establishes the four-view coordinator console design (Classic Dashboard, ATC Tower, Lifecycle Flow, Terminal/Debug), core operational invariants requiring browser first-frame and stage-truth evidence for occupied/ready states, repository boundaries, phased MVP objectives, and detailed Phase 1 tasks including data model, React component, styling, and smoke test specifications.
Runtime governance data model and derivation logic
web-viewer-sample/src/console/coordinator/runtimeGovernance.ts
Defines HealthTone, EndpointRole, LeaseState, EvidenceState, and EndpointReadiness types; exports HealthLine, ClassicDashboardSummary, and EndpointRow interfaces; implements buildEndpointRows() to map configured kit endpoints to rows with binding-derived lease/readiness/evidence fields, and deriveClassicDashboard() to compute aggregated health sections from runtime observations.
Runtime governance unit tests
web-viewer-sample/src/console/coordinator/runtimeGovernance.test.ts
Validates data derivation across null runtime, waiting-for-first-frame readiness, yellow dashboard when first-frame evidence is missing, free endpoint rows for unassigned kit endpoints, released binding rules, and red health when endpoints are misconfigured.
Coordinator governance tabs React component
web-viewer-sample/src/console/coordinator/RuntimeGovernanceTabs.tsx
Implements CoordinatorGovernanceTabs component with four read-only Phase 1 tabs: Classic Dashboard (derived health metrics and technical details), ATC Tower (endpoint rows with evidence labels and disabled action buttons), Lifecycle Flow (state progression and evidence gates), and Terminal/Debug (service status and coordinator endpoint info).
CSS styling and coordinator page integration
web-viewer-sample/src/console/edge-console.css, web-viewer-sample/src/console/pages.tsx
Adds governance tab/action layout styles, status indicators with ok/warn/bad states, collapsible technical details, ATC table formatting, and evidence pill styling; updates CoordinatorPage to render CoordinatorGovernanceTabs in place of previous inline panels.
Console SSR and governance tab test coverage
web-viewer-sample/src/console/console.test.tsx
Expands coordinator SSR test with contract assertions for four-view markers and "no first-frame lying" wording; adds Phase 1 contract test excluding raw JSON/stack traces; adds governance tab test verifying stage-truth UI behavior, expected_stage_url presence, and absence of raw session identifiers.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • monkey1sai/AI-BIM-governance#36: Introduces the same Claude skill documentation (apply-and-verify, closed-loop-orchestrator, change-id-resolve, etc.) that this PR removes entirely.
  • monkey1sai/AI-BIM-governance#187: Modifies the same .claude/skills/*/SKILL.md skill documents (apply-and-verify, pr-review-gate, opsx-worktree-provision) with formatting changes that are superseded by their complete deletion in this PR.
  • monkey1sai/AI-BIM-governance#82: Updates .claude/skills/apply-and-verify/SKILL.md and worktree provisioning rules that are deleted by this PR's skill documentation cleanup.

Poem

🐰 From skill docs old to coordinator new,
We sweep away the workflow stack so true,
Four tabs now bloom with evidence so bright—
Dashboard, Tower, Flow, and Debug's light,
No first-frame lies in governance's sight! ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 5.26% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: removing OpenSpec closed-loop workflow skills in favor of a phased superpowers approach, which aligns with the substantial deletion of 16 skill definition files across .claude, .cursor, and .windsurf directories.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/remove-openspec-skills

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 and usage tips.

@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

PR Review Agent Summary

Field Value
Status blocked
Risk high
PR 189
Head chore/remove-openspec-skills / 5f6ac7e59f4b85b50c8c974b61e8f4f68cfd6faa
Base main / e3535563166749a651875dee9250ddac59cfd3bb

Blockers

  • [high] Behavior, workflow, code, or repo-boundary changes require an OpenSpec change id or documented exception.

Warnings

  • [medium] GitNexus detect changes did not pass: warning.

Validation Commands

  • npm run verify

Checks

  • passed web-viewer-sample verify (web-viewer-sample)

Human Review Notes

  • Optional AI adapter is not required by policy and was skipped.

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 removes 16 OpenSpec closed-loop workflow skill definitions across .claude/skills/, .windsurf/skills/, and .cursor/skills/, replacing the workflow approach with a "superpowers" strategy. In addition, it implements Phase 1 of a four-view Coordinator Console UI with read-only dashboard views and comprehensive design documentation.

Changes:

  • Removes all OpenSpec closed-loop skill SKILL.md files (apply-and-verify, archive-and-closeout, change-id-resolve, closed-loop-orchestrator, openspec-explore-twice, opsx-worktree-guard, opsx-worktree-provision, pr-review-gate, and their .windsurf/.cursor mirrors), retaining only gitnexus-blast-radius.
  • Adds a new four-tab Coordinator Console (RuntimeGovernanceTabs) with Classic Dashboard, ATC Tower, Lifecycle Flow, and Terminal/Debug views, powered by a pure-logic governance helper (runtimeGovernance.ts) and tested with both unit and SSR smoke tests.
  • Adds two design documents under docs/superpowers/ (a four-view design spec and a Phase 1 implementation plan) detailing the architecture, evidence contract, and phased rollout.

Note: The .gitignore still contains whitelist entries (lines 27–29, 31–35) for the removed .claude/skills/ directories. These stale entries should be cleaned up in a follow-up.

Reviewed changes

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

Show a summary per file
File Description
.claude/skills/apply-and-verify/SKILL.md Deleted – OpenSpec apply skill removed
.claude/skills/archive-and-closeout/SKILL.md Deleted – OpenSpec archive skill removed
.claude/skills/change-id-resolve/SKILL.md Deleted – OpenSpec change-id resolver removed
.claude/skills/closed-loop-orchestrator/SKILL.md Deleted – OpenSpec orchestrator removed
.claude/skills/openspec-explore-twice/SKILL.md Deleted – OpenSpec two-round explore removed
.claude/skills/opsx-worktree-guard/SKILL.md Deleted – OpenSpec worktree guard removed
.claude/skills/opsx-worktree-provision/SKILL.md Deleted – OpenSpec worktree provision removed
.claude/skills/pr-review-gate/SKILL.md Deleted – OpenSpec PR review gate removed
.windsurf/skills/openspec-*/SKILL.md (×4) Deleted – Windsurf IDE mirror stubs for OpenSpec skills
.cursor/skills/openspec-*/SKILL.md (×4) Deleted – Cursor IDE mirror stubs for OpenSpec skills
web-viewer-sample/src/console/coordinator/runtimeGovernance.ts New pure helper: derives dashboard health, ATC endpoint rows, and evidence state from RuntimeStatus
web-viewer-sample/src/console/coordinator/runtimeGovernance.test.ts New unit tests for the governance helper (null runtime, ready-without-frame, free endpoints, released binding, missing kit config)
web-viewer-sample/src/console/coordinator/RuntimeGovernanceTabs.tsx New React component: four-tab coordinator governance UI (Classic/ATC/Lifecycle/Debug)
web-viewer-sample/src/console/pages.tsx Replaces old three-panel coordinator view with CoordinatorGovernanceTabs; updates heading
web-viewer-sample/src/console/edge-console.css Adds CSS for tabs, status dots, governance indicators, ATC table, evidence pills, and details
web-viewer-sample/src/console/console.test.tsx Adds SSR smoke tests for four-tab contract, stage truth privacy, and no-raw-JSON checks
docs/superpowers/specs/2026-06-08-runtime-orchestrator-four-view-coordinator-design.md New design spec for the four-view coordinator console architecture
docs/superpowers/plans/2026-06-08-runtime-orchestrator-phase-1.md New Phase 1 implementation plan with task-by-task checklist

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

<Metric value={summary.kitRuntime.label} label={`Kit Runtime · ${summary.kitRuntime.detail}`} tone={metricTone(summary.kitRuntime.tone)} />
<Metric value={summary.endpointPool.value} label={summary.endpointPool.detail} />
<Metric value={summary.activeSessions.value} label={summary.activeSessions.detail} />
<Metric value={summary.viewerEvidence.value} label={summary.viewerEvidence.detail} tone="warn" />
Comment on lines +174 to +190
it("C/Hybrid Coordinator Console Phase 1 顯示四視角 contract,不在總覽放 raw JSON", () => {
const html = renderToString(<CoordinatorPage />);

expect(html).toContain("Classic Dashboard 是 operator 第一眼總覽");
expect(html).toContain("ATC Tower 是 endpoint / viewer lease 的航管塔");
expect(html).toContain("Lifecycle Flow 用來判斷為什麼還不能算 ready");
expect(html).toContain("Terminal / Debug 是工程證據頁");
expect(html).toContain("Kit-side evidence + Browser-side evidence");
expect(html).toContain("Kit Runtime");
expect(html).toContain("Endpoint Pool");
expect(html).toContain("Active Sessions");
expect(html).toContain("Viewer Evidence");
expect(html).toContain("Stage Truth");
expect(html).toContain("Recent Risk");
expect(html).not.toContain('"session_id"');
expect(html).not.toContain("stack trace");
});
# C / Hybrid Runtime Orchestrator 四視角 Coordinator 控制台 · Design Spec

> 日期:2026-06-08 · 狀態:設計草案,待使用者 review
> 對應目標:`https://bim-docs.jackshappybot.com/`「02 Coordinator 控制台」與本機 `C:/Repos/design/bim-desigin-arich/project`
Comment on lines +1 to +8
import { useMemo, useState } from "react";
import { Btn, Field, Metric, Panel } from "../components";
import type { RuntimeStatus } from "../coordinatorClient";
import { buildEndpointRows, deriveClassicDashboard, type EndpointRow, type HealthTone } from "./runtimeGovernance";

type CoordinatorTab = "classic" | "atc" | "lifecycle" | "debug";

export interface CoordinatorGovernanceTabsProps {
…ecute

- 衝突優先序移除 OpenSpec artifacts 層
- 開發流程改 superpowers writing-plans → subagent-driven-development → verification-before-completion;branch→PR→Actions→merge(去 OpenSpec sync/archive 儀式)
- sub-file 表移除 OpenSpec sync-archive / archive 標籤
- 保留架構「B 方案閉環」、本機 agent 產物規則、openspec/ 規格資料目錄

注意:docs/agents/github-workflow.md、history-and-archive.md 仍含舊 OpenSpec 流程細節,待後續整理。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 3

🧹 Nitpick comments (3)
web-viewer-sample/src/console/coordinator/runtimeGovernance.test.ts (1)

73-245: ⚡ Quick win

Consider adding test coverage for additional derivation code paths

The existing test suite provides solid coverage of the main scenarios outlined in the layer description. To ensure complete coverage of all code paths in deriveClassicDashboard and buildEndpointRows, consider adding test cases for:

  1. Failed endpoint scenario: An endpoint with readiness === "failed" should produce a red dashboard tone with "Runtime endpoint 失敗" messaging
  2. Waiting runtime scenario: An endpoint with readiness === "waiting_runtime" should produce a yellow dashboard with "等待 Kit runtime 啟動"
  3. Session without expected_stage_url: Should set stageTruth.value to "缺少 expected_stage_url" rather than "stage loaded 未觀測"

These scenarios are explicitly handled in the upstream derivation logic (runtimeGovernance.ts lines 207, 209, and 343-349) but are not currently exercised by the test suite.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web-viewer-sample/src/console/coordinator/runtimeGovernance.test.ts` around
lines 73 - 245, Add unit tests exercising deriveClassicDashboard and
buildEndpointRows for the three missing code paths: create a runtime with an
endpoint or kit binding that yields readiness === "failed" and assert
dashboard.overall.tone === "red" and dashboard.overall.label contains "Runtime
endpoint 失敗"; create a runtime with readiness === "waiting_runtime" and assert
dashboard.overall.tone === "yellow" and label contains "等待 Kit runtime 啟動";
create a session item missing expected_stage_url and assert
deriveClassicDashboard(...).stageTruth.value === "缺少 expected_stage_url"; use
the existing test helpers (makeRuntime) and assertions on deriveClassicDashboard
and buildEndpointRows to mirror patterns in the file.
web-viewer-sample/src/console/coordinator/RuntimeGovernanceTabs.tsx (1)

202-233: ⚡ Quick win

Add ARIA attributes to tab panels for screen reader accessibility.

The tab buttons (lines 209-219) correctly use role="tab" and aria-selected, but the corresponding tab panels (ClassicTab, AtcTab, LifecycleTab, DebugTab rendered at lines 227-230) are missing proper ARIA attributes.

Per WAI-ARIA Authoring Practices for Tabs, each tab panel should have:

  • role="tabpanel"
  • aria-labelledby pointing to its controlling tab button
  • Each tab button should have aria-controls pointing to its panel ID
♿ Proposed fix: add ARIA attributes
       {TABS.map((tab) => (
         <button
           key={tab.id}
           type="button"
           role="tab"
           aria-selected={active === tab.id}
+          aria-controls={`panel-${tab.id}`}
+          id={`tab-${tab.id}`}
           className={`ec-btn ${active === tab.id ? "primary" : ""}`}
           onClick={() => setActive(tab.id)}
         >
           {tab.label}
         </button>
       ))}
     </div>
     <p className="ec-note">
       Classic Dashboard 是 operator 第一眼總覽;ATC Tower 是 endpoint / viewer lease 的航管塔;Lifecycle Flow 用來判斷為什麼還不能算 ready;Terminal / Debug 是工程證據頁。
     </p>
     <p className="ec-note">
       Open primary URL 不等於 occupied;occupied 必須等 browser first-frame evidence;Kit-side evidence + Browser-side evidence 才能宣告可審查 ready。
     </p>
-    {active === "classic" && <ClassicTab {...props} go={setActive} />}
-    {active === "atc" && <AtcTab rt={props.rt} />}
-    {active === "lifecycle" && <LifecycleTab />}
-    {active === "debug" && <DebugTab rt={props.rt} />}
+    <div role="tabpanel" id="panel-classic" aria-labelledby="tab-classic" hidden={active !== "classic"}>
+      {active === "classic" && <ClassicTab {...props} go={setActive} />}
+    </div>
+    <div role="tabpanel" id="panel-atc" aria-labelledby="tab-atc" hidden={active !== "atc"}>
+      {active === "atc" && <AtcTab rt={props.rt} />}
+    </div>
+    <div role="tabpanel" id="panel-lifecycle" aria-labelledby="tab-lifecycle" hidden={active !== "lifecycle"}>
+      {active === "lifecycle" && <LifecycleTab />}
+    </div>
+    <div role="tabpanel" id="panel-debug" aria-labelledby="tab-debug" hidden={active !== "debug"}>
+      {active === "debug" && <DebugTab rt={props.rt} />}
+    </div>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web-viewer-sample/src/console/coordinator/RuntimeGovernanceTabs.tsx` around
lines 202 - 233, The tab panels rendered by CoordinatorGovernanceTabs
(ClassicTab, AtcTab, LifecycleTab, DebugTab) lack ARIA wiring: add unique IDs
for each panel and set aria-controls on each tab button (from TABS entries) to
point to those IDs, and ensure each panel component accepts/sets role="tabpanel"
and aria-labelledby that references its controlling tab button ID; update
CoordinatorGovernanceTabs to pass the panel ID (and optionally the tab button
ID) into ClassicTab/AtcTab/LifecycleTab/DebugTab so they can render
role="tabpanel" and aria-labelledby appropriately and make the buttons include
aria-controls and consistent id attributes.
web-viewer-sample/src/console/console.test.tsx (1)

239-245: 💤 Low value

Consider a more robust extraction for the Stage Truth overview section.

The regex /Stage Truth[\s\S]{0,160}/ captures a fixed 160-character window. If the "Stage Truth" overview section is longer than 160 characters, line 245's assertion that stageTruthOverview doesn't contain "example.test" might miss leakage occurring later in the overview but within the rendered section.

For a smoke test, this is probably acceptable if the overview is designed to be brief. However, a more semantic extraction—such as capturing content between specific HTML class markers or data attributes—would be more robust against layout changes.

💡 Optional: More robust extraction pattern

Consider adding a CSS class or data attribute to the overview section in the component, then extract based on that marker:

-const stageTruthOverview = html.match(/Stage Truth[\s\S]{0,160}/)?.[0] ?? "";
+// Option 1: Extract by semantic marker (requires component change to add class/attribute)
+const overviewMatch = html.match(/<div[^>]*class="[^"]*stage-truth-overview[^"]*"[^>]*>([\s\S]*?)<\/div>/);
+const stageTruthOverview = overviewMatch?.[1] ?? "";
+
+// Option 2: If keeping fixed-length, document the assumption
+// Assumes Stage Truth overview is <160 chars; increase if layout changes
+const stageTruthOverview = html.match(/Stage Truth[\s\S]{0,160}/)?.[0] ?? "";
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web-viewer-sample/src/console/console.test.tsx` around lines 239 - 245, The
current test uses a fixed-window regex stored in stageTruthOverview (`/Stage
Truth[\s\S]{0,160}/`) which can miss longer content; update the test to extract
the Stage Truth overview semantically—e.g., query the rendered DOM for the
component/element that contains the "Stage Truth" heading (use the
testing-library render result or querySelector for a specific CSS class or
data-testid on that overview element) and then assert that its textContent does
not include "example.test" instead of relying on the fixed 160-character regex;
ensure to add or reference a stable marker (class/data-testid) in the component
if needed and replace uses of stageTruthOverview and the regex accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/superpowers/plans/2026-06-08-runtime-orchestrator-phase-1.md`:
- Around line 267-274: The plan's template and the runtime implementation
disagree on the label for businessStatusFor("occupied"); decide which label
matches the spec and make them consistent: either update the plan text to use
"使用中" to match the implementation or update the businessStatusFor function to
return "可審查模型已就緒" for the "occupied" branch; locate the function
businessStatusFor and/or the plan template entry and change the string so both
the plan and the implementation match the authoritative spec.

In `@web-viewer-sample/src/console/coordinator/RuntimeGovernanceTabs.tsx`:
- Line 80: The Metric component is hardcoding tone="warn" for viewer evidence
even when summary.viewerEvidence.value indicates "no active viewer evidence" —
update the code so tone is conditional: either remove the hardcoded tone and
pass no tone when summary.viewerEvidence.value equals the no‑requirement string,
or (preferred) add a tone property to the ClassicDashboardSummary.viewerEvidence
in runtimeGovernance.ts (via deriveClassicDashboard) and then use
metricTone(summary.viewerEvidence.tone) when rendering Metric; reference Metric,
summary.viewerEvidence, deriveClassicDashboard, ClassicDashboardSummary,
runtimeGovernance.ts, and metricTone to locate and change the logic.

In `@web-viewer-sample/src/console/edge-console.css`:
- Around line 206-221: The hover rule currently applies to all .ec-tab elements,
causing selected tabs (.ec-tab[aria-selected="true"] and .ec-tab.active and
.ec-actions .ec-btn[aria-selected="true"]) to become green-on-green on pointer
hover; update the selector for the hover rule to exclude selected tabs (e.g.,
.ec-tab:not([aria-selected="true"]):hover and .ec-tab:not(.active):hover or
.ec-actions .ec-btn:not([aria-selected="true"]):hover) so hover styling only
applies to non-selected tabs and preserves the selected-state foreground.

---

Nitpick comments:
In `@web-viewer-sample/src/console/console.test.tsx`:
- Around line 239-245: The current test uses a fixed-window regex stored in
stageTruthOverview (`/Stage Truth[\s\S]{0,160}/`) which can miss longer content;
update the test to extract the Stage Truth overview semantically—e.g., query the
rendered DOM for the component/element that contains the "Stage Truth" heading
(use the testing-library render result or querySelector for a specific CSS class
or data-testid on that overview element) and then assert that its textContent
does not include "example.test" instead of relying on the fixed 160-character
regex; ensure to add or reference a stable marker (class/data-testid) in the
component if needed and replace uses of stageTruthOverview and the regex
accordingly.

In `@web-viewer-sample/src/console/coordinator/runtimeGovernance.test.ts`:
- Around line 73-245: Add unit tests exercising deriveClassicDashboard and
buildEndpointRows for the three missing code paths: create a runtime with an
endpoint or kit binding that yields readiness === "failed" and assert
dashboard.overall.tone === "red" and dashboard.overall.label contains "Runtime
endpoint 失敗"; create a runtime with readiness === "waiting_runtime" and assert
dashboard.overall.tone === "yellow" and label contains "等待 Kit runtime 啟動";
create a session item missing expected_stage_url and assert
deriveClassicDashboard(...).stageTruth.value === "缺少 expected_stage_url"; use
the existing test helpers (makeRuntime) and assertions on deriveClassicDashboard
and buildEndpointRows to mirror patterns in the file.

In `@web-viewer-sample/src/console/coordinator/RuntimeGovernanceTabs.tsx`:
- Around line 202-233: The tab panels rendered by CoordinatorGovernanceTabs
(ClassicTab, AtcTab, LifecycleTab, DebugTab) lack ARIA wiring: add unique IDs
for each panel and set aria-controls on each tab button (from TABS entries) to
point to those IDs, and ensure each panel component accepts/sets role="tabpanel"
and aria-labelledby that references its controlling tab button ID; update
CoordinatorGovernanceTabs to pass the panel ID (and optionally the tab button
ID) into ClassicTab/AtcTab/LifecycleTab/DebugTab so they can render
role="tabpanel" and aria-labelledby appropriately and make the buttons include
aria-controls and consistent id attributes.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: d7ca7a89-6fe3-45de-abec-92b8d861cd50

📥 Commits

Reviewing files that changed from the base of the PR and between e353556 and 5f6ac7e.

⛔ Files ignored due to path filters (1)
  • artifacts/e2e/coordinator-runtime-orchestrator-phase-1.png is excluded by !**/*.png
📒 Files selected for processing (24)
  • .claude/skills/apply-and-verify/SKILL.md
  • .claude/skills/archive-and-closeout/SKILL.md
  • .claude/skills/change-id-resolve/SKILL.md
  • .claude/skills/closed-loop-orchestrator/SKILL.md
  • .claude/skills/openspec-explore-twice/SKILL.md
  • .claude/skills/opsx-worktree-guard/SKILL.md
  • .claude/skills/opsx-worktree-provision/SKILL.md
  • .claude/skills/pr-review-gate/SKILL.md
  • .cursor/skills/openspec-apply-change/SKILL.md
  • .cursor/skills/openspec-archive-change/SKILL.md
  • .cursor/skills/openspec-explore/SKILL.md
  • .cursor/skills/openspec-propose/SKILL.md
  • .windsurf/skills/openspec-apply-change/SKILL.md
  • .windsurf/skills/openspec-archive-change/SKILL.md
  • .windsurf/skills/openspec-explore/SKILL.md
  • .windsurf/skills/openspec-propose/SKILL.md
  • docs/superpowers/plans/2026-06-08-runtime-orchestrator-phase-1.md
  • docs/superpowers/specs/2026-06-08-runtime-orchestrator-four-view-coordinator-design.md
  • web-viewer-sample/src/console/console.test.tsx
  • web-viewer-sample/src/console/coordinator/RuntimeGovernanceTabs.tsx
  • web-viewer-sample/src/console/coordinator/runtimeGovernance.test.ts
  • web-viewer-sample/src/console/coordinator/runtimeGovernance.ts
  • web-viewer-sample/src/console/edge-console.css
  • web-viewer-sample/src/console/pages.tsx
💤 Files with no reviewable changes (16)
  • .claude/skills/archive-and-closeout/SKILL.md
  • .cursor/skills/openspec-propose/SKILL.md
  • .cursor/skills/openspec-apply-change/SKILL.md
  • .claude/skills/openspec-explore-twice/SKILL.md
  • .cursor/skills/openspec-explore/SKILL.md
  • .windsurf/skills/openspec-propose/SKILL.md
  • .claude/skills/closed-loop-orchestrator/SKILL.md
  • .windsurf/skills/openspec-archive-change/SKILL.md
  • .claude/skills/pr-review-gate/SKILL.md
  • .windsurf/skills/openspec-explore/SKILL.md
  • .claude/skills/opsx-worktree-provision/SKILL.md
  • .claude/skills/change-id-resolve/SKILL.md
  • .claude/skills/opsx-worktree-guard/SKILL.md
  • .claude/skills/apply-and-verify/SKILL.md
  • .cursor/skills/openspec-archive-change/SKILL.md
  • .windsurf/skills/openspec-apply-change/SKILL.md

Comment on lines +267 to +274
function businessStatusFor(readiness: EndpointReadiness): string {
if (readiness === "free") return "可分配";
if (readiness === "waiting_runtime") return "等待 Runtime 回證";
if (readiness === "waiting_first_frame") return "等待第一幀畫面";
if (readiness === "occupied") return "可審查模型已就緒";
if (readiness === "releasable") return "可回收";
return "Runtime 無法連線";
}

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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Plan template diverges from actual implementation for "occupied" business status label.

The plan template at line 271 specifies businessStatusFor("occupied") should return "可審查模型已就緒", but the actual implementation in web-viewer-sample/src/console/coordinator/runtimeGovernance.ts line 90 returns "使用中".

This inconsistency could confuse developers executing this plan. Verify which label is correct and update either the plan template or the implementation to match the intended design from the spec document.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/superpowers/plans/2026-06-08-runtime-orchestrator-phase-1.md` around
lines 267 - 274, The plan's template and the runtime implementation disagree on
the label for businessStatusFor("occupied"); decide which label matches the spec
and make them consistent: either update the plan text to use "使用中" to match the
implementation or update the businessStatusFor function to return "可審查模型已就緒" for
the "occupied" branch; locate the function businessStatusFor and/or the plan
template entry and change the string so both the plan and the implementation
match the authoritative spec.

<Metric value={summary.kitRuntime.label} label={`Kit Runtime · ${summary.kitRuntime.detail}`} tone={metricTone(summary.kitRuntime.tone)} />
<Metric value={summary.endpointPool.value} label={summary.endpointPool.detail} />
<Metric value={summary.activeSessions.value} label={summary.activeSessions.detail} />
<Metric value={summary.viewerEvidence.value} label={summary.viewerEvidence.detail} tone="warn" />

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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Hardcoded tone="warn" is incorrect when viewer evidence is not required.

Line 80 unconditionally applies tone="warn" to the viewer evidence metric, even when viewerEvidence.value is "目前無 active viewer evidence 需求" (no active viewer evidence requirement). Based on the deriveClassicDashboard logic, this state is not a warning condition—it simply means there's no active session requiring evidence.

The tone should be conditional or the viewerEvidence field should include a tone property in the ClassicDashboardSummary type.

🎨 Proposed fix: make tone conditional or remove it

Option 1: Remove the tone when no evidence is required

-        <Metric value={summary.viewerEvidence.value} label={summary.viewerEvidence.detail} tone="warn" />
+        <Metric 
+          value={summary.viewerEvidence.value} 
+          label={summary.viewerEvidence.detail} 
+          tone={summary.viewerEvidence.value.includes("未取得") ? "warn" : undefined} 
+        />

Option 2: Add a tone field to viewerEvidence in ClassicDashboardSummary

In runtimeGovernance.ts, change the viewerEvidence derivation to include a tone field, then use metricTone(summary.viewerEvidence.tone) here.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<Metric value={summary.viewerEvidence.value} label={summary.viewerEvidence.detail} tone="warn" />
<Metric
value={summary.viewerEvidence.value}
label={summary.viewerEvidence.detail}
tone={summary.viewerEvidence.value.includes("未取得") ? "warn" : undefined}
/>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web-viewer-sample/src/console/coordinator/RuntimeGovernanceTabs.tsx` at line
80, The Metric component is hardcoding tone="warn" for viewer evidence even when
summary.viewerEvidence.value indicates "no active viewer evidence" — update the
code so tone is conditional: either remove the hardcoded tone and pass no tone
when summary.viewerEvidence.value equals the no‑requirement string, or
(preferred) add a tone property to the ClassicDashboardSummary.viewerEvidence in
runtimeGovernance.ts (via deriveClassicDashboard) and then use
metricTone(summary.viewerEvidence.tone) when rendering Metric; reference Metric,
summary.viewerEvidence, deriveClassicDashboard, ClassicDashboardSummary,
runtimeGovernance.ts, and metricTone to locate and change the logic.

Comment on lines +206 to +221
.ec-actions[role="tablist"] .ec-btn[aria-selected="true"],
.ec-tab[aria-selected="true"],
.ec-tab.active {
background:var(--ec-grn);
border-color:var(--ec-grn);
color:#0b0d10;
font-weight:600;
}
.ec-actions[role="tablist"] .ec-btn[aria-selected="false"],
.ec-tab[aria-selected="false"] {
color:var(--ec-fg-3);
}
.ec-tab:hover:not(:disabled) {
border-color:var(--ec-grn);
color:var(--ec-grn);
}

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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Keep selected tab labels legible on hover.

The hover rule overrides the selected-state foreground, so the active tab becomes green-on-green while the pointer is over it.

Suggested fix
 .ec-actions[role="tablist"] .ec-btn[aria-selected="true"],
 .ec-tab[aria-selected="true"],
 .ec-tab.active {
   background:var(--ec-grn);
   border-color:var(--ec-grn);
   color:`#0b0d10`;
   font-weight:600;
 }
+.ec-actions[role="tablist"] .ec-btn[aria-selected="true"]:hover:not(:disabled),
+.ec-tab[aria-selected="true"]:hover:not(:disabled),
+.ec-tab.active:hover:not(:disabled) {
+  color:`#0b0d10`;
+  border-color:var(--ec-grn);
+}
 .ec-actions[role="tablist"] .ec-btn[aria-selected="false"],
 .ec-tab[aria-selected="false"] {
   color:var(--ec-fg-3);
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web-viewer-sample/src/console/edge-console.css` around lines 206 - 221, The
hover rule currently applies to all .ec-tab elements, causing selected tabs
(.ec-tab[aria-selected="true"] and .ec-tab.active and .ec-actions
.ec-btn[aria-selected="true"]) to become green-on-green on pointer hover; update
the selector for the hover rule to exclude selected tabs (e.g.,
.ec-tab:not([aria-selected="true"]):hover and .ec-tab:not(.active):hover or
.ec-actions .ec-btn:not([aria-selected="true"]):hover) so hover styling only
applies to non-selected tabs and preserves the selected-state foreground.

@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: 40c60f68b9

ℹ️ 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".

Comment on lines +143 to +145
const bindingsByKitInstanceId = new Map<string, RuntimeKitBinding>(
rt.kit_instance_bindings.map((binding) => [binding.kit_instance_id, binding]),
);

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 Prefer current bindings over historical releases

When the same Kit endpoint has been reused, /api/runtime/status includes bindings from closed sessions as well as the active one, and SessionStore.list() returns newest sessions first; constructing the map this way lets later (older) entries overwrite earlier (newer) ones for the same kit_instance_id. In that scenario an old released binding can replace the current ready binding, so the ATC/dashboard reports the endpoint as free and hides the active session. Filter to active/non-released bindings or make the newest/current binding win.

Useful? React with 👍 / 👎.

@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

PR Review Agent Summary

Field Value
Status blocked
Risk high
PR 189
Head chore/remove-openspec-skills / 40c60f68b9ef4924dcc06ad24cd868baeb81255c
Base main / e3535563166749a651875dee9250ddac59cfd3bb

Blockers

  • [high] Behavior, workflow, code, or repo-boundary changes require an OpenSpec change id or documented exception.

Warnings

  • [medium] GitNexus detect changes did not pass: warning.

Validation Commands

  • npm run verify

Checks

  • passed web-viewer-sample verify (web-viewer-sample)

Human Review Notes

  • Optional AI adapter is not required by policy and was skipped.

monkey1sai and others added 2 commits June 9, 2026 14:23
固定主流程:設計/prototype → Superpowers 拆 plan → GitNexus impact → 實作
→ gstack UI/E2E/screenshot 驗收 → GitNexus detect_changes → PR。

單一職責:Superpowers=plan/execution governance(主線);GitNexus=impact/detect_changes;
gstack=browser QA/screenshot/E2E(user-facing 驗收唯一證據);Matt Pocock skills=僅 issue/triage/domain-doc 輔助。

禁:MattPocock 取代 Superpowers plan/Superpowers 宣告 UI 完成卻不跑 gstack/GitNexus 當產品設計依據/gstack 改 backend symbol 跳過 GitNexus impact。
誠實鐵律:無 backend 處 UI 標 DEMO DATA / NOT BUILT / not observed。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…d-archive)

- github-workflow.md 整檔重寫:標題改「GitHub Workflow(四套工具管線的 git 段)」;
  移除 /openspec new|apply、sync/archive、change-id 儀式;
  改框 Superpowers plan → GitNexus impact → 實作 → gstack 驗收 → detect_changes → PR;
  保留 main 衛生、PR merge 後 branch closeout、ship-item ship-cycle、Frontend/Deploy verification table。
- history-and-archive.md:退役服務歷史保留不動;OpenSpec archive 兩處加註「流程已退役,僅供歷史參考」。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

PR Review Agent Summary

Field Value
Status blocked
Risk high
PR 189
Head chore/remove-openspec-skills / fd1ae87403630faf5477d7fd87f38cf69aec8300
Base main / e3535563166749a651875dee9250ddac59cfd3bb

Blockers

  • [high] Behavior, workflow, code, or repo-boundary changes require an OpenSpec change id or documented exception.

Warnings

  • [medium] GitNexus detect changes did not pass: warning.

Validation Commands

  • npm run verify

Checks

  • passed web-viewer-sample verify (web-viewer-sample)

Human Review Notes

  • Optional AI adapter is not required by policy and was skipped.

@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

PR Review Agent Summary

Field Value
Status blocked
Risk high
PR 189
Head chore/remove-openspec-skills / 667e021f92a963de5b6d095cebeeafcbe57a77ac
Base main / e3535563166749a651875dee9250ddac59cfd3bb

Blockers

  • [high] Behavior, workflow, code, or repo-boundary changes require an OpenSpec change id or documented exception.

Warnings

  • [medium] GitNexus detect changes did not pass: warning.

Validation Commands

  • npm run verify

Checks

  • passed web-viewer-sample verify (web-viewer-sample)

Human Review Notes

  • Optional AI adapter is not required by policy and was skipped.

@monkey1sai
monkey1sai merged commit e1dcc0f into main Jun 9, 2026
1 of 2 checks passed
@monkey1sai
monkey1sai deleted the chore/remove-openspec-skills branch June 9, 2026 06:38

@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: 667e021f92

ℹ️ 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".

Comment on lines +139 to +145
<td>{row.endpointId}</td>
<td>{row.role}</td>
<td>{row.leaseState}</td>
<td>{row.businessStatus}</td>
<td>{evidenceLabel(row.firstFrame)}</td>
<td>{evidenceLabel(row.stageTruth)}</td>
<td>{row.nextAllowedAction}</td>

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 Render the active session id in ATC rows

When /api/runtime/status contains an active Kit binding, buildEndpointRows() preserves row.sessionId, but the new ATC table never renders it. Since this commit also removes the previous session table that showed session_id, operators can no longer correlate an occupied endpoint or pending first-frame state with the review session they need to inspect or close.

Useful? React with 👍 / 👎.

) : <p className="ec-note">目前無帶 callback_outbox_id 的 job。outbox 三態詳情(delivered/pending/dead_letter)需 internal-token 端點,瀏覽器不可達 → 此處僅顯示 coordinator 摘要可見的關聯,不捏造投遞數。</p>}
</Panel>
)}
<CoordinatorGovernanceTabs rt={rt} busy={busy} err={err} onRefresh={load} />

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 Preserve the callback outbox summary

For runtime statuses where ifc_ready_jobs.recent contains jobs with callback_outbox_id, replacing the old Coordinator panels with this tab component drops the only browser-visible callback outbox summary, even though the page still advertises callback outbox coverage and the direct internal outbox endpoint is not available to the browser. The new tabs do not read rt.ifc_ready_jobs, so users lose visibility into whether an IFC-ready job was associated with an outbound callback.

Useful? React with 👍 / 👎.

monkey1sai added a commit that referenced this pull request Jun 17, 2026
…I 同步指標 (#223)

* chore(git-hygiene): 移除誤入庫的 .env 機密並清理 .gitignore 殭屍白名單

對抗驗證盤點 agent harness 工具檔時發現:
- 根 .env 與 bim-review-coordinator/.env 一直是 tracked 狀態(含真實機密),
  並未被任何 .gitignore 規則排除。改以 git rm --cached 取消追蹤
  (檔案保留在磁碟,runtime 仍可讀),並補上 /.env 與
  /bim-review-coordinator/.env 排除規則;*.example 變體維持 tracked。
- 移除 8 條指向已退役 opsx/closed-loop skills(PR #189)的殭屍白名單行,
  保留現役 gitnexus-blast-radius。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs(spec-to-done): 補 canonical↔Codex copy 雙向同步指標 + Codex commit-guard/gstack 手動把關

對抗驗證指出雙 CLI 資產風險,補兩處(不破壞 Codex 刻意的模型映射):
- Claude 版 SKILL.md(canonical)原本沒指出 .codex copy 存在,編輯者易漏同步。
  補反向指標:改 phase/gate/HELD/resume/evidence/ship 語義時 MUST 同步
  .codex copy(該 copy 只配接 GPT 模型與路徑、不改 gate)。
- Codex 版 SKILL.md 補一條:commit-guard 與 gstack-evidence 是 Claude-only
  PreToolUse hook,Codex CLI 無 hook 機制不會自動觸發;P6 指揮官須手動履行
  等價把關(commit 前 verify/diff/scope;gh pr merge 前若動前端則需 24h 內
  artifacts/e2e/*.png gstack 證據,否則 HELD)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
monkey1sai added a commit that referenced this pull request Jul 1, 2026
AGENTS.md 變更觸發 Test-PrReviewNeedsOpenSpec,且本 repo 已於 #189 退役
OpenSpec、改用 docs/superpowers/specs/*.md 作為 behavior/workflow 變更的
formal spec evidence(Test-PrReviewHasFormalOpenSpecEvidence)。新增
2026-06-25-agent-rules-task-tier-worker-dispatch-design.md,如實記錄本
PR 新增的 task-tier/worker-dispatch/evidence-labels 規則設計,消除
missing_openspec high blocker。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
monkey1sai added a commit that referenced this pull request Jul 1, 2026
…oning contract 檔 (#267)

* docs(agents): agent rules 更新 — task-tier/worker dispatch 契約 + 補齊 reasoning contract 檔

- AGENTS.md / CLAUDE.md 新增「非平凡/高風險任務先做 task tier 判斷、worker dispatch、
  最終回覆分 verified facts / inferences / unverified risks」守則,sub-file 表新增
  advanced-agent-reasoning-contract 一列。
- 補入原 commit 指向但僅 untracked、未 commit 的
  docs/agents/advanced-agent-reasoning-contract.md,避免文件斷連結。
- 順帶更新 GitNexus banner(8299→17219 symbols;MCP 工具名 gitnexus_* → 新版
  impact/context/query/detect_changes)。

來源:本地 commit f6de50e(2026-06-25 update agent rules),rebase 到最新 origin/main 後開 PR。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UoNYrYHRZ2b6qPvfFWobq8

* chore(pr): retrigger pr-review-agent after body evidence table update

PR body 已補上 AI Coding Governance 表格 7 欄位(誠實反映純文件變更、
無 code symbol、無 CODEOWNERS 需求、無 frontend/deploy 影響),空 commit
用於觸發 pull_request:synchronize 重跑 pr-review-agent check。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* docs(agents): 補 formal spec 消 pr-review-agent missing_openspec blocker

AGENTS.md 變更觸發 Test-PrReviewNeedsOpenSpec,且本 repo 已於 #189 退役
OpenSpec、改用 docs/superpowers/specs/*.md 作為 behavior/workflow 變更的
formal spec evidence(Test-PrReviewHasFormalOpenSpecEvidence)。新增
2026-06-25-agent-rules-task-tier-worker-dispatch-design.md,如實記錄本
PR 新增的 task-tier/worker-dispatch/evidence-labels 規則設計,消除
missing_openspec high blocker。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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