rodo-spec 0.0.0-stage → 2.2.1
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.
- package/LICENSE +21 -0
- package/README.md +285 -2
- package/dist/index.js +14857 -0
- package/dist/kit/.agents/skills/rodo/SKILL.md +168 -0
- package/dist/kit/.agents/skills/rodo/coder.md +82 -0
- package/dist/kit/.agents/skills/rodo/onboarding.md +28 -0
- package/dist/kit/.agents/skills/rodo/planner.md +95 -0
- package/dist/kit/.agents/skills/rodo/small-change.md +44 -0
- package/dist/kit/.agents/skills/rodo/templates/acceptance.feature +18 -0
- package/dist/kit/.agents/skills/rodo/templates/card.rodo.md +33 -0
- package/dist/kit/.agents/skills/rodo/templates/design.md +15 -0
- package/dist/kit/.agents/skills/rodo/templates/en/acceptance.feature +18 -0
- package/dist/kit/.agents/skills/rodo/templates/en/card.rodo.md +32 -0
- package/dist/kit/.agents/skills/rodo/templates/en/request.rodo.md +14 -0
- package/dist/kit/.agents/skills/rodo/templates/en/simple.md +21 -0
- package/dist/kit/.agents/skills/rodo/templates/request.rodo.md +14 -0
- package/dist/kit/.agents/skills/rodo/templates/simple.md +21 -0
- package/dist/kit/.agents/skills/rodo/templates/spec.md +55 -0
- package/dist/kit/.agents/skills/rodo/testing.md +45 -0
- package/dist/kit/.gitattributes +1 -0
- package/dist/kit/KIT_VERSION +1 -0
- package/dist/kit/MIGRATION.md +71 -0
- package/dist/kit/agents-block.md +6 -0
- package/dist/kit/kit-manifest.json +228 -0
- package/dist/kit/project-template/CHANGELOG.md +6 -0
- package/dist/kit/project-template/MAP.md +22 -0
- package/dist/kit/project-template/MEMORY.md +6 -0
- package/dist/kit/project-template/RULES.md +278 -0
- package/dist/kit/project-template/project/architecture.md +19 -0
- package/dist/kit/project-template/project/brief.md +17 -0
- package/dist/kit/project-template/project/glossary.md +7 -0
- package/dist/kit/project-template/project.json +11 -0
- package/dist/kit/project-template-en/CHANGELOG.md +6 -0
- package/dist/kit/project-template-en/MAP.md +24 -0
- package/dist/kit/project-template-en/MEMORY.md +6 -0
- package/dist/kit/project-template-en/RULES.md +69 -0
- package/dist/kit/project-template-en/project/architecture.md +19 -0
- package/dist/kit/project-template-en/project/brief.md +17 -0
- package/dist/kit/project-template-en/project/glossary.md +7 -0
- package/dist/kit/project-template-en/project.json +11 -0
- package/package.json +48 -4
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
# روش RODO: راهنمای آدمها (نسخهٔ کیت ۲.۲.۱)
|
|
2
|
+
|
|
3
|
+
> این فایل برای شماست، نه برای AI. AI همین قواعد را از `.agents/skills/rodo/` میخواند.
|
|
4
|
+
> اگر فقط ۲ دقیقه وقت دارید، «شروع سریع» و بخش ۱، ۳ و ۴ را بخوانید.
|
|
5
|
+
|
|
6
|
+
## شروع سریع
|
|
7
|
+
|
|
8
|
+
1. نیازتان را ساده به AI بگویید. AI فایل `AGENTS.md` را میخواند، **یک کارت** برنامهریزی میکند و `simple.md` (چه چیزی میگیرید) و `spec.md` (قواعد فنی) را مینویسد.
|
|
9
|
+
2. `simple.md` را بخوانید. اگر چیزی درست نیست بگویید؛ AI پیش از کدنویسی کارت را درست میکند.
|
|
10
|
+
3. AI کارت را قدمبهقدم انجام میدهد. با `rodo status` و `rodo resume` میبینید کجاست.
|
|
11
|
+
4. وقتی کارت تمام شد، AI فایل `MAP.md` (چه تمام شد) و `MEMORY.md` (تصمیمها) را بهروز میکند.
|
|
12
|
+
5. تغییرهای خیلی کوچک کارت نمیخواهند؛ یک خط در `CHANGELOG.md` کافی است.
|
|
13
|
+
6. اختیاری: با `rodo init` به برد وصل شوید تا کارتها را در وب ببینید؛ `rodo sync` دو طرف را همگام نگه میدارد.
|
|
14
|
+
|
|
15
|
+
دستورهای مفید: `rodo new "عنوان"` (پوشهٔ کارت تازه با فایلهایش)، `rodo validate`، `rodo status`، `rodo resume`، `rodo test`، `rodo doctor`.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## ۱. این روش در یک نگاه
|
|
21
|
+
|
|
22
|
+
RODO یک **روش کار** است، نه یک نگهبان. هیچ ابزاری جلوی ذخیره کردن کار (commit) یا ادامهٔ کار را نمیگیرد. AI این روش را دنبال میکند چون پروژه را برای شما، همتیمیها و جلسهٔ بعدی AI قابل فهم نگه میدارد.
|
|
23
|
+
|
|
24
|
+
پروژه مثل حافظهٔ آدم سه لایه دارد:
|
|
25
|
+
|
|
26
|
+
| لایه | مثل | فایل | کی خوانده میشود |
|
|
27
|
+
|---|---|---|---|
|
|
28
|
+
| **نقشه** | «الان کجای کاریم؟» | `rodo/<پروژه>/MAP.md` و `MEMORY.md` | همیشه، اول از همه |
|
|
29
|
+
| **قانون** | «چطور کار میکنیم؟» | مهارت `.agents/skills/rodo/` | یک بار در هر جلسه |
|
|
30
|
+
| **پرونده** | «جزئیات همین کار» | پوشهٔ هر کارت در `rodo/<پروژه>/cycles/` | فقط وقتی لازم است |
|
|
31
|
+
|
|
32
|
+
**سه کاری که AI همیشه میکند:**
|
|
33
|
+
1. اول نقشه و حافظه را میخواند.
|
|
34
|
+
2. **سندهای پروژه را میسازد و درست نگه میدارد.** اگر کد چیزی را عوض کند که در سندی نوشته شده، همان سند را هم درست میکند.
|
|
35
|
+
3. **برای هر قابلیت، تغییر یا بهبود تازه یک کارت میسازد** و از روی کارت کار میکند. فقط تغییرهای خیلی کوچک (بخش ۴) کارت نمیخواهند.
|
|
36
|
+
|
|
37
|
+
**دو نقش AI داریم:** **برنامهریز** (نیاز شما را به کارت و سند تبدیل میکند؛ برای این نقش یک مدل قوی پیشنهاد میشود) و **کدنویس** (کارت را قدمبهقدم انجام میدهد). انتخاب مدل با شماست.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## ۲. پوشهها و فایلها
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
AGENTS.md اشارهگر به مهارت
|
|
45
|
+
.agents/skills/rodo/ مهارت AI (مال کیت است؛ rodo init بهروزش میکند)
|
|
46
|
+
rodo/
|
|
47
|
+
├── kit.json نسخهٔ کیت نصبشده
|
|
48
|
+
└── <پروژه>/ هر پوشه با project.json یک پروژه است و به یک برد وصل است
|
|
49
|
+
├── project.json اتصال به برد و تنظیمات (بدون رمز)
|
|
50
|
+
├── MAP.md نقشه: پروژه چیست، کجاییم، چه تمام شده، چه لغو شده، بعدی چیست
|
|
51
|
+
├── MEMORY.md تصمیمهای مهم: هر کدام یک خط با «چون»
|
|
52
|
+
├── CHANGELOG.md تغییرهای کوچک بدون کارت: هر کدام یک خط
|
|
53
|
+
├── RULES.md همین فایل
|
|
54
|
+
├── project/
|
|
55
|
+
│ ├── brief.md پروژه به زبان ساده
|
|
56
|
+
│ ├── architecture.md بخشها و فناوریها، و چرا
|
|
57
|
+
│ └── glossary.md واژههای پروژه و معنیشان
|
|
58
|
+
├── inbox/ کارتهایی که در وب ساخته شدهاند (در Git نیست)
|
|
59
|
+
└── cycles/
|
|
60
|
+
└── 002-discount-code/ یک کارت و سندهایش (هیچوقت جابهجا نمیشود)
|
|
61
|
+
├── card.rodo.md کارت: وضعیت، قدمها، یادداشت پیشرفت (با برد RODO همگام میشود، در Git نیست)
|
|
62
|
+
├── simple.md توضیح ساده (پیشنهادی؛ در وب فقطخواندنی نشان داده میشود)
|
|
63
|
+
├── spec.md سند فنی با قانونهای شمارهدار R1، R2، ... (پیشنهادی برای قابلیتها)
|
|
64
|
+
├── design.md طراحی (فقط برای کار بزرگ)
|
|
65
|
+
└── acceptance.feature سناریوهای تست (اختیاری، پیشنهادی)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
- **چرخه** یعنی یک کارت بهعلاوهٔ سندهایش. نام پوشه: سه رقم + نام کوتاه انگلیسی، مثل `002-discount-code`.
|
|
69
|
+
- **کارتها (`*.rodo.md`) در Git نیستند**؛ از راه برد RODO بین دستگاهها میروند. بقیهٔ فایلهای `rodo/` در Git هستند.
|
|
70
|
+
- **زبان:** سندهای ساده فارسی، سندهای فنی انگلیسی (در `project.json` قابل تغییر).
|
|
71
|
+
- **وضعیت کارت** همیشه یکی از این پنج تاست:
|
|
72
|
+
|
|
73
|
+
| وضعیت | یعنی | چه کسی میگذارد |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| `todo` | برنامهریزی شده، هنوز شروع نشده | برنامهریز |
|
|
76
|
+
| `in_progress` | در حال کار | کدنویس، وقتی کار را شروع میکند |
|
|
77
|
+
| `blocked` (گیر کرده) | کار جلو نمیرود: AI دو بار روی یک مشکل شکست خورده، یا منتظر چیزی است (جواب شما، یک رمز یا کلید دسترسی، کارت دیگر). دلیلش به زبان ساده در کلید `statusReason:` بالای کارت نوشته میشود، و «نوع مانع» (`blockerType`) هم دارد | خود AI؛ به شما هم میگوید |
|
|
78
|
+
| `cancelled` (لغوشده) | شما تصمیم گرفتید این کار انجام نشود. کارت **پاک نمیشود**؛ دلیل در کلید `statusReason:` و یک خط در `MAP.md` زیر «لغوشده» | فقط با اجازهٔ شما |
|
|
79
|
+
| `done` | تمام شده (و اگر کارت تست دارد، تستها پاس شدهاند) | کدنویس |
|
|
80
|
+
- **قالب کارت را ابزار RODO (watcher) بررسی میکند** و اشکالها را به شکل هشدار یا خطا در ترمینال و در وب نشان میدهد. این بررسی هیچوقت جلوی کار یا commit را نمیگیرد.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## ۳. چرخهٔ کار
|
|
85
|
+
|
|
86
|
+
| قدم | چه کسی | چه اتفاقی میافتد |
|
|
87
|
+
|---|---|---|
|
|
88
|
+
| ۱ | **شما** | نیازتان را ساده میگویید. |
|
|
89
|
+
| ۲ | **برنامهریز** | کارت و سندها را میسازد: توضیح ساده، سند فنی، و اگر بخواهید سناریوهای تست. |
|
|
90
|
+
| ۳ | **شما (اختیاری)** | اگر خواستید، `simple.md` و سناریوها را میخوانید و در وب قدم «تأیید کاربر» را تیک میزنید. اگر کارت این قدم را دارد، کدنویس تا تیک شما صبر میکند. |
|
|
91
|
+
| ۴ | **کدنویس** | قدمها را یکییکی انجام میدهد و تیک میزند. آخر هر جلسه «یادداشت پیشرفت» را بهروز میکند. |
|
|
92
|
+
| ۵ | **تست (اختیاری، پیشنهادی)** | اگر کارت سناریو دارد، Playwright آنها را واقعاً اجرا میکند. قدم «تست پذیرش پاس شد» فقط بعد از اجرای موفق تیک میخورد. |
|
|
93
|
+
| ۶ | **کدنویس** | بستن: کارت `done`، یک خط در `MAP.md` زیر «انجامشده»، تصمیمها در `MEMORY.md`. |
|
|
94
|
+
|
|
95
|
+
**تأیید و تست اختیاریاند،** ولی پیشنهاد میشوند: تأیید وقتی چیزی که کاربر میبیند عوض میشود، و تست برای هر قابلیت. هیچ وضعیتی به آنها گره نخورده.
|
|
96
|
+
|
|
97
|
+
**یک قانون مهم دربارهٔ تست:** AI هیچوقت حق ندارد سناریو یا تست را ضعیف کند تا کدش پاس شود (مثلاً سناریو را پاک کند یا عدد درست را به عدد غلط تغییر دهد).
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## ۴. کی کارت لازم است و کی نه؟
|
|
102
|
+
|
|
103
|
+
AI قبل از هر تغییر این سؤال را از خودش میپرسد:
|
|
104
|
+
|
|
105
|
+
> **بعد از این تغییر، آیا جملهای در یک کارت، `simple.md`، یک قانون `spec.md` یا یک سناریو غلط میشود، یا کاربر چیز متفاوتی میبیند یا میتواند انجام دهد؟**
|
|
106
|
+
|
|
107
|
+
- **نه ← تغییر کوچک، بدون کارت.** AI فقط یک خط به `CHANGELOG.md` اضافه میکند: تاریخ، چه چیزی عوض شد، چرا، و کدام فایلها.
|
|
108
|
+
`- 2026-10-14 | رنگ دکمهٔ «افزودن به سبد» سبز شد | خواستهٔ مریم برای دیده شدن بهتر | src/catalog.css`
|
|
109
|
+
- **بله ← کارت.** اگر کارتی باز (`todo`، `in_progress` یا `blocked`) همین رفتار را توضیح میدهد، همان کارت و سندهایش بهروز میشوند؛ وگرنه کارت تازه ساخته میشود.
|
|
110
|
+
- **مطمئن نیست ← کارت**، یا از شما میپرسد.
|
|
111
|
+
|
|
112
|
+
| تغییر | کارت؟ | چرا |
|
|
113
|
+
|---|---|---|
|
|
114
|
+
| غلط املایی در توضیح کد یا یک سند | نه | رفتار همان است |
|
|
115
|
+
| غلط املایی در متنی از صفحه که هیچ سناریو یا spec آن را نقل نکرده | نه | چیزی که نوشته شده غلط نمیشود |
|
|
116
|
+
| مرتب کردن کد (عوض کردن نام متغیر، تکه کردن تابع)، تستها هنوز پاس | نه | رفتار همان است |
|
|
117
|
+
| رنگ، فاصله یا فونتی که هیچ سناریو یا spec به آن اشاره نکرده | نه | فقط ظاهر |
|
|
118
|
+
| بهروز کردن یک کتابخانه بدون تغییر قابل دیدن | نه | رفتار همان است |
|
|
119
|
+
| باگ: کد کاری را که spec و سناریو میگویند درست انجام نمیداد و حالا انجام میدهد | نه | سندها از اول درست بودند |
|
|
120
|
+
| متن دکمهای که یک سناریو نقلش کرده («اعمال» ← «اعمال کد») | **بله** | جملهٔ سناریو غلط میشود |
|
|
121
|
+
| پیام خطایی که یک قانون spec کلمهبهکلمه آورده | **بله** | قانون عوض میشود |
|
|
122
|
+
| حداقل خرید از ۲۰۰ به ۱۵۰ هزار تومان | **بله** | عدد یک قانون عوض میشود |
|
|
123
|
+
| دکمه، فیلد، صفحه یا گزینهٔ تازه | **بله** | رفتار تازه = کارت تازه |
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## ۵. وسط کار نظرم عوض شد
|
|
128
|
+
|
|
129
|
+
| کی | چه کنیم |
|
|
130
|
+
|---|---|
|
|
131
|
+
| **قبل از شروع کدنویسی** | همان کارت و سندهایش ویرایش میشوند. |
|
|
132
|
+
| **وسط کدنویسی، تغییر کوچک** (همان قابلیت) | AI کارت، سناریو و spec همان کارت را بهروز میکند و به شما میگوید چه عوض شد. |
|
|
133
|
+
| **قابلیت بزرگ تازه** | کارت تازه. کارت جاری بزرگ نمیشود. |
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## ۶. کار گیر کرد یا نیمهکاره ماند
|
|
138
|
+
|
|
139
|
+
- **یادداشت پیشرفت:** هر کارت فعال یک بخش `## Progress notes` دارد که AI آخر هر جلسه پر میکند:
|
|
140
|
+
```
|
|
141
|
+
- Updated: 2026-10-12
|
|
142
|
+
- Done: کادر کد تخفیف ساخته شد
|
|
143
|
+
- Remaining: پیام خطای تاریخ گذشته
|
|
144
|
+
```
|
|
145
|
+
پس جلسهٔ بعد (حتی با مدل یا آدم دیگر) میداند از کجا ادامه دهد.
|
|
146
|
+
- **دو بار شکست روی یک مشکل:** AI میایستد، وضعیت کارت را `blocked` میکند و در کلید `statusReason:` به زبان ساده مینویسد چه شده. مثلاً:
|
|
147
|
+
`statusReason: پیام خطای «کد منقضی شده» نشان داده نمیشود؛ دو راه را امتحان کردم و نشد`
|
|
148
|
+
**شما تصمیم میگیرید:** توضیح بیشتر، امتحان با مدل قویتر، یا لغو.
|
|
149
|
+
- **منتظر چیزی:** اگر AI بدون چیزی که خودش نمیتواند فراهم کند جلو نمیرود (جواب شما، کلید دسترسی یک سرویس، تمام شدن کارت دیگر)، باز هم `blocked`:
|
|
150
|
+
`statusReason: منتظر کلید API سرویس پیامک از مسعود`
|
|
151
|
+
- **گیر باز شد:** وضعیت به `in_progress` برمیگردد و `statusReason` و `blockerType` برداشته میشوند.
|
|
152
|
+
- **لغو:** فقط با اجازهٔ شما. وضعیت کارت `cancelled` میشود، دلیل در `statusReason:` نوشته میشود، چرخه در `MAP.md` زیر «لغوشده» با همان دلیل نوشته میشود و یک خط در `MEMORY.md`. **کارت و پوشه و سندهایش پاک نمیشوند** تا بعداً معلوم باشد چه چیزی و چرا کنار گذاشته شد. اگر بعداً پشیمان شدید، به AI بگویید؛ کارت دوباره `todo` میشود.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## ۷. باگها
|
|
157
|
+
|
|
158
|
+
- **رفتار توضیحدادهشده عوض میشود:** کارت.
|
|
159
|
+
- **رفتار عوض نمیشود** (کد کاری را که سندها میگویند درست انجام نمیداد): رفع + یک خط در `CHANGELOG.md`.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## ۸. قانونهای طلایی
|
|
164
|
+
|
|
165
|
+
1. **اول نقشه.** هر جلسهٔ AI با `rodo sync` و `rodo resume` شروع میشود (نقشه و حافظه هم خوانده میشوند).
|
|
166
|
+
2. **هر قابلیت، تغییر یا بهبود = یک کارت.** تغییر کوچک بیاثر بر رفتار = یک خط CHANGELOG.
|
|
167
|
+
3. **سندها همیشه درست.** کدی که سند را غلط کند، سند را هم درست میکند.
|
|
168
|
+
4. **تأیید و تست اختیاری ولی پیشنهادی.** ولی تست هیچوقت ضعیف نمیشود تا پاس شود.
|
|
169
|
+
5. **دو شکست پشت سر هم = توقف و پرسیدن از شما.**
|
|
170
|
+
6. **هیچ چیزی پاک نمیشود** مگر شما بگویید.
|
|
171
|
+
7. **`MAP.md` و `MEMORY.md` آخر هر کارت بهروز میشوند،** نه وسط کار؛ چون اگر چند نفر همزمان این دو فایل را عوض کنند، Git تداخل (merge conflict) میگیرد.
|
|
172
|
+
8. **کارتها در Git نیستند؛ سندها هستند.**
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## شروع و پایان هر جلسهٔ AI
|
|
177
|
+
- **شروع:** AI اول فقط نگاه میکند که مخزن گیت از نسخهٔ دور عقب است یا نه. خودش `git pull`، `git fetch`، `git merge` یا `git rebase` نمیزند. اگر عقب باشد، یک بار به شما میگوید تا خودتان بهروز کنید، و با فایلهای موجود ادامه میدهد. فایل کارت با `rodo sync` میآید؛ نقشه، حافظه، مشخصات و `simple.md` با گیت. بعد `rodo sync` و `rodo resume` را اجرا میکند و فقط فایلهایی را میخواند که کارت به آنها ارجاع داده است.
|
|
178
|
+
- **پایان:**
|
|
179
|
+
- AI «یادداشت پیشرفت» را بهروز میکند؛
|
|
180
|
+
- اگر کارت تست دارد، `rodo test` را اجرا میکند؛
|
|
181
|
+
- آخر سر `rodo sync` را اجرا میکند تا کارتها به سایت بروند.
|
|
182
|
+
- اگر اینترنت یا سرور در دسترس نباشد، کار ادامه پیدا میکند و چیزی گم نمیشود. sync بعدی همه را میفرستد.
|
|
183
|
+
|
|
184
|
+
## گیر کردن
|
|
185
|
+
- «گیر کرده» یک نوع دارد:
|
|
186
|
+
- تصمیم: شما باید انتخاب کنید؛
|
|
187
|
+
- نیازمندی: هدف روشن نیست؛
|
|
188
|
+
- فنی؛
|
|
189
|
+
- تست؛
|
|
190
|
+
- محیط: ابزار یا سرور؛
|
|
191
|
+
- بیرونی: منتظر کسی یا چیزی؛
|
|
192
|
+
- دسترسی: کلید یا اجازه کم است.
|
|
193
|
+
- دلیل آن هم به زبان ساده در کلید `statusReason:` بالای کارت نوشته میشود.
|
|
194
|
+
- اگر **یک خطای یکسان دو بار** پیش بیاید، AI میایستد و کارت را «گیر کرده» میکند. خطاهای مختلف حساب نمیشوند.
|
|
195
|
+
|
|
196
|
+
## نیاز به تصمیم
|
|
197
|
+
- وقتی فقط شما میتوانید انتخاب کنید، AI یک سؤال با چند گزینه در کارت مینویسد. کارت «گیر کرده (تصمیم)» میشود.
|
|
198
|
+
- شما در سایت، روی کارت، یکی از گزینهها را انتخاب میکنید (یا جواب خودتان را مینویسید).
|
|
199
|
+
- AI در جلسهٔ بعد جواب را میخواند و ادامه میدهد. AI هرگز بهجای شما جواب نمیدهد.
|
|
200
|
+
|
|
201
|
+
## محدوده
|
|
202
|
+
- کارت میتواند بگوید چه کارهایی **مجاز** و چه کارهایی **ممنوع** است.
|
|
203
|
+
- اگر AI به کاری خارج از محدوده برسد، آن را بیصدا انجام نمیدهد. در یادداشت پیشرفت مینویسد و یک کارت تازه پیشنهاد میدهد.
|
|
204
|
+
|
|
205
|
+
## پاک شدن بیش از ۱۰ کارت
|
|
206
|
+
|
|
207
|
+
اگر `rodo sync` بگوید بیش از ۱۰ کارت پاک شده (`ARCHIVE_CONFIRM_REQUIRED`)، AI باید **بایستد و از شما بپرسد**. خودش تأیید نمیکند و هشدار را نادیده نمیگیرد.
|
|
208
|
+
|
|
209
|
+
## رمزها
|
|
210
|
+
- هیچ رمز، کلید یا توکنی در فایلهای RODO، کارتها یا پیامها نوشته نمیشود.
|
|
211
|
+
- اگر `rodo sync` چیزی شبیه رمز ببیند، آن کارت را نمیفرستد و خطا میدهد.
|
|
212
|
+
|
|
213
|
+
## برد تازه
|
|
214
|
+
- فقط خود شما میتوانید با `rodo init` در ترمینال برد تازه بسازید. باید نام برد را تایپ کنید.
|
|
215
|
+
- AI هرگز برد نمیسازد.
|
|
216
|
+
|
|
217
|
+
## سه اندازهٔ کار
|
|
218
|
+
- **کار کوچک:** مثل درست کردن یک غلط املایی. کارت لازم ندارد و سؤالی پرسیده نمیشود. فقط یک خط در `CHANGELOG.md` نوشته میشود.
|
|
219
|
+
- **کار معمولی:** مثل یک قابلیت ساده. یک توضیح ساده (`simple.md`) و یک سند فنی دارد.
|
|
220
|
+
- **کار بزرگ:** مثل وصل شدن به درگاه پرداخت. علاوه بر آنها یک سند طراحی هم دارد، و بهتر است یک AI دیگر کار را بازبینی کند.
|
|
221
|
+
- اگر AI شک داشته باشد که کار کوچک است یا نه، آن را کوچک حساب نمیکند (کارت میسازد). اگر بین معمولی و بزرگ شک داشته باشد، معمولی را انتخاب میکند و به شما میگوید.
|
|
222
|
+
|
|
223
|
+
## فقط سؤالهای مهم
|
|
224
|
+
- AI قبل از برنامهریزی فقط سؤالی را میپرسد که جوابش نتیجهٔ کار را عوض میکند، یا برگرداندنش گران است.
|
|
225
|
+
- هر بار حداکثر ۵ سؤال، و بیشتر با گزینههای آماده. کنار هر سؤال میگوید اگر نظری نداشته باشید چه چیزی را انتخاب میکند.
|
|
226
|
+
- برای چیزهای کماهمیت خودش یک انتخاب امن میکند و آن را یادداشت میکند.
|
|
227
|
+
- سؤالی که وسط کار پیش بیاید و کار بدون جواب شما جلو نرود، همان «نیاز به تصمیم» است و روی سایت جواب میدهید.
|
|
228
|
+
|
|
229
|
+
## سندها همیشه با کد یکیاند
|
|
230
|
+
- قبل از کار، AI مینویسد کدام سندهای فعلی پروژه با این تغییر عوض میشوند.
|
|
231
|
+
- آخر کار بررسی میکند که آن سندها واقعاً بهروز شده باشند و هنوز با کد بخوانند.
|
|
232
|
+
- سندهای کارهای تمامشده یا لغوشده هرگز بازنویسی نمیشوند؛ تصمیم تازه در کارت تازه و در `MEMORY.md` نوشته میشود.
|
|
233
|
+
- RODO خودش چیزی را اجرا نمیکند؛ فقط میگوید کدام بررسیها برای این کار مناسب است و ابزارهای خود پروژه آنها را اجرا میکنند.
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## ۹. مثال کوتاه: فروشگاه گل مریم
|
|
238
|
+
|
|
239
|
+
مریم یک گلفروشی در شیراز دارد (نمونهٔ کامل در پوشهٔ `example/` کیت).
|
|
240
|
+
|
|
241
|
+
1. **مریم:** «یه کد تخفیف ده درصدی میخوام، فقط برای خریدهای بالای دویست تومن، تا آخر آبان.»
|
|
242
|
+
2. **برنامهریز** کارت `002-discount-code` را میسازد. در `spec.md` قانونها شماره دارند، مثلاً **R2**: «جمع سبد باید دستکم ۲۰۰٬۰۰۰ تومان باشد». مریم تست میخواهد، پس سناریوها هم نوشته میشوند و سناریوی مربوط برچسب `@R2` میگیرد. مریم تأیید هم میخواهد، پس اولین قدم کارت «تأیید کاربر» است.
|
|
243
|
+
3. **مریم** در وب دو فایل را میخواند و قدم «تأیید کاربر» را تیک میزند.
|
|
244
|
+
4. **کدنویس** قدمها را انجام میدهد و آخر جلسه مینویسد: `Done: فهرست کدها و تابع applyDiscount`، `Remaining: کادر کد در صفحهٔ سبد`.
|
|
245
|
+
5. **تست:** سناریوی «حروف کوچک» رد میشود. کدنویس **کد را درست میکند، نه سناریو را**. بار دوم همه پاس میشوند.
|
|
246
|
+
6. **بستن:** کارت `done`، یک خط در `MAP.md` و یک تصمیم در `MEMORY.md`: «هر سفارش فقط یک کد تخفیف میگیرد. چون مریم نمیخواهد تخفیفها روی هم جمع شوند.»
|
|
247
|
+
|
|
248
|
+
**یک تغییر کوچک:** مریم: «رنگ دکمه رو سبز کن.» هیچ سناریویی دربارهٔ رنگ نیست، پس کارت لازم نیست؛ AI یک خط به `CHANGELOG.md` اضافه میکند.
|
|
249
|
+
**یک تغییر نهچندان کوچک:** مریم: «متن دکمهٔ "اعمال" رو بکن "اعمال کد".» یک سناریو میگوید «"اعمال" را میزند»، پس این تغییر کارت میخواهد (یا بهروز کردن کارت بازِ همان قابلیت).
|
|
250
|
+
**یک کارت لغوشده:** کادوپیچی (`003-gift-wrap`) لغو شد چون مریم فعلاً کادوپیچی نمیکند. کارتش با `status: cancelled` و `statusReason: مریم فعلاً کادوپیچی نمیکند` مانده و در `MAP.md` زیر «لغوشده» با همین دلیل آمده.
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## ۱۰. ابزارها
|
|
255
|
+
|
|
256
|
+
| ابزار | کارش |
|
|
257
|
+
|---|---|
|
|
258
|
+
| `rodo init` | کیت را نصب یا بهروز میکند و پروژه را به یک برد وصل میکند. برد تازه فقط با تایپ نام برد ساخته میشود |
|
|
259
|
+
| `rodo sync` | اول و آخر هر جلسه: کارتها را با برد همگام میکند |
|
|
260
|
+
| `rodo resume` | خلاصهٔ کار برای شروع یک جلسهٔ تازه |
|
|
261
|
+
| `rodo status` | برد و فایلهای محلی را کنار هم نشان میدهد |
|
|
262
|
+
| `rodo test` | دستور تست کارت را اجرا و امضای شکست را ثبت میکند |
|
|
263
|
+
| `rodo validate` | قالب کارتها را بررسی میکند و فقط گزارش میدهد |
|
|
264
|
+
| `rodo doctor` | مشکلهای راهاندازی را پیدا میکند |
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## ۱۱. سؤالهای رایج
|
|
269
|
+
|
|
270
|
+
**باید Gherkin یاد بگیرم؟** نه. سناریو را مثل یک داستان کوتاه بخوانید: «اگر این باشد، وقتی این کار را بکنم، این را میبینم.»
|
|
271
|
+
|
|
272
|
+
**اگر AI تیک «تأیید کاربر» را در فایل بزند؟** فایده ندارد. سرور RODO تیک این قدم را فقط از وب و از یک آدم میپذیرد و watcher فایل را به حالت سرور برمیگرداند.
|
|
273
|
+
|
|
274
|
+
**اگر AI فایل کارت را خراب کند؟** watcher در خط اول کارت `<!-- RODO_ERROR: ... -->` مینویسد و اشکال را در ترمینال و وب نشان میدهد. AI یا شما درستش میکنید؛ خط خطا خودش پاک میشود. کار و commit هیچوقت متوقف نمیشوند.
|
|
275
|
+
|
|
276
|
+
**فرق `blocked` و `cancelled` چیست؟** `blocked` یعنی «فعلاً نمیشود، ولی هنوز میخواهیم»؛ با رفع مشکل ادامه پیدا میکند. `cancelled` یعنی «دیگر نمیخواهیم»؛ فقط شما میتوانید آن را بگویید.
|
|
277
|
+
|
|
278
|
+
**کدام مدل AI؟** انتخاب شما. فقط برای برنامهریزی یک مدل قوی پیشنهاد میشود، چون اشتباه در برنامه گرانتر از اشتباه در یک قدم کد است.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# معماری
|
|
2
|
+
|
|
3
|
+
## بخشها
|
|
4
|
+
|
|
5
|
+
| بخش | فناوری | مسیر در مخزن | چرا این انتخاب |
|
|
6
|
+
|---|---|---|---|
|
|
7
|
+
| {{مثلاً وبسایت}} | {{Next.js}} | `{{src/}}` | {{دلیل}} |
|
|
8
|
+
|
|
9
|
+
## دادهٔ اصلی
|
|
10
|
+
|
|
11
|
+
{{موجودیتها و رابطههایشان، کوتاه}}
|
|
12
|
+
|
|
13
|
+
## تست
|
|
14
|
+
|
|
15
|
+
- تست پذیرش (اختیاری، پیشنهادی): `playwright-bdd`. سناریوها در `rodo/<project>/cycles/*/acceptance.feature`، step definitionها در `{{e2e/steps/}}`. همه: `{{npm run test:acceptance}}`. چرخههای لغوشده برچسب `@cancelled` دارند و در `playwright.config` با `tags: 'not @cancelled'` کنار گذاشته میشوند. یک چرخه: دستور `testCommand` در `project.json`.
|
|
16
|
+
|
|
17
|
+
## قواعدی که همه باید بدانند
|
|
18
|
+
|
|
19
|
+
- {{مثلاً: همهٔ قیمتها به تومان و عدد صحیح ذخیره میشوند}}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# {{نام پروژه}} به زبان ساده
|
|
2
|
+
|
|
3
|
+
## برای چه کسی است
|
|
4
|
+
|
|
5
|
+
{{مشتری یا کاربر اصلی، یک جمله}}
|
|
6
|
+
|
|
7
|
+
## چه مشکلی را حل میکند
|
|
8
|
+
|
|
9
|
+
{{دو یا سه جمله}}
|
|
10
|
+
|
|
11
|
+
## چه چیزی را عمداً انجام نمیدهد
|
|
12
|
+
|
|
13
|
+
- {{مثلاً: ارسال به شهرهای دیگر}}
|
|
14
|
+
|
|
15
|
+
## موفقیت یعنی چه
|
|
16
|
+
|
|
17
|
+
- {{یک نشانهٔ قابل اندازهگیری}}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# Small changes
|
|
2
|
+
|
|
3
|
+
> One line for every small change that does not change behaviour described in a card, spec or scenario (no card needed).
|
|
4
|
+
> Format: `- YYYY-MM-DD | what changed | why | files`
|
|
5
|
+
|
|
6
|
+
- {{DATE}} | added the RODO method | so the AI and people work from one map and current docs | `rodo/`
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Project map: {{name}}
|
|
2
|
+
|
|
3
|
+
> Every card and its docs live in `rodo/<project>/cycles/NNN-slug/`. Update this file when a card is finished or cancelled (not in the middle of coding), so several people can work at once without Git conflicts. The state of current work is in the cards.
|
|
4
|
+
> Keep it short (about 40 lines). Read this first.
|
|
5
|
+
|
|
6
|
+
## What this project is
|
|
7
|
+
|
|
8
|
+
{{one or two plain sentences}}
|
|
9
|
+
|
|
10
|
+
## Where we are
|
|
11
|
+
|
|
12
|
+
{{one or two sentences: the last thing that was finished}}
|
|
13
|
+
|
|
14
|
+
## Done
|
|
15
|
+
|
|
16
|
+
> One line per finished cycle: a link to the cycle, e.g. `- [001 Delete a note](cycles/001-delete-note/simple.md)`.
|
|
17
|
+
|
|
18
|
+
## Cancelled
|
|
19
|
+
|
|
20
|
+
> One line per cancelled cycle: the link, then " — ", then the reason.
|
|
21
|
+
|
|
22
|
+
## Next
|
|
23
|
+
|
|
24
|
+
- {{next idea}}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# Decision memory
|
|
2
|
+
|
|
3
|
+
> One line per important decision: what was decided, because why. Added when a card is finished or cancelled. Decisions are never deleted; if one changes, write a new line and say which line it replaces.
|
|
4
|
+
> Format: `- YYYY-MM-DD — decision. Because reason. (cycle NNN)`
|
|
5
|
+
|
|
6
|
+
- {{DATE}} — The project follows the RODO method. Because the AI and the people should work from one map, cards and up-to-date docs.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# The RODO method: guide for people (kit 2.2.1)
|
|
2
|
+
|
|
3
|
+
> This file is for you, not for the AI. The AI reads the same rules from `.agents/skills/rodo/`.
|
|
4
|
+
|
|
5
|
+
## Quick start (2 minutes)
|
|
6
|
+
|
|
7
|
+
1. Ask your AI assistant for a feature in plain words. It reads `AGENTS.md`, plans **one card** and writes `simple.md` (what you get) and `spec.md` (the technical rules).
|
|
8
|
+
2. Read `simple.md`. If something is wrong, say so; the AI fixes the card before coding.
|
|
9
|
+
3. The AI codes the card step by step and ticks the checklist. You can follow it with `rodo status` and `rodo resume`.
|
|
10
|
+
4. When the card is done, the AI updates `MAP.md` (what is finished) and `MEMORY.md` (the decisions).
|
|
11
|
+
5. Small fixes that do not change described behaviour get one line in `CHANGELOG.md` instead of a card.
|
|
12
|
+
6. Optional: connect a board with `rodo init` to see and edit the cards on the web; `rodo sync` keeps both sides in step.
|
|
13
|
+
|
|
14
|
+
Useful commands: `rodo new "<title>"` (a new cycle folder with its files), `rodo validate`, `rodo status`, `rodo resume`, `rodo test`, `rodo doctor`.
|
|
15
|
+
|
|
16
|
+
## 1. The method at a glance
|
|
17
|
+
|
|
18
|
+
RODO is a **way of working**, not a gate. No tool blocks a commit or stops work. The AI follows it because it keeps the project understandable for you, your teammates and the next AI session.
|
|
19
|
+
|
|
20
|
+
| Layer | Like | Files | When it is read |
|
|
21
|
+
|---|---|---|---|
|
|
22
|
+
| **Map** | "Where are we?" | `rodo/<project>/MAP.md`, `MEMORY.md` | always, first |
|
|
23
|
+
| **Rules** | "How do we work?" | `.agents/skills/rodo/` | once per session |
|
|
24
|
+
| **Case file** | "Details of this piece of work" | `rodo/<project>/cycles/NNN-slug/` | only when needed |
|
|
25
|
+
|
|
26
|
+
The AI always: reads the map first; keeps the docs true (when code changes something a doc describes, the doc changes in the same work); makes a card for every new feature, change or improvement.
|
|
27
|
+
|
|
28
|
+
## 2. Folders and files
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
AGENTS.md pointer to the skill
|
|
32
|
+
.agents/skills/rodo/ the AI skill (owned by the kit; rodo init updates it)
|
|
33
|
+
rodo/
|
|
34
|
+
├── kit.json installed kit version
|
|
35
|
+
└── <project>/
|
|
36
|
+
├── project.json board binding and settings (no secrets)
|
|
37
|
+
├── MAP.md what the project is, where we are, done, cancelled, next
|
|
38
|
+
├── MEMORY.md important decisions, one line each with "because"
|
|
39
|
+
├── CHANGELOG.md small changes without a card, one line each
|
|
40
|
+
├── RULES.md this file
|
|
41
|
+
├── project/ brief, architecture, glossary (always current)
|
|
42
|
+
└── cycles/NNN-slug/ one folder per card: card.rodo.md, simple.md, spec.md, design.md, acceptance.feature
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## 3. Statuses (exactly five)
|
|
46
|
+
|
|
47
|
+
`todo` planned · `in_progress` being worked on · `blocked` cannot go on (needs `blockerType` and a plain `statusReason`) · `cancelled` you decided not to do it (needs `statusReason`; the card stays) · `done` finished.
|
|
48
|
+
|
|
49
|
+
## 4. When is a card needed?
|
|
50
|
+
|
|
51
|
+
For every new feature, change or improvement, and for every change to behaviour that a card, spec or scenario describes. Not for a typo, style, refactor or a fix that does not change described behaviour: those get one `CHANGELOG.md` line.
|
|
52
|
+
|
|
53
|
+
## 5. Your part
|
|
54
|
+
|
|
55
|
+
- Answer the AI's questions (it asks only what matters, at most 5 at a time).
|
|
56
|
+
- When a card asks for a decision (`## Decision:`), answer it on the web; the AI never answers for you.
|
|
57
|
+
- Approval steps (`[approval]`) are ticked only by a person, on the web.
|
|
58
|
+
- If the AI says it is stuck (the same failure twice), choose: clarify, try a stronger model, or cancel.
|
|
59
|
+
|
|
60
|
+
## 6. Cards and Git
|
|
61
|
+
|
|
62
|
+
- Without a board, card files (`*.rodo.md`) are committed to Git like any other file.
|
|
63
|
+
- With a board, card files live on the board and arrive through `rodo sync`; `rodo init` adds them to `.gitignore`.
|
|
64
|
+
- `rodo sync` never loses your text: when the board wins a conflict, your file is saved in `rodo/<project>/.rodo/conflicts/`.
|
|
65
|
+
|
|
66
|
+
## 7. Never
|
|
67
|
+
|
|
68
|
+
- No secrets (passwords, keys, tokens) in any file under `rodo/`, in cards or in commit messages.
|
|
69
|
+
- The AI never deletes files without your OK, never creates boards, and never answers decisions or ticks approvals.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Architecture
|
|
2
|
+
|
|
3
|
+
## Parts
|
|
4
|
+
|
|
5
|
+
| Part | Technology | Path in the repo | Why this choice |
|
|
6
|
+
|---|---|---|---|
|
|
7
|
+
| {{e.g. website}} | {{Next.js}} | `{{src/}}` | {{reason}} |
|
|
8
|
+
|
|
9
|
+
## Main data
|
|
10
|
+
|
|
11
|
+
{{entities and how they relate, briefly}}
|
|
12
|
+
|
|
13
|
+
## Tests
|
|
14
|
+
|
|
15
|
+
- Acceptance tests are optional and recommended. Scenarios live in `rodo/<project>/cycles/*/acceptance.feature`; one cycle runs with `testCommand` in `project.json` (`{NNN}` is replaced by the cycle number). Cancelled cycles are tagged `@cancelled` and skipped.
|
|
16
|
+
|
|
17
|
+
## Rules everyone must know
|
|
18
|
+
|
|
19
|
+
- {{e.g. all prices are stored as whole cents}}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# {{name}} in plain words
|
|
2
|
+
|
|
3
|
+
## Who it is for
|
|
4
|
+
|
|
5
|
+
{{the main user or customer, one sentence}}
|
|
6
|
+
|
|
7
|
+
## What problem it solves
|
|
8
|
+
|
|
9
|
+
{{two or three sentences}}
|
|
10
|
+
|
|
11
|
+
## What it deliberately does not do
|
|
12
|
+
|
|
13
|
+
- {{for example: shipping to other cities}}
|
|
14
|
+
|
|
15
|
+
## What success means
|
|
16
|
+
|
|
17
|
+
- {{one measurable sign}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,50 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rodo-spec",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "2.2.1",
|
|
4
|
+
"description": "RODO method CLI — install the kit, manage cards, sync with the board",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/alishafiee1/rodo-spec.git",
|
|
10
|
+
"directory": "packages/cli"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/alishafiee1/rodo-spec#readme",
|
|
13
|
+
"keywords": [
|
|
14
|
+
"rodo",
|
|
15
|
+
"rodo-spec",
|
|
16
|
+
"kanban",
|
|
17
|
+
"cli",
|
|
18
|
+
"spec",
|
|
19
|
+
"ai-agent"
|
|
20
|
+
],
|
|
21
|
+
"bin": {
|
|
22
|
+
"rodo": "dist/index.js"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"README.md",
|
|
27
|
+
"LICENSE"
|
|
28
|
+
],
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=20"
|
|
31
|
+
},
|
|
32
|
+
"scripts": {
|
|
33
|
+
"build": "tsup",
|
|
34
|
+
"prepack": "pnpm run build",
|
|
35
|
+
"test": "vitest run",
|
|
36
|
+
"typecheck": "tsc --noEmit"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@rodo/card-format": "workspace:*",
|
|
40
|
+
"@rodo/protocol": "workspace:*",
|
|
41
|
+
"@rodo/rodo-kit": "workspace:*",
|
|
42
|
+
"@types/node": "^22.0.0",
|
|
43
|
+
"commander": "^12.1.0",
|
|
44
|
+
"picocolors": "^1.1.1",
|
|
45
|
+
"tsup": "^8.3.5",
|
|
46
|
+
"typescript": "^5.7.2",
|
|
47
|
+
"vitest": "^2.1.8",
|
|
48
|
+
"yaml": "^2.7.0"
|
|
49
|
+
}
|
|
50
|
+
}
|