Property-Based Testing: AI Code рдореЗрдВ рдЫреБрдкреЗ Security Bugs рдкрдХрдбрд╝реЗрдВ

рд╕рд╛рдЗрдмрд░ рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ AIтАвтАвBy 3L3C

Property-based testing AI-generated code рдореЗрдВ рдЫреБрдкреЗ security bugs рдкрдХрдбрд╝рддреА рд╣реИтАФprototype pollution рдЬреИрд╕реЗ edge cases production рд╕реЗ рдкрд╣рд▓реЗ рд░реЛрдХреЗрдВред

Property-Based TestingAppSecJavaScript SecurityAI DevelopmentTesting StrategyStartup Engineering
Share:

Featured image for Property-Based Testing: AI Code рдореЗрдВ рдЫреБрдкреЗ Security Bugs рдкрдХрдбрд╝реЗрдВ

Property-Based Testing: AI Code рдореЗрдВ рдЫреБрдкреЗ Security Bugs рдкрдХрдбрд╝реЗрдВ

75th test run. рдПрдХ рдРрд╕рд╛ input, рдЬреЛ рдХреЛрдИ рдЗрдВрд╕рд╛рди рд╢рд╛рдпрдж рдХрднреА рд╕реЛрдЪрдХрд░ рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛. рдФрд░ рдлрд┐рд░ рднреА рд╡рд╣реА input рдЖрдкрдХреЗ product рдХреЗ тАЬsecureтАЭ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ code рдХреЛ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ.

рдпрд╣реА property-based testing (PBT) рдХрд╛ рдЕрд╕рд▓реА рдлрд╛рдпрджрд╛ рд╣реИтАФрдпреЗ рдЖрдкрдХреЗ bias рдХреЛ bypass рдХрд░рддрд╛ рд╣реИред рдЦрд╛рд╕рдХрд░ рддрдм, рдЬрдм рдЖрдк AI-generated code рдХреЛ production рдХреЗ рдХрд░реАрдм рд▓рд╛ рд░рд╣реЗ рд╣реЛрдВред тАЬрд╕рд╛рдЗрдмрд░ рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ AIтАЭ рд╕реАрд░реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдпреЗ рдХрд╣рд╛рдиреА рдЗрд╕рд▓рд┐рдП рдЬрд░реВрд░реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ 2025 рдореЗрдВ startup teams рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рддреЗрдЬреА рд╕реЗ ship рдХрд░ рд░рд╣реА рд╣реИрдВ, рдФрд░ security regressions рдЕрдХреНрд╕рд░ рд╡рд╣реАрдВ рдЫреБрдкрддреЗ рд╣реИрдВ: edge cases, weird strings, рдФрд░ assumptions рдХреЗ рдмреАрдЪред

рдпрд╣ рдкреЛрд╕реНрдЯ рдПрдХ real-world pattern рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ: рдПрдХ chat app рдХреЗ localStorage-based API key storage рдореЗрдВ рдПрдХ subtle JavaScript security weakness, рдЬреЛ unit tests рдФрд░ code review рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рдХрд▓ рдЬрд╛рддреАтАФрд▓реЗрдХрд┐рди PBT рдиреЗ рдЙрд╕реЗ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ред рдФрд░ рдЖрдкрдХреЗ startup рдХреЗ рд▓рд┐рдП lessons рдмрд╣реБрдд practical рд╣реИрдВ: requirements рд╕реЗ properties рдирд┐рдХрд╛рд▓рдирд╛, PBT рдХреЛ CI рдореЗрдВ fit рдХрд░рдирд╛, рдФрд░ prototype pollution рдЬреИрд╕реА classes of bugs рдХреЛ early stage рдкрд░ рд░реЛрдХрдирд╛ред

Property-Based Testing startups рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдХрд╛рдо рдХреНрдпреЛрдВ рдХрд░рддреА рд╣реИ?

