pyoco-server 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. pyoco_server-0.4.0/.codex/skills/architecture-editor/SKILL.md +182 -0
  2. pyoco_server-0.4.0/.codex/skills/concept-editor/SKILL.md +170 -0
  3. pyoco_server-0.4.0/.codex/skills/concept-editor/references/sample-concept.md +69 -0
  4. pyoco_server-0.4.0/.codex/skills/plan-editor/SKILL.md +66 -0
  5. pyoco_server-0.4.0/.codex/skills/spec-editor/SKILL.md +161 -0
  6. pyoco_server-0.4.0/.gitignore +10 -0
  7. pyoco_server-0.4.0/.python-version +1 -0
  8. pyoco_server-0.4.0/AGENTS.md +58 -0
  9. pyoco_server-0.4.0/PKG-INFO +97 -0
  10. pyoco_server-0.4.0/README.md +82 -0
  11. pyoco_server-0.4.0/docs/OVERVIEW.md +78 -0
  12. pyoco_server-0.4.0/docs/architecture.md +390 -0
  13. pyoco_server-0.4.0/docs/archtecture.md +5 -0
  14. pyoco_server-0.4.0/docs/concept.md +102 -0
  15. pyoco_server-0.4.0/docs/config.md +115 -0
  16. pyoco_server-0.4.0/docs/library_api.md +153 -0
  17. pyoco_server-0.4.0/docs/plan.md +110 -0
  18. pyoco_server-0.4.0/docs/quickstart.md +171 -0
  19. pyoco_server-0.4.0/docs/spec.md +576 -0
  20. pyoco_server-0.4.0/docs/tutorial_multi_worker.md +269 -0
  21. pyoco_server-0.4.0/examples/hello_flow.py +28 -0
  22. pyoco_server-0.4.0/examples/run_worker.py +33 -0
  23. pyoco_server-0.4.0/examples/submit_run.py +33 -0
  24. pyoco_server-0.4.0/main.py +6 -0
  25. pyoco_server-0.4.0/pyproject.toml +31 -0
  26. pyoco_server-0.4.0/src/pyoco_server/__init__.py +15 -0
  27. pyoco_server-0.4.0/src/pyoco_server/_workflow_test_tasks.py +11 -0
  28. pyoco_server-0.4.0/src/pyoco_server/admin_cli.py +145 -0
  29. pyoco_server-0.4.0/src/pyoco_server/auth.py +198 -0
  30. pyoco_server-0.4.0/src/pyoco_server/client.py +111 -0
  31. pyoco_server-0.4.0/src/pyoco_server/config.py +149 -0
  32. pyoco_server-0.4.0/src/pyoco_server/dlq.py +35 -0
  33. pyoco_server-0.4.0/src/pyoco_server/http_api.py +631 -0
  34. pyoco_server-0.4.0/src/pyoco_server/http_client.py +90 -0
  35. pyoco_server-0.4.0/src/pyoco_server/logging_config.py +183 -0
  36. pyoco_server-0.4.0/src/pyoco_server/models.py +84 -0
  37. pyoco_server-0.4.0/src/pyoco_server/resources.py +67 -0
  38. pyoco_server-0.4.0/src/pyoco_server/trace.py +111 -0
  39. pyoco_server-0.4.0/src/pyoco_server/worker.py +496 -0
  40. pyoco_server-0.4.0/src/pyoco_server/workflow_yaml.py +133 -0
  41. pyoco_server-0.4.0/tests/test_auth.py +41 -0
  42. pyoco_server-0.4.0/tests/test_config_from_env.py +56 -0
  43. pyoco_server-0.4.0/tests/test_logging_config.py +80 -0
  44. pyoco_server-0.4.0/tests/test_nats_e2e.py +1492 -0
  45. pyoco_server-0.4.0/tests/test_snapshot_compaction.py +19 -0
  46. pyoco_server-0.4.0/tests/test_workflow_yaml.py +67 -0
  47. pyoco_server-0.4.0/uv.lock +610 -0
