𝗔 𝗙𝗼𝗹𝗱𝗲𝗿 𝗡𝗮𝗺𝗲 𝗜𝘀 𝗡𝗼𝘁 𝗔 𝗣𝗿𝗼𝗷𝗲𝗰𝘁 𝗜𝗱𝗲𝗻𝘁𝗶𝘁𝘆

ഒരു ഫോൾഡർ പാത്ത് എന്നത് ഒരു റൂട്ടാണ്. ഒരു പ്രോജക്റ്റ് ഇപ്പോൾ എവിടെയാണെന്ന് അത് ഒരു ടൂളിന് പറഞ്ഞുതരുന്നു. എന്നാൽ ഒരു പ്രോജക്റ്റ് ഐഡന്റിറ്റി എന്നത് വ്യത്യസ്തമാണ്.

താഴെ പറയുന്ന സാധാരണ മാറ്റങ്ങളിലും ഐഡന്റിറ്റി നിലനിൽക്കേണ്ടതുണ്ട്:

  • ഡയറക്ടറി പേര് മാറ്റുന്നത്
  • പ്രോജക്റ്റ് മെഷീനുകൾക്കിടയിൽ മാറ്റുന്നത്
  • റെപ്പോസിറ്ററി ഒരു പുതിയ പാത്തിലേക്ക് ക്ലോൺ ചെയ്യുന്നത്
  • ഒരേ പ്രോജക്റ്റിന്റെ ഒന്നിലധികം ചെക്ക്ഔട്ടുകൾ ഉപയോഗിക്കുന്നത്

ഐഡന്റിറ്റി പാത്തിനെ (path) ആശ്രയിച്ചാണെങ്കിൽ, ഈ പ്രവർത്തനങ്ങൾ അപകടകരമാകും. പാത്ത് പ്രവർത്തിച്ചേക്കാം, പക്ഷേ പ്രോജക്റ്റ് ഒന്നാണെന്ന് തെളിയിക്കാൻ അതിന് കഴിയില്ല. ഇത് സ്റ്റേറ്റ് (state) സൂക്ഷിക്കുന്നതിനുള്ള ഒരു മോശം കീ (key) ആയി മാറുന്നു.

ഇത് പരിഹരിക്കാൻ ഞാൻ APC, APX എന്നിവ ഉപയോഗിച്ചുള്ള ഒരു സ്പ്ലിറ്റ് ഡിസൈൻ (split design) ഉപയോഗിക്കുന്നു.

APC പ്രോജക്റ്റ് കോൺട്രാക്റ്റ് (project contract) കൈകാര്യം ചെയ്യുന്നു. ഇത് റെപ്പോസിറ്ററിയിലാണ് ഇരിക്കുന്നത്. APX റൺടൈം സ്റ്റേറ്റ് (runtime state) കൈകാര്യം ചെയ്യുന്നു. ഇത് റെപ്പോസിറ്ററിക്ക് പുറത്താണ് ഇരിക്കുന്നത്.

ഒരു സ്റ്റേബിൾ ആങ്കർ (stable anchor) സൃഷ്ടിക്കാൻ APC ചില പ്രത്യേക ഫയലുകൾ ഉപയോഗിക്കുന്നു:

  • റൂട്ട് കോൺട്രാക്റ്റിനായി AGENTS.md
  • പ്രോജക്റ്റ് മെറ്റാഡാറ്റയ്ക്കായി .apc/project.json
  • ഏജന്റ് ഡെഫനിഷനുകൾക്കായി .apc/agents/*.md
  • MCP ഹിന്റ്സിനായി .apc/mcps.json

.apc/project.json ഫയൽ വളരെ ചെറുതാണ്. ഇതിൽ ഒരു പേരും ഒരു സ്റ്റേബിൾ ഐഡിയും അടങ്ങിയിരിക്കുന്നു. ഇതൊരു മാർക്കറാണ്, വലിയൊരു കോൺഫിഗറേഷൻ ഫയലല്ല.

ഒരു ലൈവ് ചെക്ക്ഔട്ടിനെ (live checkout) ഒരു ഡ്യൂറബിൾ റെക്കോർഡുമായി (durable record) ബന്ധിപ്പിക്കാൻ APX ഈ ഫയൽ ഉപയോഗിക്കുന്നു. പ്രോജക്റ്റ് കണ്ടെത്താൻ പാത്തുകൾ APX-നെ സഹായിക്കുന്നു. പ്രോജക്റ്റ് കണ്ടെത്തിക്കഴിഞ്ഞാൽ അത് സ്റ്റേബിൾ ആയി നിലനിർത്താൻ മെറ്റാഡാറ്റ സഹായിക്കുന്നു.

ഈ ഡിസൈൻ റെപ്പോസിറ്ററി വൃത്തിയായി സൂക്ഷിക്കുന്നു. സെഷൻ ലോഗുകൾ (session logs), മെസ്സേജ് ഹിസ്റ്ററി (message history) തുടങ്ങിയ റൺടൈം ഡാറ്റകൾ APX സ്റ്റോറേജിൽ തന്നെ ഇരിക്കുന്നു. അവ നിങ്ങളുടെ ഗിറ്റ് ഹിസ്റ്ററിയിൽ (git history) അനാവശ്യമായി നിറയുന്നില്ല.

നിങ്ങൾ പാത്തുകളെ ആശ്രയിക്കുമ്പോൾ, ഈ പരാജയങ്ങൾ നേരിടേണ്ടി വരും:

  • പാത്തുകൾ മാറുന്നു
  • സ്റ്റേറ്റ് തകരാറിലാകുന്നു
  • ടൂൾ തെറ്റായ ഊഹങ്ങൾ നടത്തുന്നു
  • നിർമ്മാണത്തിന് പകരം പേരുകൾ ഡീബഗ് (debug) ചെയ്യാൻ നിങ്ങൾ സമയം ചെലവഴിക്കുന്നു

ഒരു സ്റ്റേബിൾ ഐഡന്റിറ്റി ഈ പ്രശ്നങ്ങൾ ഒഴിവാക്കുന്നു. ഇത് കോഡ് റിവ്യൂകൾ (code reviews) എളുപ്പമാക്കുന്നു. അപ്രതീക്ഷിതമായ റൺടൈം ഔട്ട്‌പുട്ടിന് പകരം പ്രോജക്റ്റുമായി ബന്ധപ്പെട്ട വസ്തുതകൾ നിങ്ങളുടെ ഡിഫുകളിൽ (diffs) കാണാൻ സാധിക്കുന്നു.

ഇതിന്റെ അതിർവരമ്പുകൾ ലളിതമാണ്:

  • AGENTS.md: പ്രോജക്റ്റ് എന്താണ് പ്രതീക്ഷിക്കുന്നത്
  • .apc/project.json: പ്രോജക്റ്റ് എന്താണ്
  • ~/.apx/: അതിൽ ജോലി ചെയ്യുമ്പോൾ എന്താണ് സംഭവിച്ചത്

ഒരു പ്രോജക്റ്റിന് ഒരു സ്റ്റേബിൾ ആങ്കർ ആവശ്യമാണ്. ഫോൾഡർ പാത്ത് വളരെ അസ്ഥിരമാണ് (volatile). റൺടൈം വളരെ ബഹളമയമാണ് (noisy). ഒരു റെപ്പോ കോൺട്രാക്റ്റും ഒരു മെറ്റാഡാറ്റ ഫയലും ചേർന്നതാണ് ശരിയായ രീതി.

Source: https://dev.to/tecnomanu/a-folder-name-is-not-a-project-identity-4eca

Optional learning community: https://t.me/GyaanSetuAi