Answer first: PBT рдЖрдкрдХреЛ тАЬрдХреБрдЫ examples рд╕рд╣реА рд╣реИрдВтАЭ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ тАЬрдмрд╣реБрдд рд╕рд╛рд░реЗ inputs рдкрд░ behavior stable рд╣реИтАЭ рдХрд╛ evidence рджреЗрддреА рд╣реИтАФрдФрд░ security failures рдЕрдХреНрд╕рд░ рд╡рд╣реАрдВ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ examples рдирд╣реАрдВ рдкрд╣реБрдБрдЪрддреЗред

Startup environments рдореЗрдВ рджреЛ рдЪреАрдЬреЗрдВ рд╕рд╛рде-рд╕рд╛рде рд╣реЛрддреА рд╣реИрдВ: (1) рддреЗрдЬ iteration, (2) partial specs. AI tools code рдЬрд▓реНрджреА рдмрдирд╛ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди correctness рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ assumptions рд╡рд╣реА рд░рд╣рддреЗ рд╣реИрдВ рдЬреЛ humans рд░рдЦрддреЗ рд╣реИрдВред PBT рдХрд╛ stance рдЕрд▓рдЧ рд╣реИ: рдореИрдВ рддреБрдореНрд╣рд╛рд░реЗ assumptions рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛; рдореИрдВ inputs generate рдХрд░рдХреЗ рддреБрдореНрд╣реЗрдВ prove рдХрд░рдиреЗ рджреВрдБрдЧрд╛ред

Traditional unit tests рдХрд╛ problem рдпреЗ рдирд╣реАрдВ рдХрд┐ рд╡реЛ useless рд╣реИрдВред problem рдпреЗ рд╣реИ рдХрд┐:

  • рдЖрдк рд╡рд╣реА test рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк imagine рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  • attacker рд╡реЛ input рдЪреБрдирддрд╛ рд╣реИ рдЬреЛ рдЖрдк imagine рдирд╣реАрдВ рдХрд░рддреЗ

PBT рдореЗрдВ рдЖрдк рдПрдХ property рд▓рд┐рдЦрддреЗ рд╣реИрдВтАФрдПрдХ рдРрд╕рд╛ rule рдЬреЛ рд╣рд░ valid input рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПтАФрдФрд░ tool random (рдФрд░ targeted) inputs рд╕реЗ рдЙрд╕реЗ рддреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред Security рдХреЗ рд▓рд┐рдП рдпреЗ mindset рдмрд╣реБрдд natural рд╣реИ: attacker рднреА рддреЛ рдпрд╣реА рдХрд░рддрд╛ рд╣реИред

тАЬAI рдиреЗ рд▓рд┐рдЦрд╛ рд╣реИтАЭ = тАЬsafe рд╣реИтАЭ рд╡рд╛рд▓рд╛ myth

AI-generated code рдЕрдХреНрд╕рд░ clean рджрд┐рдЦрддрд╛ рд╣реИ, idiomatic рднреА рд╣реЛрддрд╛ рд╣реИ, рдФрд░ code review рдореЗрдВ pass рднреА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди security bugs style рдирд╣реАрдВ рд╣реЛрддреЗтАФрд╡реЛ semantics рд╣реЛрддреЗ рд╣реИрдВред Prototype pollution, path traversal, unicode trickery, serialization quirksтАж рдпреЗ рд╕рдм тАЬclean codeтАЭ рдореЗрдВ рднреА рдЖ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП AI in cybersecurity рдХрд╛ practical meaning рд╕рд┐рд░реНрдл threat detection рдирд╣реАрдВ рд╣реИ; AI-assisted secure development рднреА рдЙрддрдирд╛ рд╣реА рдЬрд░реВрд░реА рд╣реИред

The case: API key storage рдореЗрдВ рдПрдХ round-trip property

Answer first: рдЬрдм requirement рдХреЛ property рдореЗрдВ рдмрджрд▓рд╛ рдЧрдпрд╛тАФтАЬрдЬреЛ key save рдХреА, рд╡рд╣реА load рд╣реЛтАЭтАФрддреЛ PBT рдиреЗ рдПрдХ рдРрд╕рд╛ provider name рдирд┐рдХрд╛рд▓рд╛ рдЬрд┐рд╕рдиреЗ JavaScript object system рдХреЗ prototype behavior рдХреЛ trigger рдХрд░ рджрд┐рдпрд╛ред

