প্রকল্প সম্পর্কে
AI Shipcheck হলো একটি লোকাল-ফার্স্ট প্রোডাকশন রেডিনেস স্ক্যানার, যা মূলত AI কোডিং টুল দিয়ে লেখা অ্যাপের জন্য তৈরি। এর মূল ধারণা: AI অ্যাসিস্ট্যান্টরা চালু হয় এমন কোড তৈরি করতে ভালো, কিন্তু প্রোডাকশনে টিকে থাকা কোড তৈরি করতে কম ভালো, আর দুই ক্ষেত্রেই তারা কাজ শেষ বলে জানায়। Shipcheck বারবার ফিরে আসা, একঘেয়ে ঘাটতিগুলো খোঁজে — row-level security ছাড়া একটি Supabase টেবিল, কলার যাচাই না করে লেখা একটি route handler, গোপন তথ্য ধারণ করা একটি NEXT_PUBLIC_ ভেরিয়েবল, rate limit বা token cap ছাড়া একটি LLM endpoint।
ব্যবহার একটি কমান্ডেই:
npx ai-shipcheck .
কোনো সাইনআপ নেই, API key নেই, সোর্স আপলোড নেই। এটি Node.js 22 বা নতুন সংস্করণ চায়। অপশনগুলোর মধ্যে আছে --fail-on (যেমন critical), --min-score, --format (json, markdown, sarif), এবং একটি explain সাবকমান্ড যা ব্যাখ্যা করে কেন একটি rule আছে ও কীভাবে ঠিক করা যায়। শুধু findings কখনো কমান্ড ব্যর্থ করে না; threshold অপ্ট-ইন, তাই বিদ্যমান pipeline-এ যোগ করা প্রত্যাহারযোগ্য। Exit code আলাদা করে threshold পূরণ, পূরণ না হওয়া, usage error ও internal error।
কী পরীক্ষা করে
নয়টি বিভাগ আলাদাভাবে স্কোর করা হয়, ৬৩টি rule দ্বারা সমর্থিত, প্রতিটির documentation, একটি vulnerable fixture, একটি secure fixture ও test আছে:
- Security: hardcoded credentials, NEXT_PUBLIC_-এর পেছনে secrets, eval, shell injection, open redirects, permissive CORS, disabled TLS verification, weak crypto।
- Auth: authorization check ছাড়া write routes, unauthenticated server actions, শুধু browser-ভিত্তিক privilege check, unverified webhooks, unsigned JWT, exposed service-role keys।
- Database: row-level security ছাড়া টেবিল, USING (true) policies, interpolation দিয়ে তৈরি SQL, unfiltered deletes, destructive migrations।
- Reliability: গিলে ফেলা error, request path-এ timeout না থাকা, unhandled rejections, backoff ছাড়া retries, type error উপেক্ষা করা build।
- Testing: test নেই, CI-তে test/build/typecheck নেই, committed .only, referencing test ছাড়া server code।
- Observability: error monitoring নেই, শুধু console-এ server logging, React error boundary নেই।
- Performance: unbounded queries, handler-এ synchronous I/O, N+1 shapes, ভারী client imports।
- Accessibility: alt text নেই, non-interactive element-এ click handler, label ছাড়া form control, positive tabIndex।
- AI cost: auth বা rate limit ছাড়া LLM endpoint, token cap নেই, request-নিয়ন্ত্রিত model selection, browser-এ provider keys।
শনাক্ত করা stack-এর মধ্যে আছে Next.js (দুই router), React, Vite, Express, Fastify, Hono, NestJS, Remix, Astro, SvelteKit, Nuxt, Supabase, Firebase, Prisma, Drizzle, Mongoose, Stripe, OpenAI, Anthropic, Vercel AI SDK, LangChain, tRPC এবং সাধারণ test runner। Framework-নির্দিষ্ট rule শুধু framework শনাক্ত হলে চলে, monorepo সহ।
আউটপুট ও ইন্টিগ্রেশন
রিপোর্টে থাকে একটি score, একটি verdict, প্রতি-বিভাগের bar, এবং file, line, rule, severity ও confidence সহ findings। একটি blocker score যাই হোক NOT READY বাধ্য করে। যে বিভাগ মূল্যায়ন করা যায় না সেগুলো বাদ দেওয়া হয়, বিনামূল্যে 100 দেওয়া হয় না। একটি GitHub Action diff-এ inline findings annotate করে, job summary-তে Markdown report লেখে, code scanning-এর জন্য SARIF তৈরি করে, এবং score, verdict, critical-count ও high-count আউটপুট দেয়; এটি একটি committed ফাইলে bundled, তাই tag-pinned workflow ঠিক সেই কোডই চালায়।
বিশ্বাস ও পরিধি
টুলটি কোনো network call করে না এবং telemetry পাঠায় না; scanned repository-র কিছুই execute করা হয় না — ফাইল byte হিসেবে পড়া হয় ও lexically বিশ্লেষণ করা হয়। যেখানে print হতে পারে সেখানে secrets mask করা হয়, scan সীমাবদ্ধ এবং truncated হলে তা জানায়, এবং একটি runtime dependency আছে।
উল্লিখিত সীমাবদ্ধতা স্পষ্ট: শুধু JavaScript ও TypeScript; বিশ্লেষণ semantic নয় lexical, cross-file reasoning বা type information নেই এবং taint tracking একটি value এক hop অনুসরণ করে, তাই এটি চেনে না এমন custom auth wrapper false positive দিতে পারে। Express ও Fastify route auth rule-এ কভার করা নয়, যা সবচেয়ে বড় পরিচিত ঘাটতি বলা হয়েছে। Infrastructure এর কাছে অদৃশ্য, তাই dashboard-এ RLS চালু কিন্তু migration-এ অনুপস্থিত একটি টেবিল unassessed হিসেবে রিপোর্ট হয়, safe নয়। পরিষ্কার রিপোর্ট মানে এটি যে check করতে জানে তা কিছু পায়নি, কোড সঠিক তা নয়।
Rule-গুলো commit SHA দিয়ে pinned ২০টি public repository-র বিরুদ্ধে যাচাই করা হয়েছে; তাদের output triage করে findings ৫,৭১০ থেকে ২,৮১৯-এ নামানো এবং multi-line comment থাকা ফাইলে line number প্রভাবিত করা একটি lexer bug প্রকাশ করা হয়েছে। Documentation-এ rule, CLI contract, configuration, scoring, trust model, limitations, threat model, architecture, rule যোগ করা, releasing ও governance কভার করা হয়েছে। লাইসেন্স MIT।
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.