{"id":30377,"date":"2026-10-05T02:32:45","date_gmt":"2026-10-05T02:32:45","guid":{"rendered":"https:\/\/umang.pk\/2026\/10\/05\/%d8%b9%d9%85%d9%84-%d8%a2%d9%88%d8%b1%d9%88%da%ba-%d8%b3%db%92-%d8%a2%d9%be%d8%b1%db%8c%d8%b4%d9%86%d9%84-%d8%a7%d8%b1%d8%a7%d8%af%db%92-%da%a9%d9%88-%da%a9%db%8c%d8%b3%db%92-%d8%a7%d9%84%da%af-%da%a9\/"},"modified":"2026-10-05T02:32:45","modified_gmt":"2026-10-05T02:32:45","slug":"%d8%b9%d9%85%d9%84-%d8%a2%d9%88%d8%b1%d9%88%da%ba-%d8%b3%db%92-%d8%a2%d9%be%d8%b1%db%8c%d8%b4%d9%86%d9%84-%d8%a7%d8%b1%d8%a7%d8%af%db%92-%da%a9%d9%88-%da%a9%db%8c%d8%b3%db%92-%d8%a7%d9%84%da%af-%da%a9","status":"publish","type":"post","link":"https:\/\/umang.pk\/ur\/2026\/10\/05\/%d8%b9%d9%85%d9%84-%d8%a2%d9%88%d8%b1%d9%88%da%ba-%d8%b3%db%92-%d8%a2%d9%be%d8%b1%db%8c%d8%b4%d9%86%d9%84-%d8%a7%d8%b1%d8%a7%d8%af%db%92-%da%a9%d9%88-%da%a9%db%8c%d8%b3%db%92-%d8%a7%d9%84%da%af-%da%a9\/","title":{"rendered":"\u0639\u0645\u0644 \u0622\u0648\u0631\u0648\u06ba \u0633\u06d2 \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u0627\u0631\u0627\u062f\u06d2 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0627\u0644\u06af \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4"},"content":{"rendered":"\n<div id=\"\">\n<p>\u067e\u0686\u06be\u0644\u06d2 \u0645\u0636\u0645\u0648\u0646 \u0645\u06cc\u06ba\u060c \u0645\u06cc\u06ba \u0646\u06d2 \u062f\u0644\u06cc\u0644 \u062f\u06cc \u062a\u06be\u06cc \u06a9\u06c1 \u0633\u0627\u0641\u0679 \u0648\u06cc\u0626\u0631 \u0622\u0679\u0648\u0645\u06cc\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u0627\u0631\u0627\u062f\u06d2 \u0627\u0648\u0631 \u0639\u0645\u0644 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0627\u06cc\u06a9 \u067e\u0631\u062a \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0648\u062c\u06c1 \u0633\u0627\u062f\u06c1 \u06c1\u06d2\u06d4 \u062a\u0635\u0631\u06cc\u062d \u0645\u06cc\u06ba \u06cc\u06c1 \u0628\u06cc\u0627\u0646 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u06a9\u06c1 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u06a9\u0627 \u06a9\u06cc\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u0627\u0641\u0630 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0648 \u06cc\u06c1 \u0637\u06d2 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u062d\u0627\u0635\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0639\u0644\u06cc\u062d\u062f\u06af\u06cc \u0645\u0641\u06cc\u062f \u0627\u0645\u06a9\u0627\u0646\u0627\u062a \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e\u0631\u06cc\u0679\u0646\u06af \u062a\u0635\u0631\u06cc\u062d \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 \u0633\u06d2 \u0622\u0632\u0627\u062f \u06c1\u06d2\u060c \u062a\u0648 \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631\u0632 \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0633\u0627\u062f\u06c1 \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4 \u0644\u06cc\u06a9\u0646 \u0639\u0645\u0644\u06cc \u0637\u0648\u0631 \u067e\u0631\u060c \u06cc\u06c1 \u06a9\u0686\u06be \u0645\u0634\u06a9\u0644 \u0633\u0648\u0627\u0644\u0627\u062a \u0627\u0679\u06be\u0627\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">Can two different executors achieve the same operational outcome?\n\nHow do we compare them?\n\nWhat must remain stable when the executor changes?\n\nWhich differences are acceptable?\n\nWhat evidence should each executor produce?\n\nHow do we know whether executor independence is real or just theoretical?\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0633\u0648\u0627\u0644\u0627\u062a \u0627\u06c1\u0645 \u06c1\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u062c\u062f\u06cc\u062f \u0633\u0627\u0641\u0679 \u0648\u06cc\u0626\u0631 \u0633\u0633\u0679\u0645\u0632 \u0634\u0627\u0630 \u0648 \u0646\u0627\u062f\u0631 \u06c1\u06cc \u0627\u06cc\u06a9 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 \u06c1\u0645\u06cc\u0634\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0679\u06cc\u0645 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc:<\/p>\n<pre><code class=\"language-text\">CI\/CD platforms\ncloud providers\ndeployment systems\ninfrastructure tools\norchestration engines\nincident automation\nAI agents\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0622\u067e\u0631\u06cc\u0634\u0646 \u06a9\u06d2 \u0633\u06cc\u0645\u0646\u0679\u06a9\u0633 \u0628\u06be\u06cc \u0628\u062f\u0644 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u067e\u06be\u0631 \u0633\u0633\u0679\u0645 \u0648\u0627\u0642\u0639\u06cc \u0642\u06cc\u0627\u0633 \u067e\u0631 \u0645\u0628\u0646\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0627\u0628 \u0628\u06be\u06cc \u0628\u06c1\u062a \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0631\u0627\u062f\u06d2 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0622\u0631\u0679\u06cc\u06a9\u0644 \u0645\u06cc\u06ba\u060c \u0645\u06cc\u06ba \u0622\u067e \u06a9\u0648 \u062f\u06a9\u06be\u0627\u0624\u06ba \u06af\u0627 \u06a9\u06c1 \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u062a\u0635\u0631\u06cc\u062d \u06a9\u0648 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u0627\u0644\u06af \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u060c \u0627\u06cc\u06a9 \u06c1\u06cc \u062a\u0635\u0631\u06cc\u062d \u06a9\u0648 \u062f\u0648 \u0645\u062e\u062a\u0644\u0641 \u0646\u0641\u0627\u0630 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06a9\u06cc\u0633\u06d2 \u0686\u0644\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u060c \u0634\u0648\u0627\u06c1\u062f \u0627\u06a9\u0679\u06be\u06d2 \u06a9\u06cc\u06d2 \u062c\u0627\u0626\u06cc\u06ba\u060c \u0646\u062a\u0627\u0626\u062c \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u060c \u0627\u0648\u0631 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u06a9\u06c1\u0627\u06ba \u0679\u0648\u0679\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0642\u0635\u062f \u06cc\u06c1 \u062b\u0627\u0628\u062a \u06a9\u0631\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0639\u0645\u0644\u062f\u0627\u0631 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06cc\u06a9\u0633\u0627\u06ba \u0628\u0631\u062a\u0627\u0624 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0642\u0635\u062f \u06cc\u06c1 \u0637\u06d2 \u06a9\u0631\u0646\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0648\u06c1\u06cc \u0622\u067e\u0631\u06cc\u0679\u0646\u06af \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-prerequisites\">\u0634\u0631\u0637\u06cc\u06ba<\/h2>\n<p>\u0622\u067e \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u0631\u0627\u0645 \u062f\u06c1 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/p>\n<ul>\n<li>\n<p>\u0633\u0627\u0641\u0679 \u0648\u06cc\u0626\u0631 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631<\/p>\n<\/li>\n<li>\n<p>\u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u0627\u0648\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u0627\u0644\u0679\u0627<\/p>\n<\/li>\n<li>\n<p>TypeScript \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0645\u0644\u062a\u06cc \u062c\u0644\u062a\u06cc \u0632\u0628\u0627\u0646<\/p>\n<\/li>\n<li>\n<p>CI\/CD \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u062a\u0635\u0648\u0631\u0627\u062a<\/p>\n<\/li>\n<li>\n<p>\u0645\u0634\u0627\u06c1\u062f\u06c1<\/p>\n<\/li>\n<li>\n<p>\u0628\u0646\u06cc\u0627\u062f\u06cc \u0679\u06cc\u0633\u0679<\/p>\n<\/li>\n<li>\n<p>\u0622\u067e\u0631\u06cc\u0679\u0646\u06af \u0648\u0636\u0627\u062d\u062a\u06cc\u06ba<\/p>\n<\/li>\n<\/ul>\n<p>Kubernetes\u060c Terraform\u060c \u06cc\u0627 \u06a9\u0633\u06cc \u0645\u062e\u0635\u0648\u0635 \u06a9\u0644\u0627\u0624\u0688 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0645\u062b\u0627\u0644\u06cc\u06ba \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0686\u06be\u0648\u0679\u06cc \u0627\u0648\u0631 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0645\u06cc\u06ba \u06c1\u06cc\u06ba \u0644\u06c1\u0630\u0627 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u0627\u0628 \u0628\u06be\u06cc \u0646\u0638\u0631 \u0622\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<h2 id=\"heading-what-executor-independence-actually-means\">\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u06a9\u0627 \u0648\u0627\u0642\u0639\u06cc \u06a9\u06cc\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2\u06d4<\/h2>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e\u0631\u06cc\u0679\u0646\u06af \u062a\u0635\u0631\u06cc\u062d \u062f\u0631\u0633\u062a \u0631\u06c1\u062a\u06cc \u06c1\u06d2 \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 \u06a9\u0627\u0645 \u06a9\u0648 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 \u0628\u062f\u0644 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<p>\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u0641\u0631\u0636 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0628\u06cc\u0627\u0646 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">Deploy Orders version v42.\n\nConstraints:\n- at least 3 replicas available\n- error rate <= 1%\n- p95 latency <= 400 ms\n- rollback must remain possible\n<\/code><\/pre>\n<p>\u0627\u06cc\u06a9 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0679\u0631 \u0627\u0633 \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u06a9\u06d2 \u0646\u0627\u0641\u0630 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">Kubernetes rolling deployment\n<\/code><\/pre>\n<p>\u062f\u0648\u0633\u0631\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">blue\/green deployment\n<\/code><\/pre>\n<p>\u062f\u0648\u0633\u0631\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">a managed cloud deployment service\n<\/code><\/pre>\n<p>\u0627\u0648\u0631 \u0628\u0639\u062f \u0645\u06cc\u06ba\u060c AI \u0627\u06cc\u062c\u0646\u0679 \u0627\u067e\u0646\u0627 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u0627 \u0645\u0646\u0635\u0648\u0628\u06c1 \u0628\u06be\u06cc \u0628\u0646\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u062a\u0645\u0627\u0645 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631\u0632 \u06a9\u0627 \u0627\u06cc\u06a9 \u06c1\u06cc \u062a\u0635\u0631\u06cc\u062d \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u062a\u0635\u0631\u06cc\u062d \u0627\u067e\u0646\u0627 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u0635\u0648\u0631\u0627\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631:<\/p>\n<pre><code class=\"language-text\">                    \u250c\u2500\u2500 Executor A\nOperational Spec \u2500\u2500\u2500\u253c\u2500\u2500 Executor B\n                    \u251c\u2500\u2500 Executor C\n                    \u2514\u2500\u2500 AI Agent\n<\/code><\/pre>\n<p>\u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0645\u0633\u062a\u062d\u06a9\u0645 \u0631\u06c1\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u06c1\u06d2 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc\u06d4<\/p>\n<h2 id=\"heading-why-executor-independence-matters\">\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u06a9\u06cc\u0648\u06ba \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4<\/h2>\n<p>\u0633\u0627\u0641\u0679 \u0648\u06cc\u0626\u0631 \u0679\u06cc\u0645\u06cc\u06ba \u0645\u0633\u0644\u0633\u0644 \u0679\u0648\u0644\u0632 \u06a9\u06cc \u062c\u06af\u06c1 \u0644\u06d2 \u0631\u06c1\u06cc \u06c1\u06cc\u06ba\u06d4 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0648 \u0627\u0633 \u0633\u06d2 \u0646\u06cc\u0648\u06cc\u06af\u06cc\u0679 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">Jenkins\n\u2193\nGitHub Actions\n\u2193\nArgo CD\n\u2193\nKubernetes operator\n<\/code><\/pre>\n<p>\u062c\u0628 \u06c1\u0631 \u06c1\u062c\u0631\u062a \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">what success means\nwhat constraints matter\nwhat evidence is required\nwhen rollback is allowed\n<\/code><\/pre>\n<p>\u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u0645\u0636\u0645\u0631\u0627\u062a \u067e\u06be\u0631 \u067e\u0686\u06be\u0644\u06d2 \u0679\u0648\u0644\u0632 \u0633\u06d2 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0622\u0632\u0627\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633 \u0633\u06d2 \u06a9\u0626\u06cc \u062e\u0637\u0631\u0627\u062a \u067e\u06cc\u062f\u0627 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p>\u0679\u0648\u0644 \u0644\u0627\u06a9 \u0688\u0627\u0624\u0646: \u0633\u0633\u0679\u0645 \u062a\u06a9\u0646\u06cc\u06a9\u06cc \u0637\u0648\u0631 \u067e\u0631 \u067e\u0648\u0631\u0679\u06cc\u0628\u0644 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0622\u067e\u0631\u06cc\u0679\u0646\u06af \u0631\u0648\u0644\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0648\u0634\u06cc\u062f\u06c1 \u0631\u0648\u06cc\u06d2 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba: \u0646\u0626\u06d2 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631\u0632 \u0627\u0633\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0644\u06cc\u06a9\u0646 \u0627\u06c1\u0645 \u0631\u06a9\u0627\u0648\u0679\u0648\u06ba \u06a9\u0648 \u06a9\u06be\u0648 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0628\u06c1\u0627\u0624: \u0679\u06cc\u0645\u06cc\u06ba \u0628\u0627\u0644\u06a9\u0644 \u0679\u06be\u06cc\u06a9 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 \u067e\u0686\u06be\u0644\u06d2 \u0631\u0648\u06cc\u06d2 \u06a9\u0648 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u062f\u0648\u0628\u0627\u0631\u06c1 \u067e\u06cc\u0634 \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0622\u0688\u0679 \u06af\u06cc\u067e: \u0646\u0626\u06d2 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06cc\u06c1 \u062b\u0627\u0628\u062a \u06a9\u0631\u0646\u0627 \u0645\u0634\u06a9\u0644 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0648\u06c1 \u0627\u06cc\u06a9 \u06c1\u06cc \u0622\u067e\u0631\u06cc\u0679\u0646\u06af \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u06d2 \u06c1\u0648\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u0632\u06cc\u0627\u062f\u06c1 \u0645\u0636\u0628\u0648\u0637 \u06c1\u062c\u0631\u062a \u06a9\u0627 \u06c1\u062f\u0641 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u0639\u0646\u06cc \u06c1\u0645 \u062a\u0635\u0631\u06cc\u062d\u0627\u062a \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0645\u06cc\u06a9\u0627\u0646\u0632\u0645 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-start-with-one-stable-operational-specification\">\u0627\u06cc\u06a9 \u0645\u0633\u062a\u062d\u06a9\u0645 \u0622\u067e\u0631\u06cc\u0679\u0646\u06af \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u06a9\u0648 \u062c\u0627\u0646\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u067e\u06c1\u0644\u06d2 \u06a9\u0633\u06cc \u0645\u0633\u062a\u062d\u06a9\u0645 \u0686\u06cc\u0632 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631:<\/p>\n<pre><code class=\"language-typescript\">type DeploymentSpec = {\n  service: string;\n  version: string;\n  minReplicas: number;\n  maxErrorRate: number;\n  maxP95LatencyMs: number;\n};\n<\/code><\/pre>\n<p>\u067e\u06be\u0631:<\/p>\n<pre><code class=\"language-typescript\">const spec: DeploymentSpec = {\n  service: \"orders\",\n  version: \"v42\",\n  minReplicas: 3,\n  maxErrorRate: 0.01,\n  maxP95LatencyMs: 400,\n};\n<\/code><\/pre>\n<p>\u0627\u0633 \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/p>\n<pre><code class=\"language-text\">kubectl\nhelm\nterraform\nAWS\nAzure\nArgo\nGitHub Actions\n<\/code><\/pre>\n<p>\u0627\u0646 \u06a9\u0627 \u062a\u0639\u0644\u0642 \u067e\u06be\u0627\u0646\u0633\u06cc \u062f\u06cc\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u0633\u06d2 \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0622\u067e\u0631\u06cc\u0679\u0646\u06af \u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-define-an-executor-contract\">\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u0646\u0679\u0631\u06cc\u06a9\u0679 \u06a9\u06cc \u062a\u0639\u0631\u06cc\u0641<\/h2>\n<p>\u0627\u0628 \u06c1\u0645 \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0633\u06d2 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0679\u0631 \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631:<\/p>\n<pre><code class=\"language-typescript\">type ExecutionEvidence = {\n  deployedVersion: string;\n  availableReplicas: number;\n  errorRate: number;\n  p95LatencyMs: number;\n};\n\ninterface DeploymentExecutor {\n  execute(\n    spec: DeploymentSpec\n  ): Promise<executionevidence>;\n}\n<\/executionevidence><\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u0628\u062a\u0627\u062a\u0627 \u06a9\u06c1 \u0627\u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0635\u0631\u0641 \u06a9\u06c1\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">given a specification,\nperform the operation,\nreturn evidence\n<\/code><\/pre>\n<p>\u0627\u0633 \u0645\u0636\u0645\u0648\u0646 \u0645\u06cc\u06ba <strong>\u062b\u0628\u0648\u062a<\/strong> \u0627\u0633 \u0633\u06d2 \u0645\u0631\u0627\u062f \u0648\u06c1 \u0642\u0627\u0628\u0644 \u0645\u0634\u0627\u06c1\u062f\u06c1 \u062d\u0642\u0627\u0626\u0642 \u06c1\u06cc\u06ba \u062c\u0648 \u067e\u06be\u0627\u0646\u0633\u06cc \u06a9\u06d2 \u0628\u0639\u062f \u067e\u06cc\u062f\u0627 \u06cc\u0627 \u062c\u0645\u0639 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u060c \u062c\u0648 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u0627\u0646\u062f\u0627\u0632\u06c1 \u0644\u06af\u0627\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u0648\u0627 \u06c1\u06d2\u06d4 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u0633 \u0645\u06cc\u06ba \u0648\u0631\u0698\u0646 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u062f\u0633\u062a\u06cc\u0627\u0628 \u0646\u0642\u0644\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f\u060c \u067e\u06cc\u0645\u0627\u0626\u0634 \u0634\u062f\u06c1 \u063a\u0644\u0637\u06cc \u06a9\u06cc \u0634\u0631\u062d\u060c \u0627\u0648\u0631 p95 \u062a\u0627\u062e\u06cc\u0631 \u0634\u0627\u0645\u0644 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u062b\u0628\u0648\u062a \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0631\u0627\u0626\u06d2 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e\u0631\u06cc\u0634\u0646 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u062a\u06be\u0627\u06d4 \u06cc\u06c1 \u0648\u06c1 \u0688\u06cc\u0679\u0627 \u06c1\u06d2 \u062c\u0633 \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u062a\u0635\u0631\u06cc\u062d\u0627\u062a \u0633\u06d2 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 \u062c\u0628 \u0644\u0627\u0646\u0686\u0631 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u0645\u06cc\u06ba \u0679\u0648\u0644 \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642 \u0645\u062e\u0635\u0648\u0635 \u062a\u0635\u0648\u0631\u0627\u062a \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u067e\u0648\u0631\u0679\u06cc\u0628\u0644\u0679\u06cc \u0644\u06cc\u06a9 \u06c1\u0648\u0646\u0627 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0648 \u0645\u0632\u06cc\u062f \u0645\u0644\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-typescript\">interface DeploymentExecutor {\n  executeKubectlCommand(\n    namespace: string,\n    manifestPath: string\n  ): Promise<void>;\n}\n<\/void><\/code><\/pre>\n<p>\u0627\u0628 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc Kubernetes \u0641\u0631\u0636 \u06a9\u0631 \u0644\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0639\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0622\u0632\u0627\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-build-a-first-executor\">\u0627\u067e\u0646\u0627 \u067e\u06c1\u0644\u0627 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0628\u0646\u0627\u0646\u0627<\/h2>\n<p>\u0622\u0626\u06cc\u06d2 \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u0627\u0646 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">class RollingDeploymentExecutor\n  implements DeploymentExecutor {\n  async execute(\n    spec: DeploymentSpec\n  ): Promise<executionevidence> {\n    return {\n      deployedVersion: spec.version,\n      availableReplicas:\n        spec.minReplicas,\n      errorRate: 0.004,\n      p95LatencyMs: 280,\n    };\n  }\n}\n<\/executionevidence><\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0627\u06cc\u06a9 \u0631\u0648\u0644\u0646\u06af \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06cc \u0646\u0642\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0637\u0648\u0631 \u067e\u0631\u060c \u0622\u067e \u0627\u0633\u06d2 \u0627\u0633 \u0637\u0631\u062d \u062a\u0635\u0648\u0631 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">starts new replicas\nwaits for health\ngradually replaces old replicas\n<\/code><\/pre>\n<p>\u0644\u06cc\u06a9\u0646 \u0627\u0633 \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0686\u0634\u0645\u06cc \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0639\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0645\u06cc\u06a9\u0627\u0646\u0632\u0645 \u06a9\u0627 \u0645\u0627\u0644\u06a9 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-build-a-second-executor\">\u062f\u0648\u0633\u0631\u0627 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0628\u0646\u0627\u0646\u0627<\/h2>\n<p>\u0627\u0628 \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0644\u0641 \u062d\u06a9\u0645\u062a \u0639\u0645\u0644\u06cc \u0622\u0632\u0645\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">class BlueGreenExecutor\n  implements DeploymentExecutor {\n  async execute(\n    spec: DeploymentSpec\n  ): Promise<executionevidence> {\n    return {\n      deployedVersion: spec.version,\n      availableReplicas:\n        spec.minReplicas + 2,\n      errorRate: 0.003,\n      p95LatencyMs: 260,\n    };\n  }\n}\n<\/executionevidence><\/code><\/pre>\n<p>\u062a\u0635\u0648\u0631\u0627\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631\u060c \u06cc\u06c1 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u0679\u0648 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">create a parallel environment\nverify it\nswitch traffic\nkeep the old environment available\n<\/code><\/pre>\n<p>\u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0639\u0645\u0644 \u0645\u062e\u062a\u0644\u0641 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u062b\u0628\u0648\u062a \u06a9\u06cc \u0634\u06a9\u0644 \u0627\u06cc\u06a9 \u06c1\u06cc \u06c1\u06d2. \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0627 \u0627\u06cc\u06a9 \u06c1\u06cc \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u062a\u0635\u0631\u06cc\u062d\u0627\u062a \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-run-the-same-specification-through-both-executors\">\u062f\u0648\u0646\u0648\u06ba \u0644\u0627\u0646\u0686\u0631\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u0627\u0646\u062f\u0627\u0632 \u0686\u0644\u0627\u0646\u0627<\/h2>\n<p>\u0627\u0628 \u062f\u0648\u0646\u0648\u06ba \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">const rolling =\n  new RollingDeploymentExecutor();\n\nconst blueGreen =\n  new BlueGreenExecutor();\n\nconst rollingEvidence =\n  await rolling.execute(spec);\n\nconst blueGreenEvidence =\n  await blueGreen.execute(spec);\n<\/code><\/pre>\n<p>\u0627\u0633 \u0648\u0642\u062a \u06c1\u0645\u0627\u0631\u06d2 \u067e\u0627\u0633 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">same specification\ndifferent executors\ndifferent internal behavior\ndifferent evidence values\n<\/code><\/pre>\n<p>\u0627\u06c1\u0645 \u0633\u0648\u0627\u0644 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0627\u0646\u06c1\u0648\u06ba \u0646\u06d2 \u0627\u0646\u06c1\u06cc \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u067e\u0631 \u0639\u0645\u0644 \u06a9\u06cc\u0627\u06d4 \u0627\u0646\u06c1\u0648\u06ba \u0646\u06d2 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627\u06d4 \u0633\u0648\u0627\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0627 \u0648\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0627\u06cc\u06a9 \u06c1\u06cc \u0622\u067e\u0631\u06cc\u0679\u0646\u06af \u0645\u0639\u0627\u06c1\u062f\u06d2 \u067e\u0631 \u067e\u0648\u0631\u0627 \u0627\u062a\u0631\u06d2\u061f<\/p>\n<h2 id=\"heading-compare-evidence-not-internal-steps\">\u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0634\u0648\u0627\u06c1\u062f \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1<\/h2>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u06d2 \u0645\u0648\u0627\u0632\u0646\u06c1 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06d2\u06d4<\/p>\n<p>\u0641\u0631\u0636 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">Rolling deployment:\nreplicas = 3\nerror rate = 0.4%\np95 = 280 ms\n\nBlue\/green:\nreplicas = 5\nerror rate = 0.3%\np95 = 260 ms\n<\/code><\/pre>\n<p>\u0627\u0646 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06d2 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u062f\u0648\u0646\u0648\u06ba \u0645\u0648\u0632\u0648\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">same commands\nsame number of steps\nsame topology\nsame timing\nsame infrastructure\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0648 \u0636\u0631\u0648\u0631\u062a \u06c1\u0648 \u06af\u06cc:<\/p>\n<pre><code class=\"language-text\">same operational intent\nsatisfied constraints\nrequired evidence\nacceptable outcome\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u067e\u0631 \u0645\u0628\u0646\u06cc \u067e\u0631\u0648\u06af\u0631\u0627\u0645\u0646\u06af \u06a9\u06cc \u0637\u0631\u062d \u06c1\u06d2\u06d4 \u062f\u0648 \u0646\u0641\u0627\u0630 \u0627\u06cc\u06a9 \u06c1\u06cc \u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0644\u06cc\u06a9\u0646 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0645\u062e\u062a\u0644\u0641 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0628\u0631\u062a\u0627\u0624 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-normalize-executor-specific-evidence\">\u067e\u0631\u0641\u0627\u0631\u0645\u0631 \u0645\u062e\u0635\u0648\u0635 \u0634\u0648\u0627\u06c1\u062f \u06a9\u0648 \u0645\u0639\u0645\u0648\u0644 \u067e\u0631 \u0644\u0627\u0646\u0627<\/h2>\n<p>\u0627\u0635\u0644 \u0639\u0645\u0644\u062f\u0627\u0631 \u0627\u06a9\u062b\u0631 \u062b\u0628\u0648\u062a \u06a9\u06cc \u0645\u062e\u062a\u0644\u0641 \u0634\u06a9\u0644\u06cc\u06ba \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0641\u0631\u0636 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 A \u0648\u0627\u067e\u0633 \u0622\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-json\">{\n  \"readyReplicas\": 3,\n  \"image\": \"orders:v42\",\n  \"latencyP95\": 280\n}\n<\/code><\/pre>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0628\u06cc \u06a9\u06cc \u0648\u0627\u067e\u0633\u06cc:<\/p>\n<pre><code class=\"language-json\">{\n  \"instancesHealthy\": 5,\n  \"releaseVersion\": \"v42\",\n  \"p95Ms\": 260\n}\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0645\u0648\u0627\u0632\u0646\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0627\u0688\u0627\u067e\u0679\u0631 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631:<\/p>\n<pre><code class=\"language-typescript\">type CanonicalEvidence = {\n  version: string;\n  availableReplicas: number;\n  p95LatencyMs: number;\n};\n<\/code><\/pre>\n<p>\u0627\u0688\u0627\u067e\u0679\u0631 A:<\/p>\n<pre><code class=\"language-typescript\">function normalizeRolling(\n  raw: {\n    readyReplicas: number;\n    image: string;\n    latencyP95: number;\n  }\n): CanonicalEvidence {\n  return {\n    version:\n      raw.image.split(\":\")[1],\n    availableReplicas:\n      raw.readyReplicas,\n    p95LatencyMs:\n      raw.latencyP95,\n  };\n}\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u0688\u0627\u067e\u0679\u0631 \u0631\u0648\u0644\u0646\u06af \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06d2 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0648 \u06a9\u06cc\u0646\u0646\u06cc\u06a9\u0644 \u067e\u0631\u0648\u0641 \u0645\u0627\u0688\u0644 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0646\u0642\u0634\u0648\u06ba \u0633\u06d2 \u062a\u0635\u0648\u06cc\u0631\u06cc \u0679\u06cc\u06af\u0632 \u0627\u0648\u0631 \u0648\u0631\u0698\u0646 \u0646\u06a9\u0627\u0644\u06cc\u06ba\u06d4 <code>readyReplicas<\/code> \u06a9\u0648 <code>availableReplicas<\/code>\u0627\u0648\u0631 \u0646\u0627\u0645 \u0628\u062f\u0644 \u062f\u06cc\u06ba\u06d4 <code>latencyP95<\/code> \u06a9\u0648 <code>p95LatencyMs<\/code>.<\/p>\n<p>\u0627\u06c1\u0645 \u0628\u0627\u062a \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0688\u0627\u067e\u0679\u0631 \u0627\u067e\u0646\u06d2 \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u0633\u06cc\u0645\u0646\u0679\u06a9\u0633 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0635\u0631\u0641 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06d2 \u0645\u062e\u0635\u0648\u0635 \u0641\u06cc\u0644\u0688 \u06a9\u06d2 \u0646\u0627\u0645 \u0627\u0648\u0631 \u0627\u0642\u0633\u0627\u0645 \u06a9\u0648 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0646\u0645\u0627\u0626\u0646\u062f\u06af\u06cc \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u062a\u0635\u0631\u06cc\u062d \u067e\u0631\u062a \u0633\u06d2 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0688\u0627\u067e\u0679\u0631 B:<\/p>\n<pre><code class=\"language-typescript\">function normalizeBlueGreen(\n  raw: {\n    instancesHealthy: number;\n    releaseVersion: string;\n    p95Ms: number;\n  }\n): CanonicalEvidence {\n  return {\n    version:\n      raw.releaseVersion,\n    availableReplicas:\n      raw.instancesHealthy,\n    p95LatencyMs:\n      raw.p95Ms,\n  };\n}\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u0688\u0627\u067e\u0679\u0631 \u0646\u06cc\u0644\u06d2\/\u0633\u0628\u0632 \u0644\u0627\u0646\u0686\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06be\u06cc \u06cc\u06c1\u06cc \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062e\u0627\u0645 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u06d2 \u0645\u062e\u062a\u0644\u0641 \u0646\u0627\u0645 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0642\u062f\u0627\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u062a\u0635\u0648\u0631\u0627\u062a \u06a9\u06cc \u0646\u0645\u0627\u0626\u0646\u062f\u06af\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba: \u0648\u0631\u0698\u0646\u060c \u062f\u0633\u062a\u06cc\u0627\u0628 \u06af\u0646\u062c\u0627\u0626\u0634\u060c p95 \u062a\u0627\u062e\u06cc\u0631\u060c \u0648\u063a\u06cc\u0631\u06c1\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u062f\u0648\u0646\u0648\u06ba \u0627\u0688\u0627\u067e\u0679\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0628\u0627\u0642\u06cc \u0633\u0633\u0679\u0645 \u06a9\u0648 \u0644\u0627\u0646\u0686\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062e\u0635\u0648\u0635 \u0638\u0627\u06c1\u0631\u06cc \u0634\u06a9\u0644\u0648\u06ba \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u0631\u06c1\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u06c1\u06cc \u0645\u0639\u06cc\u0627\u0631\u06cc \u0645\u0627\u0688\u0644 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u0648\u0646\u0648\u06ba \u0646\u062a\u0627\u0626\u062c \u06a9\u0627 \u0627\u0646\u062f\u0627\u0632\u06c1 \u0644\u06af\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0628 \u062f\u0648\u0646\u0648\u06ba \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631\u0632 \u0627\u06cc\u06a9 \u06c1\u06cc \u0645\u0627\u0688\u0644 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062b\u0628\u0648\u062a \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0646 \u06a9\u0627 \u0627\u0646\u062f\u0627\u0632\u06c1 \u0644\u06af\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u06c1\u0645 \u062a\u0639\u0645\u06cc\u0631\u0627\u062a\u06cc \u062d\u062f\u0648\u062f \u06c1\u06d2\u06d4 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06d2 \u0645\u062e\u0635\u0648\u0635 \u062b\u0628\u0648\u062a\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06d2 \u067e\u0627\u0633 \u0631\u06a9\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0628\u06a9\u06c1 \u06a9\u06cc\u0646\u0648\u0646\u06cc\u06a9\u0644 \u062b\u0628\u0648\u062a \u062a\u0635\u0631\u06cc\u062d \u06a9\u06cc \u067e\u0631\u062a \u0633\u06d2 \u062a\u0639\u0644\u0642 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-separate-execution-evidence-from-conformance\">\u062a\u0639\u0645\u06cc\u0644 \u0627\u0648\u0631 \u0627\u0644\u06af \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u06a9\u0627 \u062b\u0628\u0648\u062a<\/h2>\n<p>\u0639\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0648 \u062b\u0628\u0648\u062a \u067e\u06cc\u0634 \u06a9\u0631\u0646\u0627 \u06c1\u0648\u06ba \u06af\u06d2\u06d4 \u0648\u0636\u0627\u062d\u062a\u06cc\u06ba \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u062a\u0639\u06cc\u0646 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 \u06a9\u06c1 \u0622\u067e\u0631\u06cc\u0634\u0646 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u062a\u06be\u0627 \u06cc\u0627 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u0641\u0631\u0642 \u0627\u062a\u062d\u0627\u062f \u06a9\u06cc \u062f\u0648\u0633\u0631\u06cc \u0634\u06a9\u0644 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u0628\u0686\u06cc\u06ba:<\/p>\n<pre><code class=\"language-typescript\">return {\n  success: true,\n};\n<\/code><\/pre>\n<p>\u0639\u0627\u0645 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u06a9\u06d2 \u062c\u06be\u0646\u0688\u06d2 \u06c1\u0645\u06cc\u06ba \u0628\u06c1\u062a \u06a9\u0645 \u0628\u062a\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062b\u0628\u0648\u062a \u0648\u0627\u067e\u0633 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">return {\n  deployedVersion: \"v42\",\n  availableReplicas: 3,\n  errorRate: 0.004,\n  p95LatencyMs: 280,\n};\n<\/code><\/pre>\n<p>\u067e\u06be\u0631 \u0627\u0646 \u06a9\u0627 \u0627\u0644\u06af \u0633\u06d2 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">type ConformanceResult = {\n  conformant: boolean;\n  failures: string[];\n};\n\nfunction evaluateConformance(\n  spec: DeploymentSpec,\n  evidence: ExecutionEvidence\n): ConformanceResult {\n  const failures: string[] = [];\n\n  if (\n    evidence.deployedVersion !==\n    spec.version\n  ) {\n    failures.push(\n      \"wrong-version\"\n    );\n  }\n\n  if (\n    evidence.availableReplicas <\n    spec.minReplicas\n  ) {\n    failures.push(\n      \"insufficient-replicas\"\n    );\n  }\n\n  if (\n    evidence.errorRate >\n    spec.maxErrorRate\n  ) {\n    failures.push(\n      \"error-rate-too-high\"\n    );\n  }\n\n  if (\n    evidence.p95LatencyMs >\n    spec.maxP95LatencyMs\n  ) {\n    failures.push(\n      \"latency-too-high\"\n    );\n  }\n\n  return {\n    conformant:\n      failures.length === 0,\n    failures,\n  };\n}\n<\/code><\/pre>\n<p>\u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0648 \u062f\u0648 \u0686\u06cc\u0632\u06cc\u06ba \u062f\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba: \u0627\u06cc\u06a9 \u062a\u0635\u0631\u06cc\u062d \u062c\u0648 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0627 \u0633\u0686 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u060c \u0627\u0648\u0631 \u062b\u0628\u0648\u062a \u062c\u0648 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u062f\u06cc\u06a9\u06be\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<p>\u06c1\u0631 \u0631\u06a9\u0627\u0648\u0679 \u06a9\u0648 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0686\u06cc\u06a9 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u063a\u0644\u0637 \u0648\u0631\u0698\u0646 \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 <code>wrong-version<\/code>\u0628\u06c1\u062a \u06a9\u0645 \u0646\u0642\u0644\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06cc\u06ba\u06d4 <code>insufficient-replicas<\/code>\u062e\u0631\u0627\u0628\u06cc \u06a9\u06cc \u0634\u0631\u062d \u0627\u0648\u0631 \u062a\u0627\u062e\u06cc\u0631 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u0627\u0633\u06cc \u0637\u0631\u062d \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u062e\u0631 \u06a9\u0627\u0631 <code>conformant<\/code> \u06c1\u06d2 <code>true<\/code> \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u062c\u0628 \u06a9\u0648\u0626\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u0631\u06cc\u06a9\u0627\u0631\u0688 \u0646\u06c1 \u06c1\u0648\u06d4 \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06d2 \u0646\u0627\u0645\u0648\u06ba \u06a9\u0648 \u0648\u0627\u067e\u0633 \u06a9\u0631\u0646\u0627 \u0645\u0641\u06cc\u062f \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0648\u0636\u0627\u062d\u062a\u06cc \u06c1\u06d2\u06d4 <em>\u06a9\u06cc\u0648\u06ba<\/em> \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u0639\u0645\u0648\u0645\u06cc\u062a \u067e\u0631 \u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u067e\u0631 \u0639\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4 <code>false<\/code>.<\/p>\n<p>\u0627\u0633 \u0644\u06cc\u06d2 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u0648 \u062d\u062a\u0645\u06cc \u0641\u06cc\u0635\u0644\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062d\u0642\u0627\u0626\u0642 \u06a9\u0648 \u0648\u0627\u067e\u0633 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0627\u0633\u06cc \u0634\u0648\u0627\u06c1\u062f \u06a9\u0627 \u0628\u0639\u062f \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u06af\u0631 \u0648\u0636\u0627\u062d\u062a\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648 \u062c\u0627\u0626\u06cc\u06ba\u060c \u0622\u0688\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0646\u0638\u06cc\u0645 \u0646\u0648 \u06a9\u06d2 \u0641\u06cc\u0635\u0644\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u060c \u06cc\u0627 \u0622\u067e \u0628\u0627\u0644\u06a9\u0644 \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06d2 \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0645\u062a\u0639\u062f\u062f \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631\u0632 \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u0648\u06ba\u06d4<\/p>\n<p>\u0627\u0628:<\/p>\n<pre><code class=\"language-text\">executor \u2192 evidence\n\nspecification + evidence \u2192 conformance\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0639\u0644\u06cc\u062d\u062f\u06af\u06cc \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u06c1\u0645 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-what-counts-as-equivalent-execution\">\u0645\u0633\u0627\u0648\u06cc \u067e\u06be\u0627\u0646\u0633\u06cc \u06a9\u06cc\u0627 \u0633\u0645\u062c\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u061f<\/h2>\n<p>\u06cc\u06c1 \u0636\u0631\u0648\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u06c1 \u062f\u0648 \u0639\u0645\u0644\u062f\u0627\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u062b\u0628\u0648\u062a \u067e\u06cc\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633\u06d2 \u0627\u06cc\u0633\u06d2 \u062b\u0628\u0648\u062a \u067e\u06cc\u0634 \u06a9\u0631\u0646\u06d2 \u0686\u0627\u06c1\u0626\u06cc\u06ba \u062c\u0648 \u0627\u0646\u06c1\u06cc \u0648\u0636\u0627\u062d\u062a\u0648\u06ba \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u06ba\u06d4<\/p>\n<p>\u0641\u0631\u0636 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">Executor A\nreplicas: 3\nerror rate: 0.4%\nlatency: 280 ms\n\nExecutor B\nreplicas: 5\nerror rate: 0.3%\nlatency: 260 ms\n<\/code><\/pre>\n<p>\u062f\u0648\u0646\u0648\u06ba \u067e\u0627\u0633 \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0628 \u0641\u0631\u0636 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u0679\u0648 \u0628\u06cc \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">replicas: 2\nerror rate: 0.3%\nlatency: 260 ms\n<\/code><\/pre>\n<p>\u0627\u06cc\u06a9 \u067e\u0627\u0628\u0646\u062f\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">Executor A:\nconformant\n\nExecutor B:\nnon-conformant\n<\/code><\/pre>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631\u0632 \u0627\u0628 \u0628\u06be\u06cc \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0622\u0632\u0627\u062f \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0646\u06d2 \u0627\u0633 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0641\u0631\u0642 \u0627\u06c1\u0645 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u062f\u0631\u0633\u062a\u06af\u06cc \u06a9\u06cc \u0636\u0645\u0627\u0646\u062a \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u062a\u06cc\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 \u0645\u0633\u062a\u062d\u06a9\u0645 \u0645\u0639\u0627\u06c1\u062f\u06d2 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0646 \u06a9\u06cc \u062f\u0631\u0633\u062a\u06af\u06cc \u06a9\u0627 \u0627\u0646\u062f\u0627\u0632\u06c1 \u0644\u06af\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-where-executor-independence-usually-breaks\">\u062c\u06c1\u0627\u06ba \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u0679\u0648\u0679 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/h2>\n<p>\u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06d2 \u06a9\u0626\u06cc \u0639\u0627\u0645 \u0637\u0631\u06cc\u0642\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<h3 id=\"heading-tool-specific-fields-in-the-specification\">\u062a\u0635\u0631\u06cc\u062d\u0627\u062a \u0645\u06cc\u06ba \u0679\u0648\u0644 \u0645\u062e\u0635\u0648\u0635 \u0641\u06cc\u0644\u0688\u0632<\/h3>\n<p>\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631:<\/p>\n<pre><code class=\"language-yaml\">kubernetesNamespace: production\nhelmChart: orders\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u06cc\u06c1 \u0648\u0627\u0642\u0639\u06cc \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h3 id=\"heading-executor-owned-success-rules\">\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0645\u0644\u06a9\u06cc\u062a \u0645\u06cc\u06ba \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u06a9\u06d2 \u0627\u0635\u0648\u0644<\/h3>\n<p>\u0627\u06af\u0631 \u06c1\u0631 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0627\u067e\u0646\u06cc \u0627\u067e\u0646\u06cc \u062d\u062f \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u062a\u0635\u0631\u06cc\u062d \u0627\u0628 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0628\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u0631\u06c1\u062a\u06cc\u06d4<\/p>\n<h3 id=\"heading-missing-evidence-normalization\">\u0644\u0627\u067e\u062a\u06c1 \u062b\u0628\u0648\u062a \u06a9\u0648 \u0645\u0639\u0645\u0648\u0644 \u0628\u0646\u0627\u0646\u0627<\/h3>\n<p>\u0645\u062e\u062a\u0644\u0641 \u067e\u0631\u06cc\u06a9\u0679\u06cc\u0634\u0646\u0631\u0632 \u0645\u062e\u062a\u0644\u0641 \u062a\u0635\u0648\u0631\u0627\u062a \u06a9\u0648 \u0628\u06d2 \u0646\u0642\u0627\u0628 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0627\u06cc\u06a9 \u0639\u0627\u0645 \u0645\u0627\u0688\u0644 \u06a9\u0627 \u0646\u0642\u0634\u06c1 \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-hidden-preconditions\">\u067e\u0648\u0634\u06cc\u062f\u06c1 \u0634\u0631\u0627\u0626\u0637<\/h3>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u0679\u0648 A \u0645\u0646\u0638\u0648\u0631\u06cc \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0628\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0627\u062c\u0627\u0632\u062a \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u0627\u0631\u0627\u062f\u06d2 \u06a9\u0627 \u062d\u0635\u06c1 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0635\u0648\u0644 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h3 id=\"heading-hidden-recovery-behavior\">\u067e\u0648\u0634\u06cc\u062f\u06c1 \u0628\u062d\u0627\u0644\u06cc \u06a9\u0627 \u0633\u0644\u0648\u06a9<\/h3>\n<p>\u0627\u06cc\u06a9 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u067e\u06cc\u0686\u06be\u06d2 \u06c1\u0679 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u062c\u0628\u06a9\u06c1 \u062f\u0648\u0633\u0631\u0627 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0646\u0627\u06a9\u0627\u0645 \u062d\u0627\u0644\u062a \u06a9\u0648 \u0686\u0644\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0628\u062d\u0627\u0644\u06cc \u06a9\u0627 \u0631\u0648\u06cc\u06c1 \u0627\u06c1\u0645 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0633 \u062a\u0648\u0642\u0639 \u06a9\u0627 \u0627\u0638\u06c1\u0627\u0631 \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h3 id=\"heading-semantic-mismatch\">\u0645\u0637\u0644\u0628 \u0628\u06d2 \u0645\u0645\u0627\u062b\u0644\u062a<\/h3>\n<p>\u062f\u0648\u0646\u0648\u06ba \u0679\u0648\u0644\u0632 \u0627\u06cc\u06a9 \u06c1\u06cc \u0644\u0641\u0638 \u06a9\u0648 \u0645\u062e\u062a\u0644\u0641 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631:<\/p>\n<pre><code class=\"language-text\">healthy\nready\navailable\nrunning\n<\/code><\/pre>\n<p>\u0627\u0646 \u062a\u0635\u0648\u0631\u0627\u062a \u06a9\u0648 \u0648\u0627\u0636\u062d \u062a\u0639\u0631\u06cc\u0641 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u0628\u0635\u0648\u0631\u062a \u062f\u06cc\u06af\u0631\u060c \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u067e\u0648\u0631\u0679\u06cc\u0628\u0644\u0679\u06cc \u0633\u0637\u062d\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-to-test-executor-portability\">\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u067e\u0648\u0631\u0679\u06cc\u0628\u0644\u0679\u06cc \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06cc\u0633\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u0622\u067e \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0648\u0636\u0627\u062d\u062a\u06cc\u06ba \u06a9\u06d2 \u0627\u06cc\u06a9 \u0633\u06cc\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631:<\/p>\n<pre><code class=\"language-typescript\">const cases: DeploymentSpec[] = [\n  {\n    service: \"orders\",\n    version: \"v42\",\n    minReplicas: 3,\n    maxErrorRate: 0.01,\n    maxP95LatencyMs: 400,\n  },\n  {\n    service: \"payments\",\n    version: \"v18\",\n    minReplicas: 5,\n    maxErrorRate: 0.005,\n    maxP95LatencyMs: 250,\n  },\n];\n<\/code><\/pre>\n<p>\u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u0645 \u06c1\u0631 \u062a\u0635\u0631\u06cc\u062d \u06a9\u0648 \u062a\u0645\u0627\u0645 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631\u0632 \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">const executors:\n  DeploymentExecutor[] = [\n    new RollingDeploymentExecutor(),\n    new BlueGreenExecutor(),\n  ];\n\nfor (const spec of cases) {\n  for (const executor of executors) {\n    const evidence =\n      await executor.execute(spec);\n\n    const result =\n      evaluateConformance(\n        spec,\n        evidence\n      );\n\n    console.log({\n      spec: spec.service,\n      executor:\n        executor.constructor.name,\n      result,\n    });\n  }\n}\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u0641\u06cc\u062f \u0645\u06cc\u0679\u0631\u06a9\u0633 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-text\">               Rolling    BlueGreen\nOrders v42     PASS       PASS\nPayments v18   PASS       FAIL\n<\/code><\/pre>\n<p>\u0627\u0628 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u067e\u0648\u0631\u0679\u06cc\u0628\u0644\u0679\u06cc \u06a9\u06d2 \u062b\u0628\u0648\u062a \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u0641\u0631\u0636 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u06a9\u06c1\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u0637\u0627\u0642\u062a\u0648\u0631 \u06c1\u06d2 \u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0679\u0648\u0644\u0632 \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06d2 \u06c1\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0648\u06c1 \u062f\u0648\u0646\u0648\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06cc \u062d\u0645\u0627\u06cc\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-why-this-matters-for-ai-agents\">\u06cc\u06c1 AI \u0627\u06cc\u062c\u0646\u0679\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06cc\u0648\u06ba \u0627\u06c1\u0645 \u06c1\u06d2\u06d4<\/h2>\n<p>AI \u0627\u06cc\u062c\u0646\u0679\u0633 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u06a9\u0648 \u0645\u0632\u06cc\u062f \u062f\u0644\u0686\u0633\u067e \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>AI \u0627\u06cc\u062c\u0646\u0679 \u06c1\u0631 \u0628\u0627\u0631 \u0646\u0626\u06d2 \u0645\u0646\u0635\u0648\u0628\u06d2 \u0628\u0646\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631:<\/p>\n<pre><code class=\"language-text\">Execution 1:\nscale\ndeploy\nverify\nroute\n\nExecution 2:\ncreate parallel environment\nverify\nswitch traffic\n\nExecution 3:\ndeploy canary\nobserve\nexpand rollout\n<\/code><\/pre>\n<p>\u0645\u0646\u0635\u0648\u0628\u06d2 \u0645\u062e\u062a\u0644\u0641 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0639\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0627 \u0631\u0648\u06cc\u06c1 \u0645\u062a\u062d\u0631\u06a9 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0642\u062f\u0645 \u0628\u06c1 \u0642\u062f\u0645 \u0645\u0633\u0627\u0648\u0627\u062a \u06a9\u0648 \u063a\u06cc\u0631 \u062d\u0642\u06cc\u0642\u06cc \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u0627\u06c1\u0645\u060c \u0648\u0636\u0627\u062d\u062a\u06cc\u06ba \u0627\u0628 \u0628\u06be\u06cc \u0645\u0633\u062a\u062d\u06a9\u0645 \u0631\u06c1 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631:<\/p>\n<pre><code class=\"language-text\">Deploy Orders v42.\n\nConstraints:\nreplicas >= 3\nerror rate <= 1%\nlatency <= 400 ms\n\nEvidence:\nrunning version\nreplicas\nerror rate\nlatency\n<\/code><\/pre>\n<p>AI \u0627\u06cc\u062c\u0646\u0679 \u0627\u06cc\u06a9 \u0642\u0627\u0628\u0644 \u0642\u0628\u0648\u0644 \u067e\u0644\u0627\u0646 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06cc \u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u0627\u0633 \u0633\u06d2 \u0645\u0636\u0628\u0648\u0637 \u0633\u0631\u062d\u062f\u06cc\u06ba \u0628\u0646\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-text\">agent autonomy\ninside\noperational constraints\n<\/code><\/pre>\n<p>\u0627\u06cc\u062c\u0646\u0679 \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f \u06a9\u0648 \u0628\u06c1\u062a\u0631 \u0628\u0646\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u062e\u0627\u0645\u0648\u0634\u06cc \u0633\u06d2 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u06a9\u06cc \u0646\u0626\u06cc \u062a\u0639\u0631\u06cc\u0641 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2\u06d4<\/p>\n<h2 id=\"heading-a-small-end-to-end-example\">\u0686\u06be\u0648\u0679\u06cc \u0645\u062b\u0627\u0644 \u0633\u06d2 \u0622\u062e\u0631 \u062a\u06a9<\/h2>\n<p>\u0622\u0626\u06cc\u06d2 \u0679\u06a9\u0691\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u0686\u0634\u0645\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba.<\/p>\n<pre><code class=\"language-typescript\">const spec: DeploymentSpec = {\n  service: \"orders\",\n  version: \"v42\",\n  minReplicas: 3,\n  maxErrorRate: 0.01,\n  maxP95LatencyMs: 400,\n};\n<\/code><\/pre>\n<p>\u062f\u0648 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631\u0632 \u0628\u0646\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-typescript\">const executors:\n  DeploymentExecutor[] = [\n    new RollingDeploymentExecutor(),\n    new BlueGreenExecutor(),\n  ];\n<\/code><\/pre>\n<p>\u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-typescript\">for (const executor of executors) {\n  const evidence =\n    await executor.execute(spec);\n\n  const conformance =\n    evaluateConformance(\n      spec,\n      evidence\n    );\n\n  console.log(\n    executor.constructor.name,\n    evidence,\n    conformance\n  );\n}\n<\/code><\/pre>\n<p>\u0645\u0645\u06a9\u0646\u06c1 \u0646\u062a\u0627\u0626\u062c:<\/p>\n<pre><code class=\"language-text\">RollingDeploymentExecutor\n\nevidence:\nversion = v42\nreplicas = 3\nerror rate = 0.004\np95 = 280\n\nconformance:\nPASS\n<\/code><\/pre>\n<p>\u0627\u0648\u0631:<\/p>\n<pre><code class=\"language-text\">BlueGreenExecutor\n\nevidence:\nversion = v42\nreplicas = 5\nerror rate = 0.003\np95 = 260\n\nconformance:\nPASS\n<\/code><\/pre>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631\u0632 \u0646\u06d2 \u0627\u06cc\u0633\u0627 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627\u060c \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u062a\u06be\u06cc\u06d4 \u0627\u0646\u06c1\u0648\u06ba \u0646\u06d2 \u0627\u0633\u06cc \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u062a\u0635\u0631\u06cc\u062d\u0627\u062a \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u06cc\u0627\u06d4<\/p>\n<p>\u0627\u0628 \u062a\u0635\u0648\u0631 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u062f\u0648\u0633\u0631\u0627 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0679\u0631 \u0631\u067e\u0648\u0631\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">replicas = 2\n<\/code><\/pre>\n<p>\u0646\u062a\u0627\u0626\u062c \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">BlueGreenExecutor\n\nconformance:\nFAIL\n\nreason:\ninsufficient-replicas\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0628\u0627\u0644\u06a9\u0644 \u0648\u06c1\u06cc \u06c1\u06d2 \u062c\u0648 \u06c1\u0645 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba. \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0645\u0633\u062a\u062d\u06a9\u0645 \u0631\u06c1\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0642\u0627\u0628\u0644 \u0639\u0645\u0644 \u067e\u0631\u0648\u06af\u0631\u0627\u0645 \u0628\u062f\u0644 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0634\u0648\u0627\u06c1\u062f \u0633\u06d2 \u067e\u062a\u06c1 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f \u0645\u0639\u0627\u06c1\u062f\u06d2 \u067e\u0631 \u067e\u0648\u0631\u0627 \u0627\u062a\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-a-practical-workflow\">\u0639\u0645\u0644\u06cc \u0648\u0631\u06a9 \u0641\u0644\u0648<\/h2>\n<p>\u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u0646\u0638\u0627\u0645 \u0645\u06cc\u06ba \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u06a9\u0648 \u062c\u0627\u0646\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633 \u062a\u0631\u062a\u06cc\u0628 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-1-pick-one-operation\">1. \u0627\u06cc\u06a9 \u06a9\u0627\u0645 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631:<\/p>\n<pre><code class=\"language-text\">deploy service\nrestore backup\nrotate certificate\nscale worker pool\n<\/code><\/pre>\n<p>\u062a\u0639\u0631\u06cc\u0641:<\/p>\n<pre><code class=\"language-text\">objective\nconstraints\nevidence requirements\nrecovery expectations\n<\/code><\/pre>\n<h3 id=\"heading-3-remove-tool-specific-language\">3. \u0679\u0648\u0644 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0632\u0628\u0627\u0646 \u06a9\u0648 \u06c1\u0679\u0627 \u062f\u06cc\u06ba\u06d4<\/h3>\n<p>\u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">kubectl\nTerraform\nGitHub Actions\nAWS CLI\nspecific resource IDs\n<\/code><\/pre>\n<p>\u0635\u0631\u0641 \u0648\u06c1\u06cc \u0631\u06a9\u06be\u06cc\u06ba \u062c\u0648 \u062f\u0631\u0627\u0635\u0644 \u0622\u067e \u06a9\u06d2 \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u0627\u0631\u0627\u062f\u06d2 \u06a9\u0627 \u062d\u0635\u06c1 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-4-define-an-executor-interface\">4. \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0627\u067e\u0646\u06d2 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u0679\u0648 \u06a9\u0648 \u0630\u0645\u06c1 \u062f\u0627\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">performing the operation\nproducing evidence\n<\/code><\/pre>\n<h3 id=\"heading-5-build-the-first-adapter\">5. \u0627\u067e\u0646\u0627 \u067e\u06c1\u0644\u0627 \u0627\u0688\u0627\u067e\u0679\u0631 \u0628\u0646\u0627\u0646\u0627<\/h3>\n<p>\u0645\u0648\u062c\u0648\u062f\u06c1 \u0646\u0641\u0627\u0630 \u06a9\u0648 \u0644\u067e\u06cc\u0679\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0646\u06c1 \u0644\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-6-build-a-second-executor\">6. \u062f\u0648\u0633\u0631\u0627 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0628\u0646\u0627\u0646\u0627<\/h3>\n<p>\u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">another tool\nanother deployment strategy\na simulator\na test double\nan AI agent\n<\/code><\/pre>\n<h3 id=\"heading-7-normalize-evidence\">7. \u062b\u0628\u0648\u062a \u06a9\u0648 \u0645\u0639\u0645\u0648\u0644 \u0628\u0646\u0627\u0646\u0627<\/h3>\n<p>\u067e\u0631\u06cc\u06a9\u0679\u06cc\u0634\u0646\u0631 \u06a9\u06d2 \u0645\u062e\u0635\u0648\u0635 \u0645\u0634\u0627\u06c1\u062f\u0627\u062a \u06a9\u0648 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u062b\u0628\u0648\u062a \u06a9\u06d2 \u0645\u0627\u0688\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0646\u0642\u0634\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-8-evaluate-conformance-separately\">8. \u0627\u0644\u06af \u0627\u0644\u06af \u0645\u0646\u0627\u0633\u0628\u06cc\u062a \u06a9\u0627 \u0627\u0646\u062f\u0627\u0632\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u0648 \u06cc\u06c1 \u0641\u06cc\u0635\u0644\u06c1 \u0646\u06c1 \u06a9\u0631\u0646\u06d2 \u062f\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u067e\u0627\u0633 \u06a9\u0631\u0646\u0627 \u06c1\u06d2 \u06cc\u0627 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-9-compare-portability\">9. \u067e\u0648\u0631\u0679\u06cc\u0628\u0644\u0679\u06cc \u0645\u0648\u0627\u0632\u0646\u06c1<\/h3>\n<p>\u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631\u0632 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-10-investigate-differences\">10. \u0627\u062e\u062a\u0644\u0627\u0641\u0627\u062a \u06a9\u06cc \u0686\u06be\u0627\u0646 \u0628\u06cc\u0646 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u067e\u0648\u0686\u06be\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">Is the executor wrong?\n\nIs the specification incomplete?\n\nIs evidence missing?\n\nAre the concepts actually equivalent?\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u062e\u062a\u0644\u0627\u0641\u0627\u062a \u0645\u0641\u06cc\u062f \u06c1\u06cc\u06ba\u06d4 \u067e\u0648\u0634\u06cc\u062f\u06c1 \u0628\u0627\u0646\u0688\u0632 \u06a9\u0648 \u0628\u06d2 \u0646\u0642\u0627\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-what-executor-independence-does-not-mean\">\u0627\u06cc\u06af\u0632\u06cc\u06a9\u0679\u0648 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u06a9\u0627 \u06a9\u06cc\u0627 \u0645\u0637\u0644\u0628 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/h2>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u062a\u0645\u0627\u0645 \u0679\u0648\u0644\u0632 \u0642\u0627\u0628\u0644 \u062a\u0628\u0627\u062f\u0644\u06c1 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0633\u06d2 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0645\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-text\">capabilities\ncosts\nlatency\nfailure modes\nsecurity models\noperational complexity\n<\/code><\/pre>\n<p>\u062a\u0635\u0631\u06cc\u062d \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u06a9 \u0648\u0627\u062d\u062f \u0642\u0627\u0628\u0644 \u0639\u0645\u0644 \u067e\u0631\u0648\u06af\u0631\u0627\u0645 \u0641\u0631\u0627\u06c1\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<p>\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631:<\/p>\n<pre><code class=\"language-text\">zero-downtime deployment\n<\/code><\/pre>\n<p>\u062c\u0648 \u0627\u06cc\u06a9 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u067e\u0631 \u0645\u0645\u06a9\u0646 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u062f\u0648\u0633\u0631\u06d2 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u067e\u0631 \u0645\u0645\u06a9\u0646 \u0646\u06c1 \u06c1\u0648\u06d4<\/p>\n<p>\u06cc\u06c1 \u062a\u0635\u0631\u06cc\u062d \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0645\u0641\u06cc\u062f \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06c1\u06d2\u06d4 \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f \u06a9\u0646\u0679\u0631\u06cc\u06a9\u0679 \u06a9\u0648 \u0646\u0627\u0641\u0630 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u0646\u0641\u0627\u0630 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u0648 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 \u0646\u0641\u0627\u0630 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0627\u0628 \u0628\u06be\u06cc \u0627\u06c1\u0645 \u06c1\u06cc\u06ba \u062c\u0628:<\/p>\n<pre><code class=\"language-text\">performance\nsecurity\ncost\nreliability\nmaintainability\n<\/code><\/pre>\n<p>\u0646\u0642\u0637\u06c1 \u062a\u0646\u06af \u06c1\u06d2\u06d4 \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u0633\u06cc\u0645\u0646\u0679\u06a9\u0633 \u06a9\u0648 \u06a9\u0633\u06cc \u0627\u06cc\u06a9 \u062e\u0627\u0635 \u0639\u0645\u0644 \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4<\/p>\n<p>\u0633\u0627\u0641\u0679 \u0648\u06cc\u0626\u0631 \u06a9\u0627 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06be\u0627\u0646\u0686\u06c1 \u0645\u0633\u0644\u0633\u0644 \u0628\u062f\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0679\u0648\u0644\u0632 \u0622\u062a\u06d2 \u062c\u0627\u062a\u06d2 \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u06cc \u062d\u06a9\u0645\u062a \u0639\u0645\u0644\u06cc \u062a\u06cc\u0627\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u06a9\u0644\u0627\u0624\u0688 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u06cc\u062c\u0646\u0679 \u0632\u06cc\u0627\u062f\u06c1 \u0642\u0627\u0628\u0644 \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u0627\u0631\u0627\u062f\u06d2 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06c1\u0631 \u0627\u06cc\u06a9 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0633\u0631\u0627\u06cc\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0633\u0627\u062a\u06be\u060c \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u062e\u0637\u0631\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u0633\u06cc\u0645\u0646\u0679\u06a9 \u06c1\u062c\u0631\u062a \u0628\u0646 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<p>\u062a\u0627\u06c1\u0645\u060c \u0627\u06af\u0631 \u0627\u0631\u0627\u062f\u06d2 \u06a9\u0627 \u0627\u0638\u06c1\u0627\u0631 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2:<\/p>\n<pre><code class=\"language-text\">Operational specification\n          \u2193\n     stable contract\n          \u2193\n   replaceable executor\n<\/code><\/pre>\n<p>\u0627\u0633 \u0633\u06d2 \u0646\u0638\u0627\u0645 \u06a9\u0648 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u06c1\u0645\u06cc\u06ba \u06a9\u0686\u06be \u0627\u0648\u0631 \u0628\u06be\u06cc \u062f\u06cc\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">evidence from multiple executors\nevaluated against the same specification\n<\/code><\/pre>\n<p>\u0627\u0633 \u0648\u0642\u062a \u0622\u067e \u0627\u06af\u0644\u0627 \u0633\u0648\u0627\u0644 \u067e\u0648\u0686\u06be\u0646\u0627 \u0628\u0646\u062f \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<blockquote>\n<p>\u06a9\u06cc\u0627 \u0679\u0648\u0644 \u062e\u062a\u0645 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u061f<\/p>\n<\/blockquote>\n<p>\u0627\u0648\u0631 \u0633\u0648\u0627\u0644 \u067e\u0648\u0686\u06be\u0646\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba:<\/p>\n<blockquote>\n<p>\u06cc\u06c1 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u062a\u0635\u0631\u06cc\u062d\u0627\u062a \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u06a9\u0633 \u062d\u062f \u062a\u06a9 \u06c1\u0648\u0627\u061f<\/p>\n<\/blockquote>\n<p>\u06cc\u06c1 \u0627\u06af\u0644\u0627 \u0645\u0633\u0626\u0644\u06c1 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-conclusion\">\u0646\u062a\u06cc\u062c\u06c1<\/h2>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0622\u0632\u0627\u062f\u06cc \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u06c1 \u062a\u0645\u0627\u0645 \u0679\u0648\u0644\u0632 \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u06d2 \u0627\u0646\u062d\u0631\u0627\u0641 \u0633\u06d2 \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u0627\u0631\u0627\u062f\u06d2 \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a.<\/p>\n<p>\u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">what should happen\nwhat constraints must hold\nwhat evidence is required\n<\/code><\/pre>\n<p>\u0639\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">how to make it happen\n<\/code><\/pre>\n<p>\u067e\u06be\u0627\u0646\u0633\u06cc \u067e\u06be\u0631 \u062b\u0628\u0648\u062a \u067e\u06cc\u0634 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0648\u0631 \u0634\u0648\u0627\u06c1\u062f \u06a9\u0627 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0627\u0646\u062f\u0627\u0632\u06c1 \u0644\u06af\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u06c1\u0645\u06cc\u06ba \u062f\u06cc\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">Specification\n      \u2193\nExecutor A \u2500\u2500\u2192 Evidence A\nExecutor B \u2500\u2500\u2192 Evidence B\n      \u2193\nEvaluation\n<\/code><\/pre>\n<p>\u062f\u0648 \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0645\u062e\u062a\u0644\u0641 \u062d\u06a9\u0645\u062a \u0639\u0645\u0644\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0628\u06be\u06cc \u0627\u06cc\u06a9 \u06c1\u06cc \u0622\u067e\u0631\u06cc\u0679\u0646\u06af \u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u0639\u0627\u0645 \u0622\u0679\u0648\u0645\u06cc\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u0641\u06cc\u062f \u067e\u0631\u0627\u067e\u0631\u0679\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0627\u0648\u0631 \u0628\u06be\u06cc \u0627\u06c1\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u06af\u0631 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0627\u06cc\u06a9 \u062e\u0648\u062f \u0645\u062e\u062a\u0627\u0631 \u0627\u06cc\u062c\u0646\u0679 \u06c1\u06d2 \u062c\u0633 \u06a9\u0627 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0645\u0646\u0635\u0648\u0628\u06c1 \u0627\u06cc\u06a9 \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f \u0633\u06d2 \u062f\u0648\u0633\u0631\u06d2 \u0645\u06cc\u06ba \u0628\u062f\u0644 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u0627\u06c1\u0645\u060c \u062c\u0628 \u0645\u062a\u0639\u062f\u062f \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631\u0632 \u0627\u06cc\u06a9 \u06c1\u06cc \u062a\u0635\u0631\u06cc\u062d \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0646\u0626\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a \u0646\u0627\u06af\u0632\u06cc\u0631 \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<blockquote>\n<p>\u06c1\u0645 \u062a\u0635\u0631\u06cc\u062d\u0627\u062a \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0641\u0679 \u06a9\u06cc \u067e\u06cc\u0645\u0627\u0626\u0634 \u06a9\u06cc\u0633\u06d2 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u061f<\/p>\n<\/blockquote>\n<p>\u0627\u0633\u06cc \u062c\u06af\u06c1 \u0645\u06cc\u06ba \u0622\u06af\u06d2 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u062a\u0627 \u06c1\u0648\u06ba\u06d4<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u067e\u0686\u06be\u0644\u06d2 \u0645\u0636\u0645\u0648\u0646 \u0645\u06cc\u06ba\u060c \u0645\u06cc\u06ba \u0646\u06d2 \u062f\u0644\u06cc\u0644 \u062f\u06cc \u062a\u06be\u06cc \u06a9\u06c1 \u0633\u0627\u0641\u0679 \u0648\u06cc\u0626\u0631 \u0622\u0679\u0648\u0645\u06cc\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u0627\u0631\u0627\u062f\u06d2 \u0627\u0648\u0631 \u0639\u0645\u0644 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0627\u06cc\u06a9 \u067e\u0631\u062a \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0648\u062c\u06c1 \u0633\u0627\u062f\u06c1 \u06c1\u06d2\u06d4 \u062a\u0635\u0631\u06cc\u062d \u0645\u06cc\u06ba \u06cc\u06c1 \u0628\u06cc\u0627\u0646 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u06a9\u06c1 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u06a9\u0627 \u06a9\u06cc\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u0627\u0641\u0630 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0648 \u06cc\u06c1 \u0637\u06d2 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u062d\u0627\u0635\u0644 \u06a9\u06cc\u0627 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-30377","post","type-post","status-publish","format-standard","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts\/30377","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/comments?post=30377"}],"version-history":[{"count":0,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts\/30377\/revisions"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/media?parent=30377"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/categories?post=30377"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/tags?post=30377"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}