Scenario simple рд╣реИ: рдПрдХ chat app, рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ LLM providers рдХреЗ рд▓рд┐рдП API keys save рдХрд░рддреА рд╣реИ (рдЬреИрд╕реЗ openai, anthropic) рдФрд░ localStorage рдореЗрдВ store рдХрд░рддреА рд╣реИред Requirement рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ:

  • user key save рдХрд░реЗ
  • app рдЙрд╕реЗ local storage рдореЗрдВ store рдХрд░реЗ
  • рдмрд╛рдж рдореЗрдВ рд╡рд╣реА key retrieve рд╣реЛ

рдЗрд╕реЗ рдПрдХ property рдореЗрдВ рдмрджрд▓рдирд╛ рдмрд╣реБрдд direct рдерд╛:

Round-trip property: рдХрд┐рд╕реА рднреА provider рдФрд░ apiKey рдХреЗ рд▓рд┐рдП, saveApiKey(provider, apiKey) рдХреЗ рдмрд╛рдж loadApiKey(provider) рд╡рд╣реА value return рдХрд░реЗред

рдпреЗ properties startups рдХреЗ рд▓рд┐рдП gold рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐:

  • рдпреЗ requirements рд╕реЗ рд╕реАрдзреЗ рдЬреБрдбрд╝рддреА рд╣реИрдВ
  • рдпреЗ regression рдкрдХрдбрд╝рддреА рд╣реИрдВ (refactor рдХреЗ рдмрд╛рдж рднреА)
  • рдпреЗ тАЬexpected behaviorтАЭ рдХреЛ executable рдмрдирд╛рддреА рд╣реИрдВ

PBT рдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬреЛ unit tests рдирд╣реАрдВ рдХрд░ рдкрд╛рддреЗ?

Fast-check рдЬреИрд╕реА libraries random strings generate рдХрд░рддреА рд╣реИрдВред рдФрд░ community knowledge рдХреА рд╡рдЬрд╣ рд╕реЗ рдпреЗ тАЬknown nasty stringsтАЭ рднреА include рдХрд░рддреА рд╣реИрдВред 100 runs рдореЗрдВ 75th run рдкрд░ provider рдирд┐рдХрд▓рд╛:

  • "__proto__"

рдФрд░ рд╡рд╣реАрдВ property fail рд╣реЛ рдЧрдИред

Unit test authors рдЕрдХреНрд╕рд░ providers рдХреЗ рд▓рд┐рдП openai, anthropic, azure рдЬреИрд╕реЗ realistic values рдЪреБрдирддреЗ рд╣реИрдВред attacker realistic рдирд╣реАрдВ рд╣реЛрддрд╛ред

Failure рдХрд╛ root cause: __proto__ рдФрд░ prototype pollution

Answer first: JavaScript рдореЗрдВ __proto__ рдПрдХ special accessor рд╣реИред Normal object рдкрд░ obj["__proto__"] = ... рдХрд░рдиреЗ рд╕реЗ рдЖрдк plain key set рдирд╣реАрдВ рдХрд░ рд░рд╣реЗтАФрдЖрдк prototype chain рдХреЛ рдЫреЗрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ unexpected behavior рдФрд░ security risk рдмрди рд╕рдХрддрд╛ рд╣реИред

JavaScript prototype-based language рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм:

  • рд╣рд░ object рдХрд╛ рдПрдХ prototype рд╣реЛрддрд╛ рд╣реИ
  • property lookup prototype chain рд╕реЗ рдЧреБрдЬрд░ рд╕рдХрддрд╛ рд╣реИ