@@ -0,0 +1,182 @@
1
+ ---
2
+ name: architecture-editor
3
+ description: 「architecture.mdを作成/直す」「設計書を書く/修正」「アーキテクチャ設計をまとめる」などの依頼で使用。concept.mdを参照してソフトウェア設計を行い、必要観点を網羅したarchitecture.mdを日本語で作成・更新する。
4
+ ---
5
+
6
+ # Architecture Editor
7
+
8
+ ## 基本方針
9
+ - 出力は日本語で一般的な設計書トーンにする。
10
+ - concept.md を参照して整合性を担保する(用語・UC・機能・データ・レイヤー)。
11
+ - 読みやすさを優先し、一覧系は表形式を使う。
12
+ - 各章の切れ目に空行を1行入れる。
13
+ - CLIが不要な場合は「該当なし」と明記する。
14
+ - クラス/I/F/例外発生条件は具体化する(メソッド名・引数の型/意味・戻り/例外)。
15
+ - I/Fの入出力型・引数型は主要フィールドまで明記する(未記載にしない)。
16
+ - 引数の値・範囲・制約(例: 必須/任意、最小最大、文字種)を明記する。
17
+ - 例外は「発生場所」と「発生原因」がトレースできる情報を含める。
18
+ - UI/ユースケース層で、例外の最終ハンドリング(表示/ID付与)方針を定義する。
19
+ - spec.md がある場合は例外ID/MSG-IDの命名を必ず一致させる(specのERR-ID/MSG-IDを参照)。
20
+ ### 汎用観点(必ず満たす)
21
+ - 境界契約の完全性:依存先I/F(Repo/Store等)の最小契約を列挙する。
22
+ - データ契約の具体性:List/Array等の要素型を必ず明記する。
23
+ ### 出力の分離ルール
24
+ - 文書本文は単独で出力する(レビュー文は同じ出力に混ぜない)。
25
+ - レビュー提案は文書出力の後、別メッセージで行う。
26
+
27
+ ## 生成フロー(厳守)
28
+ - まず concept.md の有無を確認する。未提示なら concept.md 作成を推奨する。
29
+ - spec.md の有無を確認し、例外ID/MSG-IDの命名を合わせる。
30
+ - concept.md を読み、レイヤー構造・UC・データ・機能の整合を取る。
31
+ - 不足情報は提案案を示し、ユーザーの同意/修正を確認してから生成する。
32
+
33
+ ## 事前確認(提案して確認する)
34
+ - 対象スコープ(全体/機能別)
35
+ - 実行形態(Web/CLI/バッチ/サービス)
36
+ - 永続化の方針(DB/ファイル/外部サービス)
37
+ - 認証/認可の方針
38
+ - 運用前提(デプロイ頻度/更新方針)
39
+ - spec.md があるか(あればERR/MSGのID体系を踏襲する)
40
+
41
+ ## 出力形式
42
+ - `architecture.md` を1つ出力する。
43
+ - 出力は本文のみとし、前後に説明文を付けない。
44
+
45
+ ## architecture.md テンプレート(固定)
46
+ ```markdown
47
+ # architecture.md(必ず書く:最新版)
48
+ #1.アーキテクチャ概要(構成要素と責務)
49
+ #2.concept のレイヤー構造との対応表
50
+ (テキスト図示)
51
+ ```
52
+ [UI] -> [App] -> [DB/Storage]
53
+ ```
54
+ | conceptレイヤー | 対応コンポーネント | 主な責務 |
55
+ |---|---|---|
56
+ | | | |
57
+ #3.インターフェース設計(Interface)
58
+ ### UI/APP境界(ユースケース単位)
59
+ #### UC-1: <ユースケース名>
60
+ | 操作/API | 役割 | 入力(型/主要フィールド/値範囲) | 出力(型/主要フィールド) | 例外(発生条件) |
61
+ |---|---|---|---|---|
62
+ | | | | | |
63
+ ※例外は「発生場所/原因」が分かる形式で記載する。
64
+
65
+ ### 外部I/F(API単位)
66
+ #### API: <外部サービス名>
67
+ | メソッド | 役割 | 入力(型/主要フィールド/値範囲) | 出力(型/主要フィールド) | 例外(発生条件) |
68
+ |---|---|---|---|---|
69
+ | | | | | |
70
+
71
+ ### 内部I/F(クラス単位)
72
+ #### Class: <クラス名>
73
+ ##### Method: <メソッド名>
74
+ | 引数 | 型 | 意味 | 値範囲/制約 | 必須 |
75
+ |---|---|---|---|---|
76
+ | | | | | |
77
+
78
+ | 戻り値 | 型 | 主要フィールド |
79
+ |---|---|---|
80
+ | | | |
81
+
82
+ | 例外 | 発生場所 | 発生原因 |
83
+ |---|---|---|
84
+ | | | |
85
+
86
+ #### 依存先I/F(最小契約)
87
+ | 依存先 | 最小メソッド | 目的 |
88
+ |---|---|---|
89
+ | Repo/Store | save/find/update | 永続化 |
90
+
91
+ ### 型定義(入出力/DTOの主要フィールド)
92
+ | 型 | 主要フィールド(値範囲/制約) | 用途 |
93
+ |---|---|---|
94
+ | | | |
95
+ ※List/Arrayは要素型を必ず明記する(例: items: array<ExpenseSummary>)
96
+ #4.主要フロー設計(成功/失敗)
97
+ | フロー | 成功条件 | 失敗条件 | 例外時の動作 |
98
+ |---|---|---|---|
99
+ | | | | |
100
+ #5.データ設計(永続化・整合性・マイグレーション)
101
+ | データ | 永続化 | 整合性 | マイグレーション |
102
+ |---|---|---|---|
103
+ | | | | |
104
+ #6.設定:場所/キー/既定値
105
+ | 項目 | 場所 | キー | 既定値 |
106
+ |---|---|---|---|
107
+ | | | | |
108
+ #7.依存と拡張点(Extensibility)
109
+ | 依存 | 目的 | 拡張点 |
110
+ |---|---|---|
111
+ | | | |
112
+ #7.5.依存関係(DI)
113
+ (テキスト図示)
114
+ ```
115
+ <Class> -> <Interface>
116
+ ```
117
+ | クラス | コンストラクタDI(依存先) | 目的 |
118
+ |---|---|---|
119
+ | | | |
120
+ #8.エラーハンドリング設計(冪等性/リトライ/タイムアウト/部分失敗)
121
+ | 事象 | 発生場所 | 発生原因 | 方針 | 備考 |
122
+ |---|---|---|---|---|
123
+ | | | | | |
124
+ #9.セキュリティ設計(秘密情報・最小権限・ログ方針)
125
+ | 観点 | 方針 |
126
+ |---|---|
127
+ | | |
128
+ #10.観測性(ログ/診断:doctor/status/debug)
129
+ | 種別 | 内容 | 出力先 |
130
+ |---|---|---|
131
+ | | | |
132
+ ## 例外ハンドリング方針(UI/ユースケース層)
133
+ | UC | 例外 | 表示/通知 | エラーID/コード方針 | 関連spec ERR-ID |
134
+ |---|---|---|---|---|
135
+ | | | | | |
136
+ #11.テスト設計(単体/統合/E2E、モック方針)
137
+ | 種別 | 対象 | 方針 |
138
+ |---|---|---|
139
+ | | | |
140
+ #12.配布・実行形態(インストール/更新/互換性/破壊的変更)
141
+ #13.CLI:コマンド体系/引数/出力/exit code
142
+ ```
143
+
144
+ ## 整合性チェック
145
+ - concept.md のレイヤー/機能/UC/データと対応が取れているか確認する。
146
+ - 主要フローが concept.md のUCをカバーしているか確認する。
147
+ - エラーハンドリングが主要フローの失敗条件と矛盾しないか確認する。
148
+ - セキュリティ/観測性/テストが実行形態と矛盾しないか確認する。
149
+ - テキスト図示がレイヤー構造と矛盾しないか確認する。
150
+ - UI/APP境界I/FがUC単位で整理されているか確認する。
151
+ - 内部I/Fがクラス単位で整理され、メソッド単位の表になっているか確認する。
152
+ - 例外の発生条件がI/F・フロー・エラーハンドリングで整合しているか確認する。
153
+ - 依存関係(DI)がレイヤー構造と矛盾しないか確認する。
154
+ - 依存先I/Fの最小契約が列挙されているか確認する。
155
+ - List/Arrayの要素型が明記されているか確認する。
156
+ - 例外の発生場所/原因が追跡可能か確認する。
157
+ - UI/UC層の最終ハンドリング(表示/ID)が定義されているか確認する。
158
+ - spec.md がある場合、例外ID/MSG-IDが矛盾していないか確認する。
159
+
160
+ ## 出力後の提案(レビュー促進)
161
+ - 文書出力の次メッセージで、必ずレビュー提案を行う(下記テンプレートを使用)。
162
+
163
+ ### レビュー提案テンプレート(固定文)
164
+ 「SWEエージェント観点でarchitectureを評価します。評価としては100点満点でXX点くらいで、こういった点は改善した方がいいかもしれません、というレビューをしますか?」
165
+
166
+ ### レビュー出力フォーマット(固定)
167
+ - 評価: XX点 / 合格(または要改善)
168
+ - 良い点
169
+ - 箇条書き
170
+ - 改善した方が良い点
171
+ - 箇条書き
172
+ - 次のアクション
173
+ - 修正したい点があれば教えてください(修正します)
174
+
175
+ ### レビュー時のルール
176
+ - 100点満点で評価し、80点以上なら「合格」を明示する(例: 「評価: 85点 / 合格」)。
177
+ - 改善点は具体的に列挙し、修正希望があれば反映する。
178
+ ### 設計評価の観点(必ず触れる)
179
+ - ゴッドクラス/ゴッドI/Fになっていないか(責務肥大の有無)
180
+ - 単一責務(SRP)が守られているか
181
+ - 依存部品がコンストラクタDI可能か
182
+ - テスト可能性(モック差し替え・境界分離)
@@ -0,0 +1,170 @@
1
+ ---
2
+ name: concept-editor
3
+ description: 「concept.mdを作成」「conceptを作る/直す/修正」「concept文書を評価/レビュー」など、concept.mdの作成・更新・評価を行う。プロダクト概念・ユースケース・機能ブロック・主要データの整合性を担保しながら編集する固定11セクション形式。仕様書の概要やサービス企画の文書化依頼で使用。
4
+ ---
5
+
6
+ # Concept Editor
7
+
8
+ ## 基本方針
9
+ - 出力は日本語で一般的な仕様書トーンにする。
10
+ - 出力は concept.md 本文のみとし、前後の説明文を付けない。
11
+ - フォーマットは下記テンプレートに完全一致させる。
12
+ - 既存の concept.md がある場合は内容を活かしつつ、テンプレート順に整形する。
13
+ - 出力品質の基準が必要なときは `references/sample-concept.md` を読み、構成・粒度を合わせる。
14
+ - 読みやすさを優先し、一覧系は表形式で作成する(#5, #6, #8, #9)。
15
+ - 各章の切れ目に空行を1行入れる(詰め込みを避ける)。
16
+ ### 出力の分離ルール(矛盾回避)
17
+ - concept.md 本文は単独で出力する(レビュー文は同じ出力に混ぜない)。
18
+ - レビュー提案は concept.md 出力の後、別メッセージで行う。
19
+
20
+ ## 情報収集と仮説
21
+ - 不足情報は質問で補う。質問は重要度が高い順に最大5件までに抑える。
22
+ - 不足があっても推測できる場合は妥当な案を提示し、「この前提で良いか」を確認する。
23
+ - ユーザーが未認識の観点がありそうなら、仮説を提案して引き出す。
24
+ ### 生成フロー(厳守)
25
+ - まず「提案案(4観点)」を提示し、ユーザーの同意/修正を確認する。
26
+ - 同意後に concept.md を生成する。
27
+
28
+ ### 最小質問例
29
+ - 何を作るか(製品/サービスの一言要約)
30
+ - 誰のどんな困りごとを解決するか
31
+ - 主要なユースケース(2〜5件)
32
+ - 使われる場面や前提環境(端末/OS/ネットワーク/社内外など)
33
+ - 技術スタックの希望や制約
34
+
35
+ ### 生成前に提案して確認すべき観点(範囲の曖昧さを潰す)
36
+ - 役割と権限範囲(利用者/管理者/閲覧者などの操作範囲)
37
+ - データの保存方針(削除/退職者/履歴保持/監査の必要性)
38
+ - データの公開範囲(社内のみ/部署内/個人のみ)
39
+ - 例外時の扱い(操作不可の条件、競合・二重操作の扱い)
40
+ #### 必須運用
41
+ - 上記4観点は必ず「こちらの提案案」を先に示し、ユーザーの同意/修正を確認してから生成する。
42
+
43
+ ### 仮説の立て方(情報不足時)
44
+ - プラットフォーム未指定なら「Webアプリ(PC/スマホ両対応)」を仮定する。
45
+ - ターゲット未指定なら「業務担当者/管理者」を仮定する。
46
+ - 仮説は「前提(Assumptions)」に明記し、了承が得られるか確認する。
47
+
48
+ ## 出力テンプレート(厳守)
49
+ ```markdown
50
+ # concept.md(必ず書く:最新版)
51
+ #1.概要(Overview)(先頭固定)
52
+ - 作るもの(What):
53
+ - 解決すること(Why):
54
+ - できること(主要機能の要約):
55
+ - 使いどころ(When/Where):
56
+ - 成果物(Outputs):
57
+ - 前提(Assumptions):
58
+
59
+ #2.ユーザーの困りごと(Pain)
60
+
61
+ #3.ターゲットと前提環境(詳細)
62
+
63
+ #4.採用する技術スタック(採用理由つき)
64
+
65
+ #5.機能一覧(Features)
66
+ | ID | 機能 | 解決するPain | 対応UC |
67
+ |---|---|---|---|
68
+ | F-1 | | | UC-1 |
69
+
70
+ #6.ユースケース(Use Cases)
71
+ | ID | 主体 | 目的 | 前提 | 主要手順(最小操作) | 成功条件 | 例外/制約 |
72
+ |---|---|---|---|---|---|---|
73
+ | UC-1 | | | | | | |
74
+
75
+ #7.Goals(Goalのみ/ユースケース紐づけ必須)
76
+ - G-1: (対応:UC-1)
77
+
78
+ #8.基本レイヤー構造(Layering)
79
+ | レイヤー | 役割 | 主な処理/データ流れ |
80
+ |---|---|---|
81
+ | プレゼンテーション層 | | |
82
+
83
+ #9.主要データクラス(Key Data Classes / Entities)
84
+ | データクラス | 主要属性(不要属性なし) | 用途(対応UC/Feature) |
85
+ |---|---|---|
86
+ | | | |
87
+
88
+ #10.機能部品の実装順序(Implementation Order)
89
+
90
+ #11.用語集(Glossary)
91
+ ```
92
+
93
+ ## セクション別の作成ルール
94
+ - #1 は6項目すべて埋める。
95
+ - #4 は採用理由を必ず併記する(1行で良い)。
96
+ - #5 は表形式で F-1, F-2… と採番する。
97
+ - #6 は表形式で UC-1, UC-2… の形式で採番する。主要手順は最小操作で具体的に書く。
98
+ - #7 は G-1, G-2… の形式で採番し、各Goalに「対応:UC-?」を必ず付ける。
99
+ - #7 は Goal のみを書く(達成指標や実装詳細は書かない)。
100
+ - #10 は順序が分かるように番号付きで並べる。
101
+ - 追加セクションは作らない。
102
+
103
+ ## 最小性の判断ガイド(内容依存だが基準は固定)
104
+ ### 過剰機能を避ける
105
+ - 機能は「Painを解決するために必要な最小集合」に限定する。
106
+ - 各機能に「解決するPain / 対応UC」を必ず割り当てる。割り当てできない機能は削除候補。
107
+ - 反証テスト: その機能を削ってもPain/UCが成立するなら過剰機能とみなす。
108
+
109
+ ### 最小操作にする
110
+ - ユーザーの明示操作(入力/クリック/画面遷移)を最小化する。
111
+ - 同一情報の再入力は不可。既存データ/自動補完/推定で代替できるなら採用する。
112
+ - UCごとに「必須入力」と「自動化できる入力」を分け、後者は極力排除する。
113
+ - UCで必要な操作が多い場合、フローを短縮する代替案を必ず検討する。
114
+
115
+ ### 最小データにする
116
+ - データクラスは「UCを成立させるために必須の永続データ」に限定する。
117
+ - 各データクラスは「不要属性がない」ことを確認する(使われない/重複/推測可能な属性は削除候補)。
118
+ - 派生データは原則保存せず算出に寄せる(必要な場合のみ保存理由を明記)。
119
+ - 1つの概念は1つの正のソース(Single Source of Truth)に集約する。
120
+ - レイヤー/ブロックはUCに必要な最小データ流れのみを通す(冗長な中間層を作らない)。
121
+
122
+ ## 対応表チェック(整合性を担保する)
123
+ - Pain → UC → Features → Layering → Data Classes の順で「対応できること」を確認する。
124
+ - 逆方向にも検証する(Data Classes → Layering → Features → UC → Pain)。対応先がない要素は削除候補。
125
+ - 1つのPainは最低1つのUCで解決されること。
126
+ - 1つのUCは最低1つのFeatureで支えられること。
127
+ - FeatureはLayering上のブロック/層に必ず割り当てること。
128
+ - Data Classは必ずFeatureまたはUCに登場すること(未使用データは削除候補)。
129
+
130
+ ## 技術スタックの分岐指針(簡潔に)
131
+ - まず「希望する言語/フレームワーク」を確認する。
132
+ - 希望がない場合は、用途に合うメジャー技術を2〜3案提示して選んでもらう。
133
+ - 速度優先・少人数運用: マネージドサービス優先(例: フロントSPA + BaaS)。
134
+ - 高い拡張性・複雑要件: 標準的3層(Web/API/DB)で保守性を優先。
135
+ - リアルタイム要件: WebSocket/Push対応を明記する。
136
+ - オフライン/現場利用: ローカルキャッシュ/同期方式を明記する。
137
+ - 既存環境制約(言語/クラウド/DB)がある場合は最優先で採用する。
138
+ ### メジャー技術の提示例(希望がない場合)
139
+ - フロント: React + TypeScript / Vue + TypeScript
140
+ - バックエンド: Node.js(NestJS) / Python(FastAPI) / Java(Spring Boot)
141
+ - DB: PostgreSQL / MySQL
142
+ - インフラ: Docker + 主要クラウド(AWS/GCP/Azure)
143
+
144
+ ## 品質チェック
145
+ - 11セクションすべて存在するか確認する。
146
+ - #7 の対応UCが #6 に存在するか確認する。
147
+ - 前提・技術・ユースケースが矛盾していないか確認する。
148
+ - #2 の困りごとが #5 の最小機能で解決できているか確認する(過剰機能を避ける)。
149
+ - #6 のユースケースが最小操作で完結するか確認する(頻繁な入力要求や多操作を避ける)。
150
+ - #8 のレイヤー/ブロックが #6 のユースケースを実現する最小のデータ流れとして構造化されているか確認する。
151
+ - 対応表チェックの両方向(Pain→…→Data / Data→…→Pain)が成立するか確認する。
152
+ ### 出力後の提案(レビュー促進)
153
+ - 生成後に必ずレビュー提案を添える(下記テンプレートを使用)。
154
+ - レビュー提案は concept.md 出力の「次のメッセージ」で必ず送る。
155
+
156
+ #### レビュー提案テンプレート(固定文)
157
+ 「SWEエージェント観点でconceptを評価します。評価としては100点満点でXX点くらいで、こういった点は改善した方がいいかもしれません、というレビューをしますか?」
158
+
159
+ #### レビュー出力フォーマット(固定)
160
+ - 評価: XX点 / 合格(または要改善)
161
+ - 良い点
162
+ - 箇条書き
163
+ - 改善した方が良い点
164
+ - 箇条書き
165
+ - 次のアクション
166
+ - 修正したい点があれば教えてください(修正します)
167
+
168
+ #### レビュー時のルール
169
+ - 100点満点で評価し、80点以上なら「合格」を明示する(例:「評価: 85点 / 合格」)。
170
+ - 改善点は具体的に列挙し、修正希望があれば反映する。
@@ -0,0 +1,69 @@
1
+ # concept.md(必ず書く:最新版)
2
+ #1.概要(Overview)(先頭固定)
3
+ - 作るもの(What):社内備品の貸出・返却を簡単に管理できるWebアプリ
4
+ - 解決すること(Why):備品の所在不明や二重貸出、返却漏れをなくす
5
+ - できること(主要機能の要約):空き備品の確認、貸出登録、返却登録、備品登録
6
+ - 使いどころ(When/Where):社内からPC/スマホで備品を借りたいとき
7
+ - 成果物(Outputs):貸出中一覧、空き備品一覧、備品台帳
8
+ - 前提(Assumptions):社内利用、SSOでユーザー識別、ネットワーク常時接続
9
+
10
+ #2.ユーザーの困りごと(Pain)
11
+ - 備品の空き状況が分からず、探す時間がかかる
12
+ - いつ誰が借りたか把握できず、返却漏れが発生する
13
+ - 台帳が更新されず、現物と記録が一致しない
14
+
15
+ #3.ターゲットと前提環境(詳細)
16
+ - ターゲット:社内の一般社員(利用者)、総務/IT(管理者)
17
+ - 環境:社内ネットワーク、PC/スマホ対応、ブラウザ利用
18
+
19
+ #4.採用する技術スタック(採用理由つき)
20
+ - フロント:React + TypeScript(保守性と開発生産性が高い)
21
+ - バックエンド:Node.js(NestJS)(API設計が整理しやすい)
22
+ - DB:PostgreSQL(貸出履歴などのリレーション管理に強い)
23
+ - インフラ:Docker + AWS(社内運用と拡張性のバランス)
24
+
25
+ #5.機能一覧(Features)
26
+ | ID | 機能 | 解決するPain | 対応UC |
27
+ |---|---|---|---|
28
+ | F-1 | 備品一覧/空き状況表示 | 空き不明 | UC-1 |
29
+ | F-2 | 貸出登録 | 二重貸出 | UC-1 |
30
+ | F-3 | 返却登録 | 返却漏れ | UC-2 |
31
+ | F-4 | 備品登録/更新 | 台帳不一致 | UC-3 |
32
+
33
+ #6.ユースケース(Use Cases)
34
+ | ID | 主体 | 目的 | 前提 | 主要手順(最小操作) | 成功条件 | 例外/制約 |
35
+ |---|---|---|---|---|---|---|
36
+ | UC-1 | 利用者 | 空き備品を貸出する | SSOでログイン済み | 1) 一覧で空きを確認 2) 備品を選択 3) 貸出登録 | 貸出中一覧に反映される | 貸出中の備品は選択不可 |
37
+ | UC-2 | 利用者 | 備品を返却する | 貸出中の備品がある | 1) 自分の貸出一覧を開く 2) 返却登録 | 返却済みとして一覧から外れる | 返却済みの二重返却は不可 |
38
+ | UC-3 | 管理者 | 備品情報を最新化する | 管理者権限 | 1) 備品一覧を開く 2) 登録/更新 3) 保存 | 備品台帳に反映される | 必須項目が欠けると保存不可 |
39
+
40
+ #7.Goals(Goalのみ/ユースケース紐づけ必須)
41
+ - G-1: 備品の空き状況が即時に分かる(対応:UC-1)
42
+ - G-2: 返却漏れが減る(対応:UC-2)
43
+ - G-3: 備品台帳が最新化される(対応:UC-3)
44
+
45
+ #8.基本レイヤー構造(Layering)
46
+ | レイヤー | 役割 | 主な処理/データ流れ |
47
+ |---|---|---|
48
+ | プレゼンテーション層 | 入力/表示 | 備品一覧/貸出/返却/管理画面 |
49
+ | アプリ層 | 業務ロジック | 空き判定、貸出登録、返却登録、備品登録 |
50
+ | データ層 | 永続化 | 備品・貸出・ユーザー情報の読み書き |
51
+
52
+ #9.主要データクラス(Key Data Classes / Entities)
53
+ | データクラス | 主要属性(不要属性なし) | 用途(対応UC/Feature) |
54
+ |---|---|---|
55
+ | Equipment | id, name, category, is_active | UC-1/UC-3, F-1/F-4 |
56
+ | Loan | id, equipment_id, borrower_id, loaned_at, returned_at | UC-1/UC-2, F-2/F-3 |
57
+ | User | id, name, role | UC-1/UC-2/UC-3 |
58
+
59
+ #10.機能部品の実装順序(Implementation Order)
60
+ 1. Equipment/Loanのデータモデルと基本API
61
+ 2. 備品一覧と空き状況表示
62
+ 3. 貸出登録フロー
63
+ 4. 返却登録フロー
64
+ 5. 備品登録/更新(管理者)
65
+
66
+ #11.用語集(Glossary)
67
+ - 備品:社内で共有する物品(PC、プロジェクター等)
68
+ - 貸出:備品を一時的に利用者に紐づけること
69
+ - 返却:貸出状態を終了し備品を戻すこと
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: plan-editor
3
+ description: 「plan.mdを作成/直す」「実装計画を書く/更新」「開発計画(実装/テスト/文書化)を整理する」「planに追加して」「planをアーカイブにして」などの依頼で使用。機能実装・テスト・文書化の計画を日本語で plan.md に作成・更新する。
4
+ ---
5
+
6
+ # Plan Editor
7
+
8
+ ## 基本方針
9
+ - 出力は日本語で一般的な計画書トーンにする。
10
+ - 出力は plan.md 本文のみとし、前後の説明文を付けない。
11
+ - current / future / archive の3区分で管理する。
12
+ - 各章の切れ目に空行を1行入れる。
13
+
14
+ ## 生成フロー(厳守)
15
+ - 全体と機能が分かれているか確認する。
16
+ - 分かれている場合: 全体は future に置き、着手中の機能を current に置く。
17
+ - 全体のみの場合: 着手する部分を current に置く。
18
+ - 不足情報は提案案を示し、ユーザーの同意/修正を確認してから生成する。
19
+
20
+ ## current のルール
21
+ - チェックリスト形式で高い粒度で記載する(`- [ ]` / `- [x]`)。
22
+ - 「機能を実装 → 直後にテスト」を1セットにする。
23
+ - concept/spec/architecture の現状確認を最初に入れる。
24
+ - 文書化が必要なら最初に実施する(仕様書/設計書/運用文書の更新)。
25
+ - 実施中にうまく行かない場合は、デバッグメッセージ追加を含むデバッグ項目に組み替える。
26
+ - 機能部品から単体テストし、最終的にE2Eテストを行う。
27
+ - 最後に文書との整合性をテストする。
28
+ - 各項目は対象を具体化する(対象ファイル/機能/範囲を明記)。
29
+
30
+ ## future のルール
31
+ - 大雑把な将来計画を記載する(concept未実現機能など)。
32
+ - チェックのないリスト形式で記載する。
33
+
34
+ ## archive のルール
35
+ - 実施済みアイテムの記録。
36
+ - 「planをアーカイブにして」と言われたら current の完了項目を移動する。
37
+
38
+ ## plan.md テンプレート(固定)
39
+ ```markdown
40
+ # plan.md(必ず書く:最新版)
41
+
42
+ # current
43
+ - [ ] 例: concept/spec/architecture の現状を確認する
44
+ - [ ] 例: 仕様書/設計書に必要な変更点を反映する
45
+ - [ ] 例: xxxxにxxxxを実装する
46
+ - [ ] 例: xxxxのxxxxをテストする
47
+ - [ ] 例: xxxxにyyyyを実装する
48
+ - [ ] 例: xxxxのyyyyをテストする
49
+ - [ ] 例: xxxxの機能をE2Eテストする
50
+ - [ ] 例: 文書との整合性を確認する
51
+
52
+ # future
53
+ - 例: xxxx 機能
54
+ - 例: XXXをmmmしたい
55
+
56
+ # archive
57
+ - [x] 例: ccc
58
+ - [x] 例: dddd
59
+ ```
60
+
61
+ ## 整合性チェック
62
+ - current はチェックリスト形式になっているか確認する。
63
+ - 「実装→直後にテスト」の並びになっているか確認する。
64
+ - 単体→E2E→文書整合の順序が含まれているか確認する。
65
+ - future はチェックなしのリストになっているか確認する。
66
+ - archive は完了項目(`[x]`)のみか確認する。
@@ -0,0 +1,161 @@
1
+ ---
2
+ name: spec-editor
3
+ description: 「仕様書を作る/直す」「spec.mdを作成/修正」「仕様書(spec.md相当)を作って/直して」などの依頼で使用。concept.mdを参照して規模を判断し、全体または機能単位の仕様書を日本語で整合性を保って作成・更新する。
4
+ ---
5
+
6
+ # Spec Editor
7
+
8
+ ## 基本方針
9
+ - 出力は日本語で一般的な仕様書トーンにする。
10
+ - concept.md を参照して整合性を担保する(用語・UC・機能・データ)。
11
+ - 読みやすさを優先し、一覧系は表形式を使う。
12
+ - 各章の切れ目に空行を1行入れる。
13
+ - I/F詳細・API使用の詳細は書かない(要件レベルに留める)。
14
+ - 要件は「正常系(XXする/できる)」のみを書く。
15
+ - エラーは各要件の枝番仕様として整理し、ERR/MSGと必ず紐づける。
16
+ - 通信断/タイムアウト/バリデーション/権限/競合/重複/対象なし/ファイルアクセス失敗/DB記録失敗/長時間処理の多重起動等の典型エラーは可能な限り盛り込む。
17
+ ### 出力の分離ルール
18
+ - 仕様書本文は単独で出力する(レビュー文は同じ出力に混ぜない)。
19
+ - レビュー提案は仕様書出力の後、別メッセージで行う。
20
+
21
+ ## 生成フロー(厳守)
22
+ - まず concept.md の有無を確認する。未提示なら要約を依頼する。
23
+ - concept.md を読み、規模判定表で「全体仕様のみ」か「機能別仕様」に分ける。
24
+ - 不足情報は提案案を示し、ユーザーの同意/修正を確認してから生成する。
25
+
26
+ ## 規模判定(concept.mdから判断)
27
+ | 条件 | 出力 |
28
+ |---|---|
29
+ | UC ≤ 5 かつ Feature ≤ 8 かつ 主要ロール ≤ 3 | 全体仕様のみ(spec.md) |
30
+ | 上記のいずれかを超える | 全体仕様 + 機能別仕様 |
31
+
32
+ ### 例外
33
+ - ユーザーが明示的に指定した場合はそちらを優先する。
34
+
35
+ ## 事前確認(提案して確認する)
36
+ - 対象スコープ(全体/機能別の分割方針)
37
+ - 対象ユーザー/権限範囲(ロールごとの操作)
38
+ - データの保存方針(履歴保持・削除・監査)
39
+ - 公開範囲(社内/部署/個人)
40
+ - 例外/制約(競合・重複・不可条件)
41
+ - REQ-IDの命名ルール(プロジェクト名/機能短縮名のどちらを使うか)
42
+
43
+ ## 出力形式
44
+ - 全体仕様のみ: `spec.md` を1つ出力する。
45
+ - 機能別仕様: `spec.md`(全体) + `spec/feature-<id>.md` を出力する。
46
+ - 機能別仕様は `xxxx_spec.md`(機能名に応じたファイル名)でもよい。
47
+ - 複数ファイルの場合は、各ファイルを個別のコードブロックで示し、先頭にファイル名行を付ける。
48
+
49
+ ## spec.md テンプレート(全体仕様)
50
+ ```markdown
51
+ # <プロジェクト名>
52
+
53
+ 要件とは(レビュー者視点)+ Given/When/Done + MSG/ERR のID管理
54
+ ※I/F詳細・API使用は書かない
55
+
56
+ # 要件一覧(Requirements)
57
+ | ID | 要件(固定書式・正常系のみ) | 関連UC-ID |
58
+ |---|---|---|
59
+ | REQ-0001 | XXXをしたら、YYYYする。 | UC-1 |
60
+
61
+ ### [<プロジェクト名>-0001] XXXをしたら、YYYYする。
62
+ Given:前提状態
63
+ When:トリガ(ユーザー操作や内部イベント)
64
+ Done:完了条件(観測可能な結果)
65
+
66
+ #### エラー分岐(REQ-0001の枝番)
67
+ | ERR-ID | 発生条件 | ユーザーアクション | 関連MSG-ID |
68
+ |---|---|---|---|
69
+ | ERR-<プレフィックス>-0001 | | | MSG-<プレフィックス>-0001 |
70
+
71
+ (必要なら)短い例:
72
+ - 例:XXXをしたら、YYYYする。
73
+
74
+ ## メッセージID管理(MSG-xxxx)
75
+ | ID | 文面テンプレ | 出力先 | 発生条件 | 関連REQ/ERR |
76
+ |---|---|---|---|---|
77
+ | MSG-<プレフィックス>-0001 | | | | REQ-0001 |
78
+
79
+ ## エラーID管理(ERR-xxxx)
80
+ | ID | 原因 | 検出条件 | ユーザーアクション | 再試行可否 | 関連MSG-ID | 関連REQ |
81
+ |---|---|---|---|---|---|---|
82
+ | ERR-<プレフィックス>-0001 | | | | 可/不可 | MSG-<プレフィックス>-0001 | REQ-0001 |
83
+ ```
84
+
85
+ ## 機能別仕様テンプレート
86
+ ```markdown
87
+ # <機能名>
88
+
89
+ 要件とは(レビュー者視点)+ Given/When/Done + MSG/ERR のID管理
90
+ ※I/F詳細・API使用は書かない
91
+
92
+ # 要件一覧(Requirements)
93
+ | ID | 要件(固定書式・正常系のみ) | 関連UC-ID |
94
+ |---|---|---|
95
+ | REQ-0001 | XXXをしたら、YYYYする。 | UC-1 |
96
+
97
+ ### [<機能名>-0001] XXXをしたら、YYYYする。
98
+ Given:前提状態
99
+ When:トリガ(ユーザー操作や内部イベント)
100
+ Done:完了条件(観測可能な結果)
101
+
102
+ #### エラー分岐(REQ-0001の枝番)
103
+ | ERR-ID | 発生条件 | ユーザーアクション | 関連MSG-ID |
104
+ |---|---|---|---|
105
+ | ERR-<プレフィックス>-0001 | | | MSG-<プレフィックス>-0001 |
106
+
107
+ (必要なら)短い例:
108
+ - 例:XXXをしたら、YYYYする。
109
+
110
+ ## メッセージID管理(MSG-xxxx)
111
+ | ID | 文面テンプレ | 出力先 | 発生条件 | 関連REQ/ERR |
112
+ |---|---|---|---|---|
113
+ | MSG-<プレフィックス>-0001 | | | | REQ-0001 |
114
+
115
+ ## エラーID管理(ERR-xxxx)
116
+ | ID | 原因 | 検出条件 | ユーザーアクション | 再試行可否 | 関連MSG-ID | 関連REQ |
117
+ |---|---|---|---|---|---|---|
118
+ | ERR-<プレフィックス>-0001 | | | | 可/不可 | MSG-<プレフィックス>-0001 | REQ-0001 |
119
+ ```
120
+
121
+ ## 整合性チェック
122
+ - concept.md の UC/Feature と要件の関連UC-IDが一致するか確認する。
123
+ - 要件一覧の REQ-xxxx と詳細見出し(<プロジェクト名/機能名>-xxxx)の番号が一致するか確認する。
124
+ - 各要件に Given/When/Done が揃っているか確認する。
125
+ - 要件一覧は正常系のみで書かれているか確認する。
126
+ - 各要件のエラー分岐が ERR/MSG と紐づいているか確認する。
127
+ - MSG/ERR が REQ と紐づいているか確認する。
128
+ - I/F詳細・API使用の詳細が書かれていないか確認する。
129
+ - concept.md のユースケースが仕様書群(spec.md + 機能別仕様)で網羅されているか確認する。
130
+ - 単一の spec.md だけで網羅できない場合は、機能別仕様でのカバーを明記する。
131
+
132
+ ## 出力後の提案(レビュー促進)
133
+ - 仕様書出力の次メッセージで、必ずレビュー提案を行う(下記テンプレートを使用)。
134
+
135
+ ### レビュー提案テンプレート(固定文)
136
+ 「SWEエージェント観点でspecを評価します。評価としては100点満点でXX点くらいで、こういった点は改善した方がいいかもしれません、というレビューをしますか?」
137
+
138
+ ### レビュー出力フォーマット(固定)
139
+ - 評価: XX点 / 合格(または要改善)
140
+ - 良い点
141
+ - 箇条書き
142
+ - 改善した方が良い点
143
+ - 箇条書き
144
+ - 次のアクション
145
+ - 修正したい点があれば教えてください(修正します)
146
+
147
+ ### レビュー時のルール
148
+ - 100点満点で評価し、80点以上なら「合格」を明示する(例: 「評価: 85点 / 合格」)。
149
+ - 改善点は具体的に列挙し、修正希望があれば反映する。
150
+
151
+ ## REQ-ID ルール(必須)
152
+ - REQ-xxxx は4桁のゼロ埋め連番とする(例: REQ-0001)。
153
+ - 詳細見出しは `[<プレフィックス>-xxxx]` を使う。
154
+ - プレフィックスは「プロジェクト名」または「機能短縮名」のどちらでもよい。
155
+ - どちらを使うかは事前確認で決め、文書内で統一する。
156
+ - 採番単位はプロジェクト単位とし、複数spec間で重複しない。
157
+
158
+ ## MSG/ERR-ID ルール(必須)
159
+ - MSG/ERR は `MSG-<プレフィックス>-xxxx` / `ERR-<プレフィックス>-xxxx` とする。
160
+ - <プレフィックス> は REQ と同一の命名方針(プロジェクト名 or 機能短縮名)で統一する。
161
+ - 採番単位はプロジェクト単位とし、複数spec間で重複しない。
@@ -0,0 +1,10 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Virtual environments
10
+ .venv
@@ -0,0 +1 @@
1
+ 3.10