Skip to content

注文詳細(/orders/[id])のライフサイクルタイムライン+AI検収根拠表示 - #13

Merged
Mameta29 merged 3 commits into
mainfrom
dogfood/order-detail-timeline
Jun 14, 2026
Merged

Mameta29 merged 3 commits into
mainfrom
dogfood/order-detail-timeline

Conversation

@Mameta29

Copy link
Copy Markdown
Owner

Closes #12

概要

注文詳細画面 /orders/[id] をリッチ化しました。発注→PR→AI検収→着金→記帳の
ライフサイクルタイムライン、マージ→着金の所要秒数、AI検収の基準ごとの合否+根拠引用を
表示します。注文イベント取得 API も追加しています。

検収基準への対応

  • ライフサイクル(発注・PR・検収・着金・記帳)がタイムラインで表示されている
  • マージから着金までの所要秒数が表示されている
  • AI検収の各基準の合否と根拠が表示されている
  • 注文のイベントを取得する API エンドポイントが存在している(orders/{id}/events
  • 既存テストが通っている
  • CI が通過している

変更点

  • functions/orders-events.ts: orders/{id}/events(テナント分離・dedup記録除外)。
  • dashboard/lib/order-timeline.ts: イベント→タイムライン/所要秒数/検収サマリの変換。
  • dashboard/components/order-timeline.tsx: タイムライン+検収根拠の表示。
  • dashboard/app/orders/[id]/page.tsx: events 取得して描画。

Mameta29 added 2 commits June 14, 2026 17:23
webhook の同期実行は gpt-5.1 のレビュー(~35s)が host timeout で 504 になりうるため、
CI green 確認後にローカルから runReview を直接駆動するための運用スクリプト。
全パラメータは env 経由(機密のハードコードなし)。RUN_SETTLEMENT=1 で settlement+
bookkeeping も駆動できる。決勝まで dogfood ループを回すのに使用。
注文詳細画面 /orders/[id] をリッチ化:
- 発注→PR→AI検収→着金→記帳のライフサイクルタイムライン
- PR マージ→JPYC 着金の所要秒数(ピッチの『3秒』を画面で)
- AI 検収の各基準の合否+根拠引用(criteriaResults)の表示

- functions: orders/{id}/events エンドポイント追加(テナント分離・dedup記録は除外)
- dashboard: listOrderEvents + order-timeline ロジック + OrderTimeline コンポーネント
@Mameta29

Copy link
Copy Markdown
Owner Author

Review needs changes — Agentic Gig-Flow(formal review を投稿できないため comment として記録)

❌ Review needs changes — Agentic Gig-Flow

Quality score: 85/100
Reviewer: Azure OpenAI gpt-5.1 on Microsoft Foundry
PR: #13

検収基準の判定

# 基準 結果 証拠 / 不足
1 注文のライフサイクル(発注・PR・検収・着金・記帳)がタイムラインで表示されている packages/dashboard/components/order-timeline.tsx: const steps = buildTimeline(events); および const STEPS: { key: string; label: string; types: string[] }[] = [...]発注(Issue 起票), PR 提出, AI 検収, JPYC 着金, 記帳 の各ステップを定義し、steps.map((s) => (...) でタイムライン表示している。
2 マージから着金までの所要秒数が表示されている packages/dashboard/components/order-timeline.tsx: const latency = mergeToSettledSeconds(events); とし、{latency !== undefined && ( ブロック内で {latency.toFixed(1)} を表示している。packages/dashboard/lib/order-timeline.ts: `export function mergeToSettledSeconds(events: OrderEvent[]): number
3 AI検収の各基準の合否と根拠が表示されている packages/dashboard/lib/order-timeline.ts: export type CriterionResult = { criterion: string; met: boolean; evidence: string; }; および latestReviewcriteriaResults を抽出。packages/dashboard/components/order-timeline.tsx: {review.criteriaResults.map((c, i) => ( 内で {c.met ? '✅' : '❌'}c.criterionc.evidence を表示している。
4 注文のイベントを取得するAPIエンドポイントが存在している packages/functions/src/functions/orders-events.ts: app.http('ordersEvents', { methods: ['GET'], route: 'orders/{id}/events', ... handler, }); でイベント取得エンドポイントを定義し、const events = await cosmos.listEvents(orderId); から return { status: 200, jsonBody: { events: lifecycle } }; を返している。また packages/functions/src/index.ts: import './functions/orders-events.js'; で有効化。
5 ライフサイクル変換ロジックのユニットテストが追加されている diff 内に order-timeline.test.ts, *.spec.* など、packages/dashboard/lib/order-timeline.ts を対象としたテストファイルの追加・変更が見当たりません。ライフサイクル変換 (buildTimeline, mergeToSettledSeconds, latestReview) のユニットテストが未追加と思われます。
6 既存テストが通っている CI ステータスが pending であり、既存テストが通過したことを確認できません。
7 CI が通過している 入力 ciStatuspending のため、CI 通過を満たしていません。
8 テストが追加されている diff にテストファイル(*.test.*, *.spec.*, __tests__/, tests/ ディレクトリ等)の追加・変更が存在しません。新規テストの追加を確認できません。

修正してほしい項目

  1. ライフサイクル変換ロジックのユニットテストを追加してくださいpackages/dashboard/lib/order-timeline.ts 用に buildTimeline, mergeToSettledSeconds, latestReview の挙動を検証するテストファイルを追加し、主要なイベントパターン(全ステップ揃う場合 / 一部欠ける場合 / 時系列異常など)をカバーしてください。 — acceptance criteria 5 と 8 を満たすため。
  2. テストが通ることを確認し、CI をグリーンにしてください — すべてのテストがローカルで成功することを確認したうえで push し、GitHub Actions / CI が success になることを確認してください。 — acceptance criteria 6 と 7 を満たすため。

修正後に再 push してください。CI と本 Review Agent が再走します。

…feedback)

Review Agent (PR #13) が「ライフサイクル変換ロジックのユニットテストが追加されている」
基準の未達を指摘・差し戻したため、order-timeline のユニットテストを追加。
buildTimeline / mergeToSettledSeconds / latestReview の5ケースを検証。
@Mameta29

Copy link
Copy Markdown
Owner Author

Review passed — Agentic Gig-Flow(formal review を投稿できないため comment として記録)

✅ Review passed by Agentic Gig-Flow

Quality score: 92/100
Reviewer: Azure OpenAI gpt-5.1 on Microsoft Foundry
PR: #13

検収基準の判定

# 基準 結果 証拠 (diff より)
1 注文のライフサイクル(発注・PR・検収・着金・記帳)がタイムラインで表示されている packages/dashboard/components/order-timeline.tsx: const STEPS: { key: string; label: string; types: string[] }[] = [ 以下に 発注(Issue 起票), PR 提出, AI 検収, JPYC 着金, 記帳 のラベルを持つステップを定義し、buildTimeline(events) の結果を <ol> 内で steps.map((s) => ( ... {s.label} ... )) として表示している。さらに packages/dashboard/app/orders/[id]/page.tsxevents を取得し {events.length > 0 && <OrderTimeline events={events} />} で描画している。
2 マージから着金までの所要秒数が表示されている packages/dashboard/lib/order-timeline.ts: `export function mergeToSettledSeconds(events: OrderEvent[]): number
3 AI検収の各基準の合否と根拠が表示されている packages/dashboard/lib/order-timeline.ts: export type CriterionResult = { criterion: string; met: boolean; evidence: string; };export function latestReview(...)criteriaResults を抽出。packages/dashboard/components/order-timeline.tsx では const review = latestReview(events); の後 {review && ( ブロック内で review.criteriaResults.map((c, i) => ( により c.met ? '✅' : '❌' として合否を、{c.criterion}c.evidence<p ...>{c.evidence}</p> で表示している。
4 注文のイベントを取得するAPIエンドポイントが存在している packages/functions/src/functions/orders-events.ts: app.http('ordersEvents', { methods: ['GET'], route: 'orders/{id}/events', authLevel: 'anonymous', handler, }); として /api/orders/{id}/events 相当の HTTP 関数を定義し、const events = await cosmos.listEvents(orderId); から取得したイベントをフィルタして return { status: 200, jsonBody: { events: lifecycle } }; と返却している。また packages/dashboard/lib/api.tsexport async function listOrderEvents(orderId: string): Promise<{ events: OrderEvent[] }> が追加され、`authedFetch(
"/api/orders/${encodeURIComponent(orderId)}/events",

);でこのエンドポイントを呼び出している。 | | 5 | ライフサイクル変換ロジックのユニットテストが追加されている | ✅ |packages/dashboard/lib/order-timeline.test.ts: describe('order-timeline', () => { ... })内でbuildTimeline, mergeToSettledSeconds, latestReviewそれぞれに対してit('marks steps done when their event exists, pending otherwise', () => { ... });など複数のテストケースが追加されている。 | | 6 | 既存テストが通っている | ✅ | diff ではテスト結果は示されていないが、ciStatus が"success"として渡されており、既存テストに加え新規テストも通過している前提が満たされている。 | | 7 | CI が通過している | ✅ | 入力 JSON の"ciStatus":"success"より、CI が成功していることが確認できる。 | | 8 | テストが追加されている | ✅ |packages/dashboard/lib/order-timeline.test.ts という新規テストファイルが追加され、import { describe, it, expect } from 'vitest';とともに複数のit(...)` テストが定義されている。 |

コメント

ライフサイクルのステップ定義とイベント変換ロジックがコンパクトかつ読みやすくまとまっており、UI コンポーネント側も既存の Tailwind ベースのスタイルに自然に溶け込んでいます。latestReviewmergeToSettledSeconds についてもテストがきちんと用意されていて、今後の仕様変更にも追従しやすい構成になっていると思います。


このPRをマージすると、1000 JPYC@Mameta29 に Polygon 経由で自動送金されます (Settlement Agent → JPYC transfer())。

@Mameta29
Mameta29 merged commit e222f98 into main Jun 14, 2026
1 check passed
@Mameta29

Copy link
Copy Markdown
Owner Author

💴 JPYC 送金完了 — Settled by Agentic Gig-Flow

項目
金額 1,000 JPYC
受取アドレス 0x7F37…9389
Tx Hash 0x88151293320dd56e9d8c18ee8efa756857bd30d16f235a62dc6f45a39defe805
ブロック 40130012
所要時間 (merge → 着金) 約 8.4 秒
Order ID: 2173a926-6705-4e96-af6c-bbdd4b08d380

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.

注文詳細画面(/orders/[id])のライフサイクルタイムライン表示などのリッチ化

1 participant