__proto__ historically prototype рдХреЛ read/write рдХрд░рдиреЗ рдХрд╛ hook рд░рд╣рд╛ рд╣реИред рддреЛ рдЬрдм рдЖрдк user-controlled string рдХреЛ object key рдХреА рддрд░рд╣ use рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕ string рдореЗрдВ __proto__ рдЖрддрд╛ рд╣реИ, behavior рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ case рдореЗрдВ save рдХрд░рдиреЗ рдкрд░:

  • code рдиреЗ apiKeys[provider] = apiKey рдХрд┐рдпрд╛
  • provider рдерд╛ __proto__
  • engine рдиреЗ рдЗрд╕реЗ normal property write рдХреА рддрд░рд╣ treat рдирд╣реАрдВ рдХрд┐рдпрд╛
  • рдФрд░ load рдкрд░ expected string рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ {} рдЬреИрд╕рд╛ unexpected result рдорд┐рд▓рд╛

Security angle рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ рдХрд┐ prototype manipulation рдХрднреА-рдХрднреА prototype pollution рддрдХ рд▓реЗ рдЬрд╛рддреА рд╣реИтАФрдЬрд╣рд╛рдБ attacker future lookups рдХреЛ poison рдХрд░ рд╕рдХрддрд╛ рд╣реИред рднрд▓реЗ рд╣реА рдЗрд╕ exact flow рдореЗрдВ exploit practical рди рд╣реЛ (object short-lived, stringify behavior, scope рд╕реАрдорд┐рдд), рд▓реЗрдХрд┐рди рдпреЗ рдПрдХ sharp edge рд╣реИ рдЬреЛ future refactor рдореЗрдВ real vulnerability рдмрди рд╕рдХрддреА рд╣реИред Startups рдореЗрдВ refactors fast рд╣реЛрддреЗ рд╣реИрдВтАФрдЗрд╕рд▓рд┐рдП тАЬunexploitable todayтАЭ рдХреЛ ignore рдХрд░рдирд╛ risky рд╣реИред

Snippet-worthy: Security bugs рдЕрдХреНрд╕рд░ exploitability рд╕реЗ рдкрд╣рд▓реЗ correctness bugs рдХреА рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВред PBT рдЖрдкрдХреЛ exploit рдмрдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░реЛрдХ рджреЗрддрд╛ рд╣реИред

Fix: Defensive coding рдЬреЛ requirements рдХреЗ рд╕рд╛рде fit рдмреИрдареЗ

Answer first: рджреЛ рдЫреЛрдЯреЗ changesтАФnull-prototype object рдФрд░ safe key checksтАФuser-controlled keys рдХреЛ safe рдмрдирд╛ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ future refactors рдореЗрдВ рднреА protection рд░рдЦрддреЗ рд╣реИрдВред

1) Safe storage: null-prototype object

Normal {} рдХрд╛ prototype рд╣реЛрддрд╛ рд╣реИред Object.create(null) рдХрд╛ prototype рдирд╣реАрдВ рд╣реЛрддрд╛ред рдпрд╛рдиреА __proto__ рд╕рд┐рд░реНрдл рдПрдХ string key рдмрди рдЬрд╛рддрд╛ рд╣реИтАФspecial рдирд╣реАрдВред

Approach:

  • safe container рдмрдирд╛рдУ
  • existing keys copy рдХрд░реЛ
  • рдлрд┐рд░ assign рдХрд░реЛ

рдЗрд╕ pattern рд╕реЗ prototype pollution рдХрд╛ surface drastically reduce рд╣реЛрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ localStorage + JSON scenarios рдореЗрдВред

2) Safe retrieval: hasOwnProperty via call

Direct apiKeys.hasOwnProperty(provider) рдХрдИ рдмрд╛рд░ fail рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЕрдЧрд░ attacker hasOwnProperty key inject рдХрд░ рджреЗ)ред рдЗрд╕рд▓рд┐рдП robust рддрд░реАрдХрд╛:

  • Object.prototype.hasOwnProperty.call(apiKeys, provider)

