فایل حافظه: چه چیزی داخلش
در فصل ۱.۴.۱ گفتیم پیشفرض این است که هیچ حافظهای وجود ندارد — هر session از صفر شروع میشود. فایل حافظه جوابِ همان مسئله است، و حالا میخواهیم درست بنویسیمش.
سؤال درست این نیست «چه چیزی را نگه دارم؟» — که جوابش «همهچیز» میشود و به فایلی میرسی که کسی نمیخواندش. سؤال درست این است:
بهخاطر بسپار «چه چیزی را اگر ننویسم، دفعهی بعد باید دوباره توضیح بدهم؟» هر چیزی که جوابش بله است، حافظه است. بقیهاش یادداشت است و جای دیگری دارد.
پس چه چیزهایی میمانند:
- تصمیمها و دلیلشان. مهمترین بخش. «چرا اینطور» ارزشش از «اینطور است» بیشتر است، چون بدون دلیل، شش ماه بعد تصمیم را عوض میکنی و همان اشتباه قبلی را دوباره میکنی.
- چیزهایی که امتحان شدند و جواب ندادند. این را تقریباً همه فراموش میکنند، و بیارزشترین وقتِ ازدسترفته همان دوبارهآزمودنِ راهِ بسته است.
- ترجیحهای ثابت. «خروجی همیشه فارسی»، «تاریخها شمسی».
- و آدرسها. فایلها کجا هستند، منبع اصلی داده کدام است.
و چه چیزی نباید داخلش باشد: هر چیزی که از خودِ سیستم قابل دیدن است. فهرست فایلها، محتوای پوشهها، چیزهایی که با یک نگاه معلوماند — نوشتنشان یعنی دو نسخهی حقیقت داری که از هم جدا میافتند. و البته هیچ رمز و کلیدی (فصل ۵.۳.۵).
لینک بین فایلها
یک فایل حافظهی بزرگ، خیلی زود به فایلی تبدیل میشود که خودت هم نمیخوانیاش. راهحل، شکستن است — ولی شکستنی که تکهها را گم نکند. یعنی لینک.
در Markdown دو شکل رایج دارد:
[نامِ نمایشی](مسیر/فایل.md)— شکل استاندارد که همهجا کار میکند.[[نام-فایل]]— شکل کوتاهتر که در برنامههای یادداشتبرداری رایج است.
ولی نکتهی مهمتر از شکلِ لینک این است: لینک، ساختار را از پوشهها مستقل میکند. پوشه فقط یک سلسلهمراتب میدهد — هر فایل یکجا. لینک اجازه میدهد یک چیز از چند جا قابل رسیدن باشد، بدون کپیکردنش.
و یک قاعده که فایل حافظه را زنده نگه میدارد: یک فایل فهرست داشته باش که به بقیه لینک میدهد. آن یکی را همیشه میخوانی؛ بقیه را وقتی لازم شد. این همان کاری است که context engineering توصیه میکند — کوچکترین مجموعهی پرسیگنال، نه همهچیز یکجا (فصل ۲.۷.۲).
فایل وضعیت: کجا بودیم
حالا مهمترین تفکیک این فصل. حافظه و وضعیت دو چیز جدا هستند، و اگر یکیشان کنی، هر دو را از دست میدهی:
- حافظه پایدار است. «این سیستم چطور کار میکند»، «چرا اینطور تصمیم گرفتیم». ماهها معتبر میماند.
- وضعیت فرّار است. «الان کجای کار هستیم»، «قدم بعدی چیست»، «چه چیزی نیمهکاره ماند». فردا عوض میشود.
چرا جداکردنشان مهم است؟ چون عمرشان فرق دارد. اگر وضعیتِ امروز را وسط حافظهی پایدار بنویسی، دو هفته بعد فایل حافظهات پر از جملههای منقضی است — و آنوقت به هیچکدامش اعتماد نمیکنی. یک فایل حافظهای که به آن اعتماد نداری، بدتر از نداشتنش است، چون هم وقت میگیرد و هم گمراه میکند.
یک فایل وضعیت خوب چهار چیز دارد و کوتاه است:
- کجا هستیم — یک جمله.
- چه چیزی تمام شد — از آخرین دفعه.
- قدم بعدی چیست — مشخص و قابلشروع، نه «ادامهی کار».
- چه چیزی گیر است — و منتظر چه کسی.
و در نقطههای میانی بهروزش کن، نه فقط آخر کار. دلیلش ساده است: کاری که نصفه رها میشود، معمولاً ناگهانی رها میشود — و آنوقت فایل وضعیتی که فقط قرار بود آخرِ کار نوشته شود، هیچوقت نوشته نمیشود.
یک فایل، یک مسئولیت
این قاعدهی جمعبندیِ فصل است، و آزمونش یک سؤال است: «این فایل کِی عوض میشود؟» اگر دو جواب داشت، باید دو فایل باشد.
مثال روشن:
_قانون.md— وقتی قاعدهای عوض شود. شاید ماهی یک بار._حافظه.md— وقتی تصمیمی گرفته شود. هفتهای یک بار._وضعیت.md— هر بار که کار میکنی.
سه ریتم متفاوت، سه فایل. اگر این سه در یک فایل بودند، هر بار که وضعیت را بهروز میکردی، کلِ قوانین را هم دست میزدی — و احتمال خرابکاری در چیزی که نباید عوض شود بالا میرفت.
یک فایدهی جانبی هم دارد که به M1 برمیگردد: میتوانی فقط همان فایلی را به ایجنت بدهی که به کار این کار میآید. سه فایل کوچک، سه انتخاب؛ یک فایل بزرگ، فقط یک انتخابِ گران (فصل ۱.۳.۴).
تمرین (ساختنی)
برای سیستمی که در فصل ۶.۲ طراحی کردی، دو فایل واقعی بنویس:
_حافظه.md— با حداقل دو تصمیم و دلیلشان، و یک چیزی که امتحان شد و جواب نداد._وضعیت.md— با همان چهار بخش بالا.- بعد آزمون فراموشی: فایل وضعیت را به ایجنت بده و بگو «فقط با خواندن این، بگو قدم بعدی چیست.» اگر نتوانست، فایل ناقص است.
پاسخنامه — دو نمونه، و چرا آزمون فراموشی سختگیر است
_حافظه.md (تکهای از آن):
- تصمیم: پوشهبندی بر اساس مرحله است نه مشتری. چرا: با پوشهبندی مشتری، برای فهمیدن کارِ امروز باید همهی پوشهها را باز میکردم.
- تصمیم: نام فایل با تاریخ شروع میشود. چرا: مرتبسازی خودبهخود زمانی میشود.
- جواب نداد: یک فایل واحد برای همهی درخواستها. بعد از حدود سی مورد، پیدا کردن یک درخواست از نوشتنش سختتر شد.
_وضعیت.md: «کجا هستیم: ساختار
پوشهها ساخته شد و قانون نامگذاری نوشته شد. · تمام شد: انتقال ۱۲ پروندهی
قدیمی. · قدم بعدی: پروندههای خرداد را منتقل کن؛ از فایل
۱۴۰۵-۰۳-... شروع کن. · گیر: سه پرونده تاریخ
ندارند — باید از خودِ مشتری بپرسم.»
چرا آزمون فراموشی سختگیر است و باید باشد: ایجنت واقعاً هیچ حافظهای از دفعهی قبل ندارد — پس یک خوانندهی صادق است که نمیتواند از سرِ خودش جای خالی را پر کند. اگر او با خواندن فایل وضعیت نفهمید قدم بعدی چیست، تو هم سه هفته بعد نمیفهمی؛ فقط تو خیال میکنی که میفهمی، چون الان یادت است.