рдпреЗ рдЫреЛрдЯреА рдмрд╛рдд рд▓рдЧрддреА рд╣реИ, рд▓реЗрдХрд┐рди production security рдореЗрдВ рдпрд╣реА details matter рдХрд░рддреА рд╣реИрдВред

Startup checklist: рдЗрд╕ рддрд░рд╣ рдХреЗ bugs рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП

  1. User-controlled strings рдХреЛ object keys рдХреА рддрд░рд╣ use рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
    • providers, headers, query params, form fieldsтАФрд╕рдм count рд╣реЛрддреЗ рд╣реИрдВ
  2. Untrusted input рдХреЛ map рдХрд░рдирд╛ рд╣реИ?
    • plain object рдХреА рдЬрдЧрд╣ Map consider рдХрд░реЗрдВ
    • рдпрд╛ null-prototype object
  3. Serialization/Deserialization boundaries рд╣реИрдВ?
    • JSON parse рдХреЗ рдмрд╛рдж validation рдЬрд╝рд░реВрд░реА рд╣реИ
  4. Testing strategy рдореЗрдВ тАЬweird stringsтАЭ intentional рд╣реИрдВ?
    • PBT generators рдореЗрдВ known bad keys (__proto__, constructor, prototype) рдЬрд░реВрд░ include рдХрд░реЗрдВ

AI-driven development workflow рдореЗрдВ PBT рдХреИрд╕реЗ fit рдХрд░реЗрдВ (practical)

Answer first: PBT рдХреЛ тАЬlate-stage QAтАЭ рдордд рдмрдирд╛рдЗрдПред рдЗрд╕реЗ spec-to-test pipeline рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдЗрдПтАФрдЬрд╣рд╛рдБ properties рд╕реАрдзреЗ acceptance criteria рд╕реЗ рдирд┐рдХрд▓рддреА рд╣реИрдВред

Startups рдХреЗ рд▓рд┐рдП workable approach рдореИрдВрдиреЗ рдмрд╛рд░-рдмрд╛рд░ succeed рд╣реЛрддреЗ рджреЗрдЦрд╛ рд╣реИ:

Step 1: Requirements рдХреЛ properties рдореЗрдВ translate рдХрд░реЗрдВ

Example patterns:

  • Round-trip: save тЖТ load = same
  • Idempotency: operation рджреЛ рдмрд╛рд░ рдХрд░рдиреЗ рдкрд░ state same
  • Monotonicity: count рдХрднреА negative рдирд╣реАрдВ
  • Access control: unauthorized user рдХрднреА restricted data рди рджреЗрдЦреЗ

рдЖрдкрдХрд╛ AI assistant (рдпрд╛ team) requirements рд▓рд┐рдЦреЗ, рдФрд░ рд╣рд░ requirement рдХреЗ рд▓рд┐рдП 1-3 properties рдирд┐рдХрд╛рд▓реЗред

Step 2: Generators рдХреЛ domain-aware рдмрдирд╛рдЗрдП

Random strings helpful рд╣реИрдВ, рд▓реЗрдХрд┐рди domain knowledge рдЬреЛрдбрд╝рдиреЗ рд╕реЗ quality рдмрдврд╝рддреА рд╣реИ:

  • provider names: alphanumeric + _ + - + known nasty strings
  • API key: realistic prefixes + length constraints
  • whitespace, unicode, null bytes рдЬреИрд╕реА boundary cases

Tip: рд╢реБрд░реБрдЖрддреА phase рдореЗрдВ numRuns 100 рд░рдЦреЗрдВред Critical modules рдХреЗ рд▓рд┐рдП CI nightly рдореЗрдВ 1,000тАУ10,000 runs рдЪрд▓рд╛рдЗрдПред

Step 3: Shrinking рдХреЛ debugging tool рдорд╛рдирд┐рдП

PBT рдХрд╛ underrated feature shrinking рд╣реИред Failure рдХреЛ minimal counterexample рдореЗрдВ reduce рдХрд░рдХреЗ рдпреЗ рдЖрдкрдХреЛ instantly hint рджреЗрддрд╛ рд╣реИ рдХрд┐ bug value рдореЗрдВ рд╣реИ рдпрд╛ key рдореЗрдВред рдЗрд╕ case рдореЗрдВ apiKey shrink рд╣реЛрдХрд░ spaces рд░рд╣ рдЧрдпрд╛тАФclear signal рдХрд┐ culprit provider name рд╣реИред

Step 4: Security regression suite рдмрдирд╛рдЗрдП

Once found, always found. рдЗрд╕рдХрд╛ рдорддрд▓рдм:

  • PBT рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрд╕ exact counterexample рдХреЛ deterministic unit test рдореЗрдВ pin рдХрд░реЗрдВ
  • рддрд╛рдХрд┐ future refactor рдореЗрдВ failure instantly рджрд┐рдЦреЗ

People also ask: тАЬрдХреНрдпрд╛ PBT performance slow рдХрд░реЗрдЧреА?тАЭ

Answer first: рдереЛрдбрд╝рд╛ overhead рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╣реА рдЬрдЧрд╣ рдФрд░ рд╕рд╣реА frequency рдкрд░ run рдХрд░реЛрдЧреЗ рддреЛ ROI high рд╣реИтАФрдХреНрдпреЛрдВрдХрд┐ рдпреЗ bugs production рд╕реЗ рдкрд╣рд▓реЗ рдкрдХрдбрд╝рддреА рд╣реИред

  • Dev loop: 100 runs, fast feedback
  • PR checks: 200тАУ500 runs for critical functions
  • Nightly: 1,000+ runs + coverage across modules

Most startups over-index on shipping speed and under-index on preventing security debt. PBT рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ balance рджреЗрддрд╛ рд╣реИтАФespecially AI-generated code рдХреЗ рд╕рд╛рдеред

тАЬрд╕рд╛рдЗрдмрд░ рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ AIтАЭ рд╕реАрд░реАрдЬрд╝ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╣ рдХреНрдпреЛрдВ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ

AI security рдХрд╛ рдорддрд▓рдм рд╕рд┐рд░реНрдл SOC automation рдпрд╛ threat intel рдирд╣реАрдВ рд╣реИред Secure engineering practicesтАФрдЬреИрд╕реЗ specification-driven development рдФрд░ property-based testingтАФрднреА рдЙрд╕реА ecosystem рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ AI code generation рддрднреА safe scale рдХрд░реЗрдЧрд╛ рдЬрдм verification practices рднреА upgrade рд╣реЛрдВред

рдЕрдЧрд░ рдЖрдк AI-first startup рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ (рдпрд╛ AI features ship рдХрд░ рд░рд╣реЗ рд╣реИрдВ), рддреЛ рдореИрдВ рдПрдХ strong stance рд▓реВрдБрдЧрд╛: PBT рдХреЛ optional quality improvement рдордд рд╕рдордЭрд┐рдПред рдЗрд╕реЗ security control рдХреА рддрд░рд╣ treat рдХреАрдЬрд┐рдПред

Next step simple рд╣реИ: рдЕрдкрдиреЗ product рдХреЗ рдХрд┐рд╕реА рдПрдХ high-risk flow (auth token storage, billing, permissions, file upload) рдкрд░ рдПрдХ round-trip рдпрд╛ access-control property рд▓рд┐рдЦрд┐рдП рдФрд░ 100 runs рдЪрд▓рд╛рдЗрдПред рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреЛрдИ failure рдирд╣реАрдВ рдорд┐рд▓рддрд╛тАФgreat. рдЕрдЧрд░ рдорд┐рд▓рддрд╛ рд╣реИтАФрдЖрдкрдиреЗ production incident avoid рдХрд░ рд▓рд┐рдпрд╛ред

рдЖрдкрдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдЖрдкрдХреА рдЯреАрдо рдХреЗ codebase рдореЗрдВ рд╕рдмрд╕реЗ тАЬattacker-shaped inputтАЭ рдХреМрди рд╕рд╛ рд╣реИ: user names, JSON payloads, file names, рдпрд╛ provider identifiers?