<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: AFT Group</title>
    <description>The latest articles on DEV Community by AFT Group (aft-group).</description>
    <link>https://dev.to/aft-group</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F14543%2F9dff669d-7f89-4526-b447-f4c4289c030f.png</url>
      <title>DEV Community: AFT Group</title>
      <link>https://dev.to/aft-group</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aft-group"/>
    <language>en</language>
    <item>
      <title>Engineering Vehicle Fraud Checks as Point-of-Sale Transaction Gates</title>
      <dc:creator>James Smith</dc:creator>
      <pubDate>Fri, 28 Aug 2026 19:31:12 +0000</pubDate>
      <link>https://dev.to/aft-group/engineering-vehicle-fraud-checks-as-point-of-sale-transaction-gates-2odl</link>
      <guid>https://dev.to/aft-group/engineering-vehicle-fraud-checks-as-point-of-sale-transaction-gates-2odl</guid>
      <description>&lt;p&gt;A point-of-sale fraud check sits in the transaction path. This article shows how to define its deadline, state model, latency budget, verdict policy, failure behaviour and audit evidence. The check must return before the finance decision or follow an explicit deadline policy.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A check that misses the transaction deadline cannot control the transaction without a defined fallback.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The framework also applies these criteria to the reported MotorVerify design. The product assessment remains limited because the supplied material contains no attributed documentation, engineering testimony, observed traces or performance measurements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Product assessment
&lt;/h2&gt;

&lt;p&gt;The draft reports the following MotorVerify capabilities. The supplied material does not independently confirm them.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Reported capability&lt;/th&gt;
&lt;th&gt;Evidence needed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Guided video capture at the point of sale&lt;/td&gt;
&lt;td&gt;Product documentation, engineering testimony or an observed capture trace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vision models that assess whether a vehicle is real and physically present&lt;/td&gt;
&lt;td&gt;Model description and observed processing trace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Detection of screen replays and printed photographs&lt;/td&gt;
&lt;td&gt;Anti-spoofing documentation and validation evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-references to DVLA and MOT records&lt;/td&gt;
&lt;td&gt;Dependency documentation and observed request traces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Assessment of more than 60 data points&lt;/td&gt;
&lt;td&gt;Representative categories and their roles in the decision&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parallel execution of checks&lt;/td&gt;
&lt;td&gt;Architecture description and component timing trace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Streaming of partial results&lt;/td&gt;
&lt;td&gt;Interface documentation and observed event trace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Timestamped storage of each data point&lt;/td&gt;
&lt;td&gt;Data model, retention policy and audit controls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pass, Refer or Fail verdicts&lt;/td&gt;
&lt;td&gt;Approved definitions, aggregation rules and transaction consequences&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The reported design is plausible as a transaction-gate pattern. The available material does not establish that MotorVerify implements this pattern or meets point-of-sale timing and decision-quality requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  The transaction-gate model
&lt;/h2&gt;

&lt;p&gt;A gate begins when the inspection starts and ends when a transaction outcome becomes available. Its design must cover capture, request validation, queueing, checks, evidence aggregation and verdict publication.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Capture
  |
  v
Validate request -----&amp;gt; Reject invalid request
  |
  v
Queue work
  |
  +----------+-------------+
  |          |             |
Vision   Anti-spoofing   Record lookup
  |          |             |
  +----------+-------------+
             |
       Aggregate evidence
             |
      Pass / Refer / Fail
             |
   Proceed / Review / Stop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The nominal flow is not enough. The design must also define:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which checks can start during capture.&lt;/li&gt;
&lt;li&gt;Which checks require complete capture.&lt;/li&gt;
&lt;li&gt;Dependencies between vision, anti-spoofing and record checks.&lt;/li&gt;
&lt;li&gt;Queue boundaries and maximum queueing time.&lt;/li&gt;
&lt;li&gt;Evidence required for each verdict.&lt;/li&gt;
&lt;li&gt;Whether partial results affect a verdict or only report progress.&lt;/li&gt;
&lt;li&gt;Timeout and retry rules for external requests.&lt;/li&gt;
&lt;li&gt;Treatment of cancellation, duplication, late completion and stale evidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Request states
&lt;/h2&gt;

&lt;p&gt;A compact state model makes terminal outcomes explicit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 +----------------+
                 |     Queued     |
                 +----------------+
                    |          |
               start|          |cancel
                    v          v
              +-----------+  +-----------+
              |  Running  |  | Cancelled |
              +-----------+  +-----------+
                |    |   |
       complete |    |   | deadline expires
                |    |   v
                |    | +-----------+
                |    | | Timed out |
                |    | +-----------+
                |    |
                |    | cancel
                |    v
                | +-----------+
                | | Cancelled |
                | +-----------+
                v
          +-------------+
          |  Completed  |
          +-------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Cancelled&lt;/code&gt;, &lt;code&gt;Timed out&lt;/code&gt; and &lt;code&gt;Completed&lt;/code&gt; are terminal request states unless a documented policy permits another transition. A late component result must not silently move a cancelled or timed-out request into &lt;code&gt;Completed&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Duplicate submissions need stable request identities and idempotency rules. The policy must state whether a duplicate returns the existing state or creates separate work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Latency budget
&lt;/h2&gt;

&lt;p&gt;The point-of-sale deadline must be defined before feasibility can be assessed.&lt;/p&gt;

&lt;p&gt;Let:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;D&lt;/code&gt; be the maximum permitted time from inspection start to transaction decision.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;C&lt;/code&gt; be guided capture time.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Q&lt;/code&gt; be queueing time.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;V&lt;/code&gt; be vision-model processing time.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;S&lt;/code&gt; be anti-spoofing processing time.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;R&lt;/code&gt; be vehicle-record lookup time, including permitted retries.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;A&lt;/code&gt; be aggregation and verdict-publication time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If processing starts after capture and the three checks run concurrently:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Total latency = C + Q + max(V, S, R) + A
Requirement:   Total latency &amp;lt;= D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If checks start during capture, the overlap must be measured rather than assumed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Total latency = elapsed time from capture start
                to publication of the transaction verdict

Requirement: Total latency &amp;lt;= D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Parallel execution can reduce elapsed time. It does not guarantee an earlier verdict. The slowest mandatory check, queueing delay, retries and aggregation policy still determine completion time.&lt;/p&gt;

&lt;p&gt;Streaming partial results improves progress visibility. It reduces decision latency only when the aggregation policy permits a valid verdict before all checks finish.&lt;/p&gt;

&lt;h3&gt;
  
  
  Measurement boundaries
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Boundary&lt;/th&gt;
&lt;th&gt;Starts&lt;/th&gt;
&lt;th&gt;Ends&lt;/th&gt;
&lt;th&gt;Required evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Capture&lt;/td&gt;
&lt;td&gt;Inspection begins&lt;/td&gt;
&lt;td&gt;Required media is accepted&lt;/td&gt;
&lt;td&gt;Timestamped capture trace and completion criteria&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queueing&lt;/td&gt;
&lt;td&gt;Work is submitted&lt;/td&gt;
&lt;td&gt;Processing starts&lt;/td&gt;
&lt;td&gt;Queue-delay percentiles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model processing&lt;/td&gt;
&lt;td&gt;Model work starts&lt;/td&gt;
&lt;td&gt;Required outputs are available&lt;/td&gt;
&lt;td&gt;Per-check latency percentiles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External lookup&lt;/td&gt;
&lt;td&gt;Request is issued&lt;/td&gt;
&lt;td&gt;Accepted response or terminal timeout&lt;/td&gt;
&lt;td&gt;Lookup, timeout and retry measurements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aggregation&lt;/td&gt;
&lt;td&gt;Inputs are available or expire&lt;/td&gt;
&lt;td&gt;Verdict is published&lt;/td&gt;
&lt;td&gt;Aggregation latency and decision trace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;End to end&lt;/td&gt;
&lt;td&gt;Inspection begins&lt;/td&gt;
&lt;td&gt;Transaction outcome is available&lt;/td&gt;
&lt;td&gt;Latency percentiles against &lt;code&gt;D&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  A hypothetical deadline path
&lt;/h2&gt;

&lt;p&gt;Consider a request where vision and anti-spoofing finish but the vehicle-record lookup does not return. This is a design example, not observed MotorVerify behaviour.&lt;/p&gt;

&lt;p&gt;The outcome depends on policies defined before deployment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The retry policy decides whether another lookup attempt is permitted.&lt;/li&gt;
&lt;li&gt;The deadline policy decides whether that retry can fit within &lt;code&gt;D&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The aggregation policy decides whether the completed checks support any verdict.&lt;/li&gt;
&lt;li&gt;The verdict policy maps the available evidence to Pass, Refer, Fail or another permitted outcome.&lt;/li&gt;
&lt;li&gt;The transaction policy decides whether the finance process proceeds, pauses or stops.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the record lookup is mandatory for Pass, the system cannot return Pass because the dependency timed out. It must follow the approved timeout path. A timeout must not become an implicit pass.&lt;/p&gt;

&lt;p&gt;Latency therefore cannot be assessed separately from verdict policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Request trace
&lt;/h2&gt;

&lt;p&gt;A sourced end-to-end trace is required to test the reported architecture. The supplied material does not include one.&lt;/p&gt;

&lt;p&gt;At minimum, the trace should record:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;request_id
inspection_started_at

capture_accepted_at
work_queued_at
processing_started_at

external_request_issued_at
external_retry_issued_at
external_response_or_timeout_at

evidence_aggregated_at
verdict_published_at

transaction_deadline_at
request_state
final_verdict
verdict_reason
transaction_action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Policy decisions attach to specific points in the trace:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;inspection_started_at
  |
  |-- Deadline D begins
  v
capture_accepted_at
  |
  v
work_queued_at
  |
  |-- Queueing limit applies
  v
processing_started_at
  |
  +-- Internal checks
  |
  +-- External request
        |
        |-- Timeout policy applies
        |-- Retry policy applies
        |-- Retry must remain within D
        v
external_response_or_timeout_at
  |
  |-- Aggregation policy selects usable evidence
  |-- Staleness and conflict rules apply
  v
evidence_aggregated_at
  |
  |-- Pass / Refer / Fail definition applies
  v
verdict_published_at
  |
  |-- Transaction policy maps verdict to action
  v
transaction_action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The trace must identify mandatory checks, retry attempts, state transitions and the evidence used for the verdict. Success traces alone are insufficient. Timeout, cancellation, duplicate and late-completion paths also require observation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verdict policy
&lt;/h2&gt;

&lt;p&gt;Pass, Refer and Fail need approved operational definitions. These definitions can specify transaction behaviour without exposing detection thresholds or other sensitive controls.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;Policy to define&lt;/th&gt;
&lt;th&gt;Evidence needed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pass&lt;/td&gt;
&lt;td&gt;Whether the transaction proceeds and which checks must complete&lt;/td&gt;
&lt;td&gt;Aggregation rule and complete decision trace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refer&lt;/td&gt;
&lt;td&gt;Whether the transaction pauses, who reviews it and how the review ends&lt;/td&gt;
&lt;td&gt;Review procedure, routing record and reviewer outcome&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fail&lt;/td&gt;
&lt;td&gt;Whether the transaction stops and what evidence is retained&lt;/td&gt;
&lt;td&gt;Stop policy and retained decision record&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deadline missed&lt;/td&gt;
&lt;td&gt;Whether the request refers, stops or takes another defined path&lt;/td&gt;
&lt;td&gt;Deadline policy and timeout trace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External timeout&lt;/td&gt;
&lt;td&gt;Retry limit, permitted verdicts and degraded behaviour&lt;/td&gt;
&lt;td&gt;Dependency trace and aggregation record&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Duplicate request&lt;/td&gt;
&lt;td&gt;Deduplication and idempotency behaviour&lt;/td&gt;
&lt;td&gt;Request identifiers and state-transition record&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cancellation&lt;/td&gt;
&lt;td&gt;Which work stops and what record remains&lt;/td&gt;
&lt;td&gt;Cancellation trace across each component&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stale result&lt;/td&gt;
&lt;td&gt;Validity period and recheck policy&lt;/td&gt;
&lt;td&gt;Result age and policy decision&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Conflicting evidence&lt;/td&gt;
&lt;td&gt;Precedence, referral or stop rule&lt;/td&gt;
&lt;td&gt;Input evidence and aggregation explanation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer departure&lt;/td&gt;
&lt;td&gt;Whether processing continues and the transaction remains blocked&lt;/td&gt;
&lt;td&gt;Session state and recorded outcome&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Rates derived from these paths require a defined evaluation population and period. False-positive and false-negative rates also require an agreed reference outcome.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure behaviour
&lt;/h2&gt;

&lt;p&gt;Retries can extend the critical path and create duplicate external requests. The design must define retryable failures, maximum attempts, delays between attempts and the outcome after retry capacity is exhausted.&lt;/p&gt;

&lt;p&gt;Cancellation can occur while work is queued, running or waiting on an external dependency. The cancellation policy must state:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whether queued work is removed.&lt;/li&gt;
&lt;li&gt;Whether active internal work stops.&lt;/li&gt;
&lt;li&gt;Whether external calls can be cancelled.&lt;/li&gt;
&lt;li&gt;Whether late results are discarded or retained.&lt;/li&gt;
&lt;li&gt;Whether a late result can alter the terminal request state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Captured media and record responses must represent the same decision point. Validity periods and recheck rules prevent old evidence from being reused without an explicit decision.&lt;/p&gt;

&lt;p&gt;Conflicting evidence requires a deterministic path. The aggregation policy must state whether a conflict produces Refer, Fail or another permitted outcome.&lt;/p&gt;

&lt;h2&gt;
  
  
  Audit evidence
&lt;/h2&gt;

&lt;p&gt;Timestamps support later investigation. They do not establish audit integrity on their own.&lt;/p&gt;

&lt;p&gt;The design needs documented controls for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Retention periods.&lt;/li&gt;
&lt;li&gt;Access authorisation.&lt;/li&gt;
&lt;li&gt;Protection against alteration.&lt;/li&gt;
&lt;li&gt;Links between requests, evidence, retries and verdicts.&lt;/li&gt;
&lt;li&gt;Records of cancellation, late completion and state changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Evidence needed for a product conclusion
&lt;/h2&gt;

&lt;p&gt;A product-specific assessment requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attributed documentation or testimony for each reported capability.&lt;/li&gt;
&lt;li&gt;A point-of-sale deadline supported by dealership workflow evidence.&lt;/li&gt;
&lt;li&gt;End-to-end and component latency percentiles under representative load.&lt;/li&gt;
&lt;li&gt;Observed traces for success, timeout, retry, cancellation, duplication and late completion.&lt;/li&gt;
&lt;li&gt;Approved definitions and transaction consequences for Pass, Refer and Fail.&lt;/li&gt;
&lt;li&gt;Decision-quality measurements using defined populations and reference outcomes.&lt;/li&gt;
&lt;li&gt;Representative categories and decision roles for the reported 60-plus data points.&lt;/li&gt;
&lt;li&gt;Documented retention, access-control and alteration-protection mechanisms.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What this means
&lt;/h2&gt;

&lt;p&gt;A point-of-sale check can gate a transaction only when its deadline, state transitions, mandatory evidence, verdict consequences and failure paths are explicit. This framework defines how to assess that gate, but the supplied material does not support a conclusion about MotorVerify’s implementation or performance.&lt;/p&gt;




&lt;p&gt;Originally published at &lt;a href="https://aftgroup.co.uk/insights/why-vehicle-fraud-checks-belong-at-the-point-of-sale?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=engineering_insights" rel="noopener noreferrer"&gt;AFT Group Engineering Insights&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>vehiclefraud</category>
      <category>pointofsale</category>
      <category>inspectionlatency</category>
    </item>
    <item>
      <title>Planning Gates: Recording Approval, Revision and Final Acceptance</title>
      <dc:creator>James Smith</dc:creator>
      <pubDate>Fri, 28 Aug 2026 19:30:35 +0000</pubDate>
      <link>https://dev.to/aft-group/planning-gates-recording-approval-revision-and-final-acceptance-1h7k</link>
      <guid>https://dev.to/aft-group/planning-gates-recording-approval-revision-and-final-acceptance-1h7k</guid>
      <description>&lt;p&gt;This article shows developers how to record plan approval, material revisions and final acceptance. The gate defines what is approved, who may approve it and which changes require renewed approval.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A recorded plan gives implementation and review a common reference point without claiming that planning alone improves delivery.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Record the plan
&lt;/h2&gt;

&lt;p&gt;A plan captures decisions expected to remain stable during implementation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intended behaviour&lt;/li&gt;
&lt;li&gt;Relevant business rules&lt;/li&gt;
&lt;li&gt;System boundaries&lt;/li&gt;
&lt;li&gt;Failure handling&lt;/li&gt;
&lt;li&gt;Testing strategy&lt;/li&gt;
&lt;li&gt;Evidence required for acceptance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Product and engineering participants agree the outcome and constraints. The implementer decides how to meet them within the repository.&lt;/p&gt;

&lt;p&gt;Without this agreement, reviewers reconstruct more of the requirement from implementation choices. Those choices can anchor the discussion. Replacing an unsuitable approach appears more expensive after implementation than selecting one before work begins.&lt;/p&gt;

&lt;p&gt;The plan should not prescribe incidental code structure. Excess detail takes time to review, becomes stale and restricts implementation decisions that do not affect the agreed outcome.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use an explicit approval gate
&lt;/h2&gt;

&lt;p&gt;The gate requires three decisions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Approve or reject the plan before implementation.&lt;/li&gt;
&lt;li&gt;Continue, pause or seek renewed approval when a material change arises.&lt;/li&gt;
&lt;li&gt;Accept or reject the completed change against the current approved plan.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Rules for each risk band must state:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How the risk band is assigned&lt;/li&gt;
&lt;li&gt;Who is authorised to approve the initial plan&lt;/li&gt;
&lt;li&gt;Who is authorised to approve revisions&lt;/li&gt;
&lt;li&gt;Who is authorised to give final acceptance&lt;/li&gt;
&lt;li&gt;Whether those authorities may be the same role&lt;/li&gt;
&lt;li&gt;Whether independent challenge is required&lt;/li&gt;
&lt;li&gt;Whether implementation pauses during revision&lt;/li&gt;
&lt;li&gt;How unresolved disagreement is escalated&lt;/li&gt;
&lt;li&gt;What evidence final acceptance requires&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plan approval, revision approval and final acceptance are separate decisions. The control model must identify the authorised role for each rather than assume that one approval covers the full lifecycle.&lt;/p&gt;

&lt;p&gt;A risk label without these rules cannot determine which controls apply.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep one lifecycle record
&lt;/h2&gt;

&lt;p&gt;The following synthetic table defines the minimum lifecycle record. It is a proposed template, not evidence that the control has operated.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Required entry&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Identification&lt;/td&gt;
&lt;td&gt;Work item&lt;/td&gt;
&lt;td&gt;Identifier linking the plan to implementation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Planning&lt;/td&gt;
&lt;td&gt;Intended behaviour&lt;/td&gt;
&lt;td&gt;Observable outcome of the change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Planning&lt;/td&gt;
&lt;td&gt;Business rules&lt;/td&gt;
&lt;td&gt;Rules the implementation must preserve&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Planning&lt;/td&gt;
&lt;td&gt;Boundary&lt;/td&gt;
&lt;td&gt;Included and excluded systems or components&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Planning&lt;/td&gt;
&lt;td&gt;Failure handling&lt;/td&gt;
&lt;td&gt;Required behaviour when the operation fails&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Planning&lt;/td&gt;
&lt;td&gt;Acceptance conditions&lt;/td&gt;
&lt;td&gt;Testable conditions for acceptance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Planning&lt;/td&gt;
&lt;td&gt;Validation method&lt;/td&gt;
&lt;td&gt;Tests, checks or inspection used as evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Classification&lt;/td&gt;
&lt;td&gt;Risk band&lt;/td&gt;
&lt;td&gt;Assigned classification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Initial approval&lt;/td&gt;
&lt;td&gt;Plan approver&lt;/td&gt;
&lt;td&gt;Role or person authorised for the assigned classification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Initial approval&lt;/td&gt;
&lt;td&gt;Approval state&lt;/td&gt;
&lt;td&gt;Draft, approved, rejected or superseded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Initial approval&lt;/td&gt;
&lt;td&gt;Approval record&lt;/td&gt;
&lt;td&gt;Decision, date and recorded location&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revision&lt;/td&gt;
&lt;td&gt;Revision trigger&lt;/td&gt;
&lt;td&gt;Material change requiring reassessment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revision&lt;/td&gt;
&lt;td&gt;Revision record&lt;/td&gt;
&lt;td&gt;Changed field, reason, proposer and decision&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revision&lt;/td&gt;
&lt;td&gt;Revision approver&lt;/td&gt;
&lt;td&gt;Role or person authorised to decide the revision&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revision&lt;/td&gt;
&lt;td&gt;Work status&lt;/td&gt;
&lt;td&gt;Continue or pause while approval is pending&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implementation&lt;/td&gt;
&lt;td&gt;Code reference&lt;/td&gt;
&lt;td&gt;Link between the approved plan and implementing code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validation&lt;/td&gt;
&lt;td&gt;Acceptance evidence&lt;/td&gt;
&lt;td&gt;Links to tests, checks and review findings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Final acceptance&lt;/td&gt;
&lt;td&gt;Acceptance authority&lt;/td&gt;
&lt;td&gt;Role or person authorised to accept the completed change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Final acceptance&lt;/td&gt;
&lt;td&gt;Acceptance state&lt;/td&gt;
&lt;td&gt;Pending, accepted or rejected&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Final acceptance&lt;/td&gt;
&lt;td&gt;Accepted plan version&lt;/td&gt;
&lt;td&gt;Exact approved version used for final review&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each approved version should link to the version it supersedes. Missing records should remain visible rather than be inferred from surrounding entries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Define material change
&lt;/h2&gt;

&lt;p&gt;A material change affects the approved intent or the basis on which it was approved. It requires reassessment through the revision fields in the lifecycle record.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Material change&lt;/th&gt;
&lt;th&gt;Normally not material&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Behaviour&lt;/td&gt;
&lt;td&gt;An operation returns a different result for an accepted input&lt;/td&gt;
&lt;td&gt;Internal refactoring preserves the same result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Boundary&lt;/td&gt;
&lt;td&gt;The change writes to a component excluded by the plan&lt;/td&gt;
&lt;td&gt;Code moves between files inside the approved component&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Risk&lt;/td&gt;
&lt;td&gt;New information meets the defined criteria for another risk band&lt;/td&gt;
&lt;td&gt;An implementation detail changes without affecting the assigned criteria&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Acceptance&lt;/td&gt;
&lt;td&gt;A required test is removed, weakened or replaced with different evidence&lt;/td&gt;
&lt;td&gt;The same acceptance condition is tested at a different internal layer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure handling&lt;/td&gt;
&lt;td&gt;A specified rejection becomes a retry or partial success&lt;/td&gt;
&lt;td&gt;Error construction changes while externally observable handling remains unchanged&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These examples define the decision test, not the risk-band rules. Each organisation still needs operational criteria for assigning risk and identifying authorised approvers.&lt;/p&gt;

&lt;p&gt;When a material change arises, update the lifecycle record with the affected field, reason, risk classification, work status, decision and superseded plan version.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review against the plan
&lt;/h2&gt;

&lt;p&gt;An approved plan reduces initial requirement discovery and business-rule interpretation during normal code review. It does not remove them. Review can still uncover mistaken assumptions, unrecognised dependencies or missing requirements.&lt;/p&gt;

&lt;p&gt;Reviewers can ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the implementation preserve the agreed behaviour and invariants?&lt;/li&gt;
&lt;li&gt;Are error paths handled as specified?&lt;/li&gt;
&lt;li&gt;Do tests exercise each acceptance condition?&lt;/li&gt;
&lt;li&gt;Has the change stayed within its declared boundary?&lt;/li&gt;
&lt;li&gt;Is every material departure recorded and approved?&lt;/li&gt;
&lt;li&gt;Does the acceptance evidence refer to the current plan version?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a finding changes behaviour, boundaries, risk or acceptance conditions, the plan requires reassessment. Otherwise, the reviewer can treat it as an implementation issue within the approved scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apply the workflow
&lt;/h2&gt;

&lt;p&gt;This synthetic example demonstrates the mechanics rather than a delivery result:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A plan states that a component must reject an invalid input without writing outside its declared boundary.&lt;/li&gt;
&lt;li&gt;Acceptance requires a test showing the rejection and confirming that no external write occurs.&lt;/li&gt;
&lt;li&gt;An authorised plan approver approves the plan under the assigned risk band.&lt;/li&gt;
&lt;li&gt;During implementation, the engineer finds that the proposed path requires a write to a component excluded by the plan.&lt;/li&gt;
&lt;li&gt;The engineer records the boundary change and requests reassessment.&lt;/li&gt;
&lt;li&gt;Work continues or pauses according to the rule for that risk band.&lt;/li&gt;
&lt;li&gt;The authorised revision approver accepts or rejects the revised boundary.&lt;/li&gt;
&lt;li&gt;Code review checks the implementation and tests against the approved version.&lt;/li&gt;
&lt;li&gt;The authorised acceptance role records the final decision and links it to the supporting evidence.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The external write is material because it changes the declared boundary. A local refactoring that preserves the rejection behaviour, boundary and acceptance test does not require renewed approval.&lt;/p&gt;

&lt;p&gt;The example does not establish whether the three approval decisions should be made by the same person or by separate roles. That choice belongs in the organisation’s authority rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Link repository controls to evidence
&lt;/h2&gt;

&lt;p&gt;Planning cannot compensate for a repository that cannot reproduce or enforce its validation process. Repository controls should support named acceptance evidence rather than form a general checklist.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Repository control&lt;/th&gt;
&lt;th&gt;Acceptance evidence it supports&lt;/th&gt;
&lt;th&gt;Review question&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Runtime pinning&lt;/td&gt;
&lt;td&gt;Test results produced under the declared runtime&lt;/td&gt;
&lt;td&gt;Was validation run with the recorded runtime version?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Continuous integration with observed checks&lt;/td&gt;
&lt;td&gt;Recorded execution of required tests and checks&lt;/td&gt;
&lt;td&gt;Did the required checks run against the accepted change?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-command validation&lt;/td&gt;
&lt;td&gt;A repeatable command covering the stated validation method&lt;/td&gt;
&lt;td&gt;Can a reviewer repeat the required validation from the repository?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Default-branch protection&lt;/td&gt;
&lt;td&gt;Enforcement of required checks before integration&lt;/td&gt;
&lt;td&gt;Could the change enter the default branch without the recorded checks?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A plan should not imply that evidence is repeatable unless the repository provides the required mechanism. The lifecycle record should link the approved plan, implementing code, validation results, review findings and final acceptance decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Define delivery measures
&lt;/h2&gt;

&lt;p&gt;Planned and unplanned work can only be compared when each measure has an operational definition.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Measure&lt;/th&gt;
&lt;th&gt;Proposed definition&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;First-pass result&lt;/td&gt;
&lt;td&gt;Whether the change meets all recorded acceptance conditions at its first formal acceptance review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review finding&lt;/td&gt;
&lt;td&gt;A recorded issue raised during review that requires a response or change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Finding classification&lt;/td&gt;
&lt;td&gt;The defined category and severity assigned under the review process&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Final acceptance result&lt;/td&gt;
&lt;td&gt;Accepted or rejected against the current approved plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Change size&lt;/td&gt;
&lt;td&gt;The organisation’s declared sizing method, applied consistently to both cohorts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Change complexity&lt;/td&gt;
&lt;td&gt;The organisation’s declared complexity method, applied consistently to both cohorts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revision frequency&lt;/td&gt;
&lt;td&gt;Number of approved-plan revisions per change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Approval latency&lt;/td&gt;
&lt;td&gt;Time between submission for approval and the recorded decision&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Missing data&lt;/td&gt;
&lt;td&gt;A required field or record that is absent, unavailable or cannot be linked to the change&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Teams must define sizing, complexity and severity schemes before collecting results. Retrospective classification risks inconsistent comparisons.&lt;/p&gt;

&lt;p&gt;Do not force ambiguous records into a category. Record them as unknown and state why. A missing approval or acceptance record is not evidence of rejection, acceptance or an absence of findings.&lt;/p&gt;

&lt;p&gt;Reports should include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Definitions and reporting period&lt;/li&gt;
&lt;li&gt;Planned and unplanned cohort sizes&lt;/li&gt;
&lt;li&gt;Risk band, repository and scope&lt;/li&gt;
&lt;li&gt;Change size and complexity&lt;/li&gt;
&lt;li&gt;First-pass and final acceptance results&lt;/li&gt;
&lt;li&gt;Finding counts and classifications&lt;/li&gt;
&lt;li&gt;Revision frequency&lt;/li&gt;
&lt;li&gt;Approval latency&lt;/li&gt;
&lt;li&gt;Missing and ambiguous records&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compare work with similar risk, repository and scope characteristics. Where direct matching is impractical, group results by those factors and report size and complexity within each group. This can reduce unsuitable comparisons, but it cannot establish causation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evidence limitations
&lt;/h2&gt;

&lt;p&gt;This article proposes a control model and synthetic record. It does not include a real change record, repository artefacts, operational risk-band rules, defined outcome measures or a source-backed separation of approval roles. No governance, change-management or software-assurance standard has been cited because no supporting source was provided.&lt;/p&gt;

&lt;p&gt;No reported percentage is justified without its source, population, numerator, denominator and definition. The model therefore does not demonstrate that planning improves delivery or makes intent clearer in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means
&lt;/h2&gt;

&lt;p&gt;An approval gate gives implementation and review a recorded reference for intent, revision and acceptance. Claims about delivery impact require complete lifecycle records, repeatable repository checks and consistently defined comparisons between planned and unplanned work.&lt;/p&gt;




&lt;p&gt;Originally published at &lt;a href="https://aftgroup.co.uk/insights/planning-makes-intent-explicit-but-delivery-evidence-remains-limited?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=engineering_insights" rel="noopener noreferrer"&gt;AFT Group Engineering Insights&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>engineeringinsights</category>
      <category>engineeringpractice</category>
      <category>aiassisteddelivery</category>
    </item>
    <item>
      <title>Cross-Family Code Review: An Operational Control Without Comparative Evidence</title>
      <dc:creator>James Smith</dc:creator>
      <pubDate>Fri, 28 Aug 2026 19:30:34 +0000</pubDate>
      <link>https://dev.to/aft-group/cross-family-code-review-an-operational-control-without-comparative-evidence-1e5</link>
      <guid>https://dev.to/aft-group/cross-family-code-review-an-operational-control-without-comparative-evidence-1e5</guid>
      <description>&lt;p&gt;Cross-family code review separates implementation from review. This article sets out what that separation controls, what evidence reviewers need and how to test whether it detects more defects than same-family review. The available evidence does not establish that advantage.&lt;/p&gt;

&lt;p&gt;A model reviewing its own output may preserve assumptions made during implementation. A misunderstood business rule, unsuitable abstraction or missed edge case can survive a second pass. Another model family introduces a different perspective, but difference does not prove independence or correctness.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Cross-family review creates useful disagreement, but its advantage over same-family review remains unproven.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Undated routing snapshot
&lt;/h2&gt;

&lt;p&gt;The documented workflow assigns implementation and code review to different model families.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Risk level&lt;/th&gt;
&lt;th&gt;Implementation&lt;/th&gt;
&lt;th&gt;Code review&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LOW&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.6-sol&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude-sonnet-5&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;STANDARD&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude-sonnet-5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.3-codex&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HIGH&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude-sonnet-5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.6-sol&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CRITICAL_FINANCIAL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude-opus-5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.6-sol&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Other responsibilities are assigned as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;gpt-5.3-codex&lt;/code&gt; challenges plans for LOW, STANDARD and HIGH-risk work.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gpt-5.6-sol&lt;/code&gt; challenges plans for CRITICAL_FINANCIAL work.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gemini-3.1-pro&lt;/code&gt; provides visual review for UI work.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;claude-opus-5&lt;/code&gt; performs verification at every risk level and handles escalation where required.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plan challenge, implementation, code review and verification remain separate controls. Each examines an artefact it did not produce.&lt;/p&gt;

&lt;p&gt;This table has no effective date or model-version context. It should therefore be treated as an undated operational snapshot, not a durable routing specification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evidence available to reviewers
&lt;/h2&gt;

&lt;p&gt;A different model name is not enough. Reviewers need explicit business rules, repository context and reproducible checks to distinguish defects from intentional constraints.&lt;/p&gt;

&lt;p&gt;The described repository readiness checks cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pinned runtimes;&lt;/li&gt;
&lt;li&gt;lockfiles;&lt;/li&gt;
&lt;li&gt;architecture maps;&lt;/li&gt;
&lt;li&gt;testing guidance;&lt;/li&gt;
&lt;li&gt;common failures;&lt;/li&gt;
&lt;li&gt;one-command validation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These controls provide observable conditions against which to assess a change. A failing test, inconsistent business rule or missing validation path gives a firmer basis for a finding than a preference about naming, formatting or architecture.&lt;/p&gt;

&lt;p&gt;The supplied material does not include reviewer prompts, context packages, tool permissions or deterministic validation commands. It also omits the risk taxonomy, classification procedure, fallback behaviour, escalation criteria and severity calibration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits of the reported evidence
&lt;/h2&gt;

&lt;p&gt;The internal measures cover first-pass performance, readiness checks, approved-plan coverage, agent-tool support, default-branch protection and finding severity. Their reported rates are omitted here because the material does not provide the underlying counts, denominators, definitions or collection dates.&lt;/p&gt;

&lt;p&gt;These measures describe parts of the current process. They cannot test whether cross-family review performs better than same-family review.&lt;/p&gt;

&lt;p&gt;The material also lacks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a defined repository and change population;&lt;/li&gt;
&lt;li&gt;inclusion and exclusion criteria;&lt;/li&gt;
&lt;li&gt;finding-level audit records;&lt;/li&gt;
&lt;li&gt;false-positive, disagreement and override rates;&lt;/li&gt;
&lt;li&gt;escaped-defect rates;&lt;/li&gt;
&lt;li&gt;a controlled same-family versus cross-family comparison;&lt;/li&gt;
&lt;li&gt;an end-to-end case linking a change, finding, correction and verification result.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agreement between reviewers does not establish correctness. Model families may also share training patterns. Neither model naming nor reviewer agreement is a substitute for adjudicated outcomes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparative evaluation
&lt;/h2&gt;

&lt;p&gt;The experimental unit should be one eligible code change reviewed under both defined conditions, or assigned to one condition through a recorded allocation procedure. Where the same repository or model contributes multiple changes or review runs, those observations must not be treated as independent.&lt;/p&gt;

&lt;p&gt;Equivalent review conditions require the same:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;code change or matched change criteria;&lt;/li&gt;
&lt;li&gt;business requirements;&lt;/li&gt;
&lt;li&gt;repository state and context;&lt;/li&gt;
&lt;li&gt;reviewer instructions;&lt;/li&gt;
&lt;li&gt;tool permissions;&lt;/li&gt;
&lt;li&gt;deterministic checks;&lt;/li&gt;
&lt;li&gt;time and execution limits;&lt;/li&gt;
&lt;li&gt;finding format;&lt;/li&gt;
&lt;li&gt;adjudication criteria.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Model identity should be removed from finding records before adjudication where practical. Reviewers should not see findings from the other condition before submitting their own.&lt;/p&gt;

&lt;h3&gt;
  
  
  Outcome records
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Outcome&lt;/th&gt;
&lt;th&gt;Required evidence&lt;/th&gt;
&lt;th&gt;Adjudication requirement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Accepted defect&lt;/td&gt;
&lt;td&gt;Finding linked to the change and supporting rule, test or check&lt;/td&gt;
&lt;td&gt;Confirm defect and severity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rejected finding&lt;/td&gt;
&lt;td&gt;Finding linked to the change and contrary evidence&lt;/td&gt;
&lt;td&gt;Record rejection reason&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overridden finding&lt;/td&gt;
&lt;td&gt;Original finding and authorised override evidence&lt;/td&gt;
&lt;td&gt;Record decision owner and rationale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Duplicate finding&lt;/td&gt;
&lt;td&gt;Links to findings describing the same defect&lt;/td&gt;
&lt;td&gt;Identify the retained record&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deterministic-check finding&lt;/td&gt;
&lt;td&gt;Reproducible command and observed result&lt;/td&gt;
&lt;td&gt;Confirm that the check establishes the defect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model-only finding&lt;/td&gt;
&lt;td&gt;Finding without a decisive deterministic check&lt;/td&gt;
&lt;td&gt;Assess against requirements and repository evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Escaped defect&lt;/td&gt;
&lt;td&gt;Later defect record linked to the reviewed change&lt;/td&gt;
&lt;td&gt;Reassess the earlier review outcome&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Severity levels and consequential-defect criteria need to be defined before collection starts. Style preferences and other non-blocking observations should remain separate from correctness defects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Statistical analysis
&lt;/h3&gt;

&lt;p&gt;Sample size should be determined from the comparison being tested, the outcome rate of interest and the required precision. The source material does not provide the inputs needed to calculate it.&lt;/p&gt;

&lt;p&gt;Analysis should account for clustered observations when repositories, changes or models contribute repeated results. Confidence intervals should accompany comparative rates. If multiple model runs are used, the protocol should define how run-to-run variation is recorded and whether results are combined or reported separately.&lt;/p&gt;

&lt;p&gt;The analysis should also distinguish a planned primary comparison from secondary measures. False positives, escaped defects, disagreements and overrides should be reported separately rather than combined into one success rate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means
&lt;/h2&gt;

&lt;p&gt;Cross-family review provides operational separation, but the current material does not establish an advantage over same-family review. A valid comparison requires defined review conditions, auditable adjudication and analysis that accounts for repeated observations.&lt;/p&gt;




&lt;p&gt;Originally published at &lt;a href="https://aftgroup.co.uk/insights/cross-family-code-review-an-operational-control-without-comparative-evidence?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=engineering_insights" rel="noopener noreferrer"&gt;AFT Group Engineering Insights&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>engineeringinsights</category>
      <category>codereview</category>
      <category>aiassisteddelivery</category>
    </item>
    <item>
      <title>Commit-Bound Evidence and Human Acceptance in an Internal Software Factory</title>
      <dc:creator>James Smith</dc:creator>
      <pubDate>Fri, 28 Aug 2026 19:29:56 +0000</pubDate>
      <link>https://dev.to/aft-group/commit-bound-evidence-and-human-acceptance-in-an-internal-software-factory-2nmm</link>
      <guid>https://dev.to/aft-group/commit-bound-evidence-and-human-acceptance-in-an-internal-software-factory-2nmm</guid>
      <description>&lt;p&gt;You will learn how commit-bound evidence, independent review and human acceptance combine to control code changes in an internal software factory. The factory generates code changes, but it does not yet provide an auditable record of why a specific change should be accepted.&lt;/p&gt;

&lt;p&gt;Early coding agents received work without an agreed plan, acceptance gate or independent review. The implementing agent also reported completion. Acceptance depended on that account rather than evidence tied to the resulting commit.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An agent’s account of its own work is not evidence that the resulting software meets the requirement.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The proposed control path combines an approved plan, continuous integration evidence bound to a commit, independent review and a human acceptance decision. The design is clear. The available records do not show the complete path operating.&lt;/p&gt;

&lt;h2&gt;
  
  
  Acceptance workflow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;APPROVE PLAN AND ACCEPTANCE CONDITIONS
    |
    v
IMPLEMENT CANDIDATE
    |
    v
RUN RELEVANT CONTINUOUS INTEGRATION CHECKS
    |
    v
VERIFY EVIDENCE AGAINST REVIEWED COMMIT
    |
    |-- evidence absent, malformed or mismatched --&amp;gt; REJECT
    |
    v
INDEPENDENT REVIEW
    |
    |-- accepted --&amp;gt; HUMAN ACCEPTANCE DECISION
    |
    `-- rejected --&amp;gt; REPAIR
                        |
                        |-- budget remains --&amp;gt; IMPLEMENT CANDIDATE
                        |
                        `-- budget exhausted
                                |
                                v
                    HUMAN JUDGEMENT | REPLAN | CHANGE SCOPE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Automated review does not make the final acceptance decision. An accepted review passes the candidate to a person.&lt;/p&gt;

&lt;h2&gt;
  
  
  Assessment limits
&lt;/h2&gt;

&lt;p&gt;The available material does not define:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The assessment period&lt;/li&gt;
&lt;li&gt;The codebase estate&lt;/li&gt;
&lt;li&gt;Eligibility rules&lt;/li&gt;
&lt;li&gt;The complete record population&lt;/li&gt;
&lt;li&gt;Representative control invocation records&lt;/li&gt;
&lt;li&gt;A complete anonymised delivery trace&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This assessment uses the following classifications:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Classification&lt;/th&gt;
&lt;th&gt;Threshold&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Specified&lt;/td&gt;
&lt;td&gt;Expected behaviour and failure handling are documented&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reported in use&lt;/td&gt;
&lt;td&gt;Records state that the control is used, but do not include representative invocation records&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployed&lt;/td&gt;
&lt;td&gt;Invocation records show the control running within a defined scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operating effectively&lt;/td&gt;
&lt;td&gt;Records show the control running across that scope, handling failures as specified and producing assessable evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Untested hypothesis&lt;/td&gt;
&lt;td&gt;A proposed design choice lacks comparative evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A statement that a control is used does not meet the threshold for deployment. The available material does not support classifying any control as deployed or operating effectively.&lt;/p&gt;

&lt;p&gt;No concrete commit-binding protocol or anonymised control trace is available. Neither can be reconstructed from partial statements without inventing missing events.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mandatory controls and design hypotheses
&lt;/h2&gt;

&lt;p&gt;The acceptance path depends on mandatory controls. Model-family diversity is separate. It is an untested review design choice, not an acceptance control.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Control&lt;/th&gt;
&lt;th&gt;Current assessment&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mandatory&lt;/td&gt;
&lt;td&gt;Approved plan and acceptance conditions&lt;/td&gt;
&lt;td&gt;Reported in use, with non-universal coverage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mandatory&lt;/td&gt;
&lt;td&gt;Continuous integration evidence bound to the reviewed commit&lt;/td&gt;
&lt;td&gt;Specified&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mandatory&lt;/td&gt;
&lt;td&gt;Fail-closed evidence verification&lt;/td&gt;
&lt;td&gt;Specified&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mandatory&lt;/td&gt;
&lt;td&gt;Review separate from implementation&lt;/td&gt;
&lt;td&gt;Reported in use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mandatory&lt;/td&gt;
&lt;td&gt;Human acceptance decision&lt;/td&gt;
&lt;td&gt;Specified in the workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mandatory&lt;/td&gt;
&lt;td&gt;Bounded repair and terminal outcomes&lt;/td&gt;
&lt;td&gt;Specified&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supporting&lt;/td&gt;
&lt;td&gt;Classified review findings&lt;/td&gt;
&lt;td&gt;Reported in use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Untested hypothesis&lt;/td&gt;
&lt;td&gt;Different-model-family review&lt;/td&gt;
&lt;td&gt;No comparative defect-detection evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The records state that implementation and review use an agreed plan. They also state that the reviewing agent uses a different model family from the implementing agent, and that findings are classified by severity and category.&lt;/p&gt;

&lt;p&gt;Invocation records, finding counts and a defined assessment scope are absent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The plan is the contract
&lt;/h2&gt;

&lt;p&gt;Implementation starts from an agreed plan and specification. The plan defines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intended behaviour&lt;/li&gt;
&lt;li&gt;Affected boundaries&lt;/li&gt;
&lt;li&gt;Validation approach&lt;/li&gt;
&lt;li&gt;Acceptance conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Implementation and review use the same plan as their reference.&lt;/p&gt;

&lt;p&gt;A precise plan can still contain an unresolved product decision. If ambiguity reaches implementation, an agent must stop or infer intent. An inferred answer may produce coherent code while addressing the wrong requirement.&lt;/p&gt;

&lt;p&gt;Product clarification therefore happens before implementation. Business rules, exceptional cases and acceptable trade-offs belong in the specification. A person decides before code is written.&lt;/p&gt;

&lt;p&gt;The factory must implement an approved interpretation of the requirement, not merely produce a plausible change. Acceptance conditions must exist before implementation begins. Current records are insufficient to measure how consistently this happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evidence must belong to the reviewed commit
&lt;/h2&gt;

&lt;p&gt;A plan defines the target. It does not prove that a candidate meets it.&lt;/p&gt;

&lt;p&gt;The specified gate requires evidence from the relevant continuous integration checks. Evidence counts only when independently verified and matched to the exact commit under review.&lt;/p&gt;

&lt;p&gt;A test summary copied into an agent response is insufficient. It may:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Refer to another revision&lt;/li&gt;
&lt;li&gt;Omit a failed check&lt;/li&gt;
&lt;li&gt;Describe an environment that cannot be reproduced&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The specified response is fail-closed. Missing, malformed or mismatched evidence causes rejection.&lt;/p&gt;

&lt;p&gt;A concrete commit-binding protocol is not documented. Missing design details include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How the gate obtains the reviewed commit identity&lt;/li&gt;
&lt;li&gt;How evidence carries the tested commit identity&lt;/li&gt;
&lt;li&gt;How the identities are compared&lt;/li&gt;
&lt;li&gt;How the evidence producer is authenticated&lt;/li&gt;
&lt;li&gt;Which systems may produce or store trusted evidence&lt;/li&gt;
&lt;li&gt;How evidence reuse across revisions is prevented&lt;/li&gt;
&lt;li&gt;How verification failures are recorded&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Until these interfaces and trust boundaries are documented, commit binding remains a specified control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Minimum auditable evidence record
&lt;/h2&gt;

&lt;p&gt;An auditable record needs enough data to link the approved requirement, candidate, checks, review and disposition.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Record area&lt;/th&gt;
&lt;th&gt;Minimum fields&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Plan&lt;/td&gt;
&lt;td&gt;Plan identifier, approved version, approval state and acceptance conditions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Candidate&lt;/td&gt;
&lt;td&gt;Repository reference and candidate commit identity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Continuous integration&lt;/td&gt;
&lt;td&gt;Checks invoked, result for each check, tested commit identity and evidence provenance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verification&lt;/td&gt;
&lt;td&gt;Candidate identity, tested identity, match result, verification result and failure reason where applicable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review&lt;/td&gt;
&lt;td&gt;Reviewer identity or type, reviewed commit identity, decision and classified findings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair&lt;/td&gt;
&lt;td&gt;Attempt number, repair-budget state and resulting candidate identity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disposition&lt;/td&gt;
&lt;td&gt;Human decision and final state: accepted, replanned or scope changed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These fields define an assessable record. They do not imply that such a schema is implemented.&lt;/p&gt;

&lt;p&gt;The minimum state transitions are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PLAN_APPROVED
    -&amp;gt; CANDIDATE_CREATED
    -&amp;gt; CHECKS_COMPLETED
    -&amp;gt; EVIDENCE_VERIFIED
    -&amp;gt; REVIEW_COMPLETED
    -&amp;gt; HUMAN_DECISION

EVIDENCE_REJECTED
    -&amp;gt; REPAIR_STARTED
    -&amp;gt; CANDIDATE_CREATED

REVIEW_REJECTED
    -&amp;gt; REPAIR_STARTED
    -&amp;gt; CANDIDATE_CREATED

REJECTED_WITH_BUDGET_EXHAUSTED
    -&amp;gt; HUMAN_JUDGEMENT
    -&amp;gt; REPLANNED | SCOPE_CHANGED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each transition needs a recorded source state, destination state, candidate identity, reason and time. The available material does not show these transition records.&lt;/p&gt;

&lt;h2&gt;
  
  
  Independent review
&lt;/h2&gt;

&lt;p&gt;The reviewing agent uses a different model family from the implementing agent. Rejection requires a stated engineering reason rather than a general expression of confidence.&lt;/p&gt;

&lt;p&gt;Review findings are classified by severity and category. Counts by classification, reviewer type, period and scope are unavailable.&lt;/p&gt;

&lt;p&gt;All recorded review findings in the current phase came from automated reviewers rather than people. However, the records do not define the phase or provide the underlying counts.&lt;/p&gt;

&lt;p&gt;People still:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define intent&lt;/li&gt;
&lt;li&gt;Approve plans&lt;/li&gt;
&lt;li&gt;Resolve ambiguity&lt;/li&gt;
&lt;li&gt;Decide whether a reviewed candidate is acceptable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Different-model-family review may reduce shared assumptions, blind spots or interpretations of the specification. No comparison with same-family review shows that it detects more faults. It therefore remains an untested hypothesis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repair needs an enforceable state machine
&lt;/h2&gt;

&lt;p&gt;A rejected candidate can return to implementation, but it cannot circulate indefinitely. A repair budget provides the intended boundary.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;REJECTED
    |
    |-- budget remains --&amp;gt; IMPLEMENTATION
    |                         |
    |                         v
    |                    EVIDENCE CHECK
    |                         |
    |                         v
    |                       REVIEW
    |
    `-- budget exhausted --&amp;gt; HUMAN JUDGEMENT
                                  |
                                  |-- REPLAN
                                  `-- CHANGE SCOPE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The budget is a safety control, not a measure of engineering effort. Assessing it requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The configured repair limit&lt;/li&gt;
&lt;li&gt;A record of each repair attempt&lt;/li&gt;
&lt;li&gt;The budget state at each rejection&lt;/li&gt;
&lt;li&gt;The terminal state reached after exhaustion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those records are unavailable. Bounded repair remains a specified control.&lt;/p&gt;

&lt;h2&gt;
  
  
  The codebase is part of the control system
&lt;/h2&gt;

&lt;p&gt;A controlled workflow cannot compensate for an environment that agents cannot reproduce.&lt;/p&gt;

&lt;p&gt;Readiness requirements cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Written engineering conventions&lt;/li&gt;
&lt;li&gt;A pinned runtime&lt;/li&gt;
&lt;li&gt;Dependency locking&lt;/li&gt;
&lt;li&gt;An architecture map&lt;/li&gt;
&lt;li&gt;Testing guidance&lt;/li&gt;
&lt;li&gt;Common failure modes&lt;/li&gt;
&lt;li&gt;Consistently invocable checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agent tooling and default-branch protection are reported as the least consistently satisfied areas. The assessed estate, scoring method, dates and underlying counts are not available.&lt;/p&gt;

&lt;p&gt;Where readiness differs between codebases, the same workflow can provide different levels of assurance. Each undocumented convention or environment-specific step pushes a decision back into inference and makes acceptance harder to audit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measurement remains incomplete
&lt;/h2&gt;

&lt;p&gt;Previously reported percentages and the delivery-activity comparison are omitted because they cannot be reproduced from the available records.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Measure&lt;/th&gt;
&lt;th&gt;Reporting status&lt;/th&gt;
&lt;th&gt;Evidence required&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Readiness controls passing&lt;/td&gt;
&lt;td&gt;Not independently reportable&lt;/td&gt;
&lt;td&gt;Checklist, passing count, assessed count, scoring method, measurement date and estate coverage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Approved-plan coverage&lt;/td&gt;
&lt;td&gt;Not independently reportable&lt;/td&gt;
&lt;td&gt;Eligible work-item definition, approved-plan count, eligible count, sample size and period&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;First-pass acceptance&lt;/td&gt;
&lt;td&gt;Not independently reportable&lt;/td&gt;
&lt;td&gt;Accepted candidate count, assessed count, period, eligibility rules and treatment of withdrawn or replanned work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verified-evidence coverage&lt;/td&gt;
&lt;td&gt;Not reportable&lt;/td&gt;
&lt;td&gt;Eligible delivery count, verified-evidence count and documented verification mechanism&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delivery activity change&lt;/td&gt;
&lt;td&gt;Not independently reportable&lt;/td&gt;
&lt;td&gt;Activity unit, phase dates, phase durations and rules establishing comparability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review findings&lt;/td&gt;
&lt;td&gt;Not reportable by classification&lt;/td&gt;
&lt;td&gt;Counts by severity, category and reviewer type, with period and scope&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;First-pass acceptance means acceptance through the configured evidence and review path. It does not mean code perfection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation priorities
&lt;/h2&gt;

&lt;p&gt;The work should proceed in dependency order.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Define assessment scope&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set the assessment period.&lt;/li&gt;
&lt;li&gt;Define the codebase estate and eligible work.&lt;/li&gt;
&lt;li&gt;Identify the complete record population.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Standardise plans&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make approved plans and acceptance conditions universal.&lt;/li&gt;
&lt;li&gt;Record product clarifications as durable decisions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Specify commit-bound evidence&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define the evidence fields.&lt;/li&gt;
&lt;li&gt;Document producer authentication.&lt;/li&gt;
&lt;li&gt;Document identity matching, storage and trust boundaries.&lt;/li&gt;
&lt;li&gt;Define rejection behaviour for absent, malformed, stale or mismatched evidence.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Record control execution&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Store verification results and failures.&lt;/li&gt;
&lt;li&gt;Store review decisions and classified findings.&lt;/li&gt;
&lt;li&gt;Retain the candidate identity at every stage.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Enforce bounded repair&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Record the configured limit.&lt;/li&gt;
&lt;li&gt;Record each repair transition.&lt;/li&gt;
&lt;li&gt;Ensure budget exhaustion produces a recorded terminal outcome.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Produce an end-to-end trace&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use an existing delivery record.&lt;/li&gt;
&lt;li&gt;Do not reconstruct missing events.&lt;/li&gt;
&lt;li&gt;Include plan approval, commit identity, continuous integration provenance, verification, review, repair attempts and final disposition.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Establish reporting&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define metric numerators, denominators, periods, eligibility rules and exclusions.&lt;/li&gt;
&lt;li&gt;Report verified-evidence coverage and review findings only when the required records exist.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Address codebase readiness&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strengthen agent tooling.&lt;/li&gt;
&lt;li&gt;Strengthen default-branch protection.&lt;/li&gt;
&lt;li&gt;Record the assessment method and codebase coverage.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What this means
&lt;/h2&gt;

&lt;p&gt;The acceptance design has the required control points, but the records do not show the complete path operating against a specific commit. The immediate task is to define the evidence protocol, record state transitions and produce an end-to-end trace without reconstructing missing events.&lt;/p&gt;




&lt;p&gt;Originally published at &lt;a href="https://aftgroup.co.uk/insights/building-trustworthy-acceptance-into-an-internal-software-factory?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=engineering_insights" rel="noopener noreferrer"&gt;AFT Group Engineering Insights&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>engineeringinsights</category>
      <category>softwarefactory</category>
      <category>aiassisteddelivery</category>
    </item>
    <item>
      <title>Why First-Pass Rate Does Not Measure Engineering Delivery</title>
      <dc:creator>James Smith</dc:creator>
      <pubDate>Fri, 28 Aug 2026 19:29:55 +0000</pubDate>
      <link>https://dev.to/aft-group/why-a-917-first-pass-rate-does-not-measure-engineering-delivery-33p2</link>
      <guid>https://dev.to/aft-group/why-a-917-first-pass-rate-does-not-measure-engineering-delivery-33p2</guid>
      <description>&lt;p&gt;This article explains why a 91.7% first-pass rate does not measure engineering delivery, which definitions and records are missing, and how lifecycle events can make gate, repair and delivery states queryable.&lt;/p&gt;

&lt;p&gt;The reported 91.7% first-pass rate describes performance at one gate. The gate definition, denominator and source are unavailable.&lt;/p&gt;

&lt;p&gt;The same material reports zero second passes, zero repair cycles and delivery of 52.2% of started work. These figures may use different boundaries or definitions. Without the underlying records, they cannot be reconciled or treated as substantive evidence.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A first-pass result measures one gate. It does not measure delivery.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A change can pass a gate on its first recorded attempt and still await later checks, be superseded or fail to meet the definition of delivered.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evidence limitations
&lt;/h2&gt;

&lt;p&gt;The original report, dashboard or dataset has not been supplied. The figures cannot be cited or independently verified.&lt;/p&gt;

&lt;p&gt;The available material also omits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Raw numerators and denominators&lt;/li&gt;
&lt;li&gt;Cohort dates and observation windows&lt;/li&gt;
&lt;li&gt;Exclusion and ageing rules&lt;/li&gt;
&lt;li&gt;Definitions of started work, attempt, pass, repair cycle and delivered&lt;/li&gt;
&lt;li&gt;The position of review findings relative to the measured gate&lt;/li&gt;
&lt;li&gt;Breakdowns by risk class, repository, change type or work age&lt;/li&gt;
&lt;li&gt;Repository counts, readiness results and aggregation rules&lt;/li&gt;
&lt;li&gt;A policy linking risk classes to planning, review and approval controls&lt;/li&gt;
&lt;li&gt;A recorded end-to-end change trace&lt;/li&gt;
&lt;li&gt;Cost-attribution rules and comparable cost periods&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This matters when classifying unfinished work. A change still open at the end of an observation window is not necessarily a failed delivery. That judgement requires an explicit ageing rule.&lt;/p&gt;

&lt;p&gt;The reported figures below identify the claims under examination. They are not verified results.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Measure&lt;/th&gt;
&lt;th&gt;Reported result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;First-pass rate&lt;/td&gt;
&lt;td&gt;91.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delivered share of started work&lt;/td&gt;
&lt;td&gt;52.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Share requiring a second pass&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair cycles per started change&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High-risk share of work&lt;/td&gt;
&lt;td&gt;21.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Critical financial share of work&lt;/td&gt;
&lt;td&gt;13%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Approved-plan coverage&lt;/td&gt;
&lt;td&gt;34.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall repository-readiness pass rate&lt;/td&gt;
&lt;td&gt;92.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent-tools pass rate&lt;/td&gt;
&lt;td&gt;33.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Default-branch-protection pass rate&lt;/td&gt;
&lt;td&gt;33.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blocking share of recorded review findings&lt;/td&gt;
&lt;td&gt;63.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The material states that automated reviewers raised all recorded findings and that every finding was categorised as a correctness issue. It also lists model-routing assignments. Those assignments describe configuration, not measured performance. They provide no evidence about assurance outcomes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Define the gate and delivery state
&lt;/h2&gt;

&lt;p&gt;A first-pass measure needs a fixed boundary. Its definition must state:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which artefact is assessed&lt;/li&gt;
&lt;li&gt;What starts an attempt&lt;/li&gt;
&lt;li&gt;Which checks apply&lt;/li&gt;
&lt;li&gt;What records a pass or failure&lt;/li&gt;
&lt;li&gt;How corrections before the result are treated&lt;/li&gt;
&lt;li&gt;How reopened or resubmitted work is treated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moving the gate from implementation to review, or from review to production readiness, changes the result without necessarily changing the engineering work.&lt;/p&gt;

&lt;p&gt;Delivery needs the same precision. It should be represented by an observable event, not reconstructed later from incomplete workflow states.&lt;/p&gt;

&lt;h2&gt;
  
  
  Denominators change the result
&lt;/h2&gt;

&lt;p&gt;Consider four synthetic changes. These records are illustrative and do not come from the reported data.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;th&gt;Recorded events&lt;/th&gt;
&lt;th&gt;Final state&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;First attempt passed&lt;/td&gt;
&lt;td&gt;Delivered&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;First attempt passed&lt;/td&gt;
&lt;td&gt;Still open&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;First attempt failed, repair completed, second attempt passed&lt;/td&gt;
&lt;td&gt;Delivered&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;First attempt passed&lt;/td&gt;
&lt;td&gt;Superseded&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These records produce different measures:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;first-pass rate = 3 ÷ 4 = 75%
delivered share = 2 ÷ 4 = 50%
recorded second-attempt share = 1 ÷ 4 = 25%
repair cycles per started change = 1 ÷ 4 = 0.25
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first-pass rate is valid for the specified gate. It says nothing about whether changes B and D were delivered.&lt;/p&gt;

&lt;p&gt;This distinction is missing from the reported 91.7% and 52.2% figures. Both may be correct within their respective boundaries, but the underlying records are needed to establish that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make repair activity visible
&lt;/h2&gt;

&lt;p&gt;The recorded review findings require explanation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automated reviewers raised all recorded findings&lt;/li&gt;
&lt;li&gt;Every recorded finding was categorised as a correctness issue&lt;/li&gt;
&lt;li&gt;63.3% of recorded findings were blocking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The material does not show when these findings occurred or what happened afterwards. Corrections may have taken place before the recorded gate, appeared as continuations rather than repair cycles, or moved outside the tracked workflow.&lt;/p&gt;

&lt;p&gt;Zero recorded repair cycles does not establish that no correction occurred. Until repair states are explicit, the first-pass rate should be reported only as gate performance.&lt;/p&gt;

&lt;p&gt;Unrecorded correction also affects capacity and forecasting. Two changes can share the same recorded outcome while requiring different amounts of engineering work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Record lifecycle events
&lt;/h2&gt;

&lt;p&gt;A common event record would make attempts, repairs and delivery states queryable. This is a proposed measurement design, not a description of the current data.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;change_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Identifies the change across its lifecycle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;event_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Identifies an individual event&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;event_time&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Orders events and applies observation boundaries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;event_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Records start, attempt, result, repair or delivery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gate_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Identifies the measured gate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;attempt_number&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Distinguishes first and later attempts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;result&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Records pass, fail or blocking disposition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;risk_class&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Supports comparison between work classes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;repository_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Supports repository-level analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;superseded_by&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Records replacement by another change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;recorded_by&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Identifies the event source&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A minimum event set could include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;change_started&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gate_attempted&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gate_passed&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gate_failed&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;repair_started&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;repair_completed&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;change_superseded&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;change_abandoned&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;change_delivered&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Corrections before &lt;code&gt;gate_attempted&lt;/code&gt; would not count as post-attempt repair. Corrections after &lt;code&gt;gate_failed&lt;/code&gt; would appear through repair events and a later attempt number.&lt;/p&gt;

&lt;p&gt;The resulting measures would be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;first_pass_rate =
  changes passing the specified gate on attempt 1
  ÷ changes with recorded activity at that gate

delivered_share =
  started changes with a delivered event
  ÷ all started changes in the cohort

recorded_second_attempt_share =
  changes with attempt_number = 2 at the specified gate
  ÷ changes with recorded activity at that gate

repair_cycles_per_started_change =
  completed repair cycles
  ÷ all started changes in the cohort
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A recorded pass counts as evidence that the change reached the gate. This avoids requiring a separate &lt;code&gt;gate_attempted&lt;/code&gt; event when a &lt;code&gt;gate_passed&lt;/code&gt; event already exists.&lt;/p&gt;

&lt;p&gt;A full reference query belongs in an implementation appendix or companion repository. The essential gate logic is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;MAX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;CASE&lt;/span&gt;
    &lt;span class="k"&gt;WHEN&lt;/span&gt; &lt;span class="n"&gt;gate_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;gate_name&lt;/span&gt;
     &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;event_type&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'gate_attempted'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'gate_passed'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'gate_failed'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;THEN&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;ELSE&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;reached_gate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

&lt;span class="k"&gt;MAX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;CASE&lt;/span&gt;
    &lt;span class="k"&gt;WHEN&lt;/span&gt; &lt;span class="n"&gt;gate_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;gate_name&lt;/span&gt;
     &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;event_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'gate_passed'&lt;/span&gt;
     &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;attempt_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;THEN&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;ELSE&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;passed_first_attempt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

&lt;span class="k"&gt;MAX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;CASE&lt;/span&gt;
    &lt;span class="k"&gt;WHEN&lt;/span&gt; &lt;span class="n"&gt;gate_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;gate_name&lt;/span&gt;
     &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;attempt_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
     &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;event_type&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'gate_attempted'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'gate_passed'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'gate_failed'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;THEN&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;ELSE&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;recorded_second_attempt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This detects a recorded second attempt. It does not show that the attempt was required unless the query also identifies a preceding failure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate results by risk
&lt;/h2&gt;

&lt;p&gt;The material reports that high-risk work accounts for 21.7% of the mix and critical financial work accounts for 13%. These figures remain unverified without the underlying source.&lt;/p&gt;

&lt;p&gt;Such work warrants stronger planning, challenge and review than low-risk implementation. A throughput comparison that combines risk bands may favour easier work rather than safe delivery of valuable work.&lt;/p&gt;

&lt;p&gt;Approved plans reportedly cover 34.8% of changes. That result cannot be judged without a policy stating which risk classes require approval. The relevant comparison is coverage against the applicable policy, not coverage in isolation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Report readiness by control
&lt;/h2&gt;

&lt;p&gt;The material reports an overall repository-readiness pass rate of 92.6%. It also reports complete pass rates for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runtime pinning&lt;/li&gt;
&lt;li&gt;Lockfiles&lt;/li&gt;
&lt;li&gt;Observed pipeline checks&lt;/li&gt;
&lt;li&gt;One-command checks&lt;/li&gt;
&lt;li&gt;Testing guidance&lt;/li&gt;
&lt;li&gt;Absence of committed secrets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agent tools and default-branch protection each reportedly pass at 33.3%.&lt;/p&gt;

&lt;p&gt;The aggregate cannot be interpreted without repository counts, repository-level results and the weighting method. Reporting should show each control by repository and state whether the total weights repositories, checks or observations equally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tie cost to delivery
&lt;/h2&gt;

&lt;p&gt;Cost per delivered change keeps the denominator tied to an accepted outcome.&lt;/p&gt;

&lt;p&gt;Attributable cost should include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent use&lt;/li&gt;
&lt;li&gt;Human planning and review&lt;/li&gt;
&lt;li&gt;Delivery-pipeline activity&lt;/li&gt;
&lt;li&gt;Verification&lt;/li&gt;
&lt;li&gt;Repair effort
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cost per delivered change =
  attributable cohort cost
  ÷ delivered changes in the cohort
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Started work that does not reach delivery should remain visible unless an explicit attribution rule excludes it.&lt;/p&gt;

&lt;p&gt;No directional cost claim can be made from the supplied material. Comparison requires consistent cost attribution, delivery definitions, observation windows and risk bands.&lt;/p&gt;

&lt;h2&gt;
  
  
  Publication criteria
&lt;/h2&gt;

&lt;p&gt;A later report should not present first-pass performance as delivery efficiency until:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The underlying source can be cited and verified&lt;/li&gt;
&lt;li&gt;Numerators, denominators, cohort dates and exclusions are published&lt;/li&gt;
&lt;li&gt;Gate, delivery, observation and ageing rules are explicit&lt;/li&gt;
&lt;li&gt;Lifecycle events expose attempts, repairs and final disposition&lt;/li&gt;
&lt;li&gt;Risk policy defines required planning and review&lt;/li&gt;
&lt;li&gt;Readiness aggregation and repository-level results are available&lt;/li&gt;
&lt;li&gt;Cost periods and attribution rules are comparable&lt;/li&gt;
&lt;li&gt;At least one anonymised change has a complete recorded trace&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No owners or delivery dates are supplied, so none can be assigned.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means
&lt;/h2&gt;

&lt;p&gt;The current figures describe reported gate performance, delivery share and control indicators. They do not form a reconciled delivery measure. The full change lifecycle must be recorded and verified before delivery, cost and risk can be compared on the same basis.&lt;/p&gt;




&lt;p&gt;Originally published at &lt;a href="https://aftgroup.co.uk/insights/measuring-ai-assisted-engineering-from-first-pass-to-delivery?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=engineering_insights" rel="noopener noreferrer"&gt;AFT Group Engineering Insights&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>engineeringinsights</category>
      <category>measurement</category>
      <category>aiassisteddelivery</category>
    </item>
    <item>
      <title>Why Agent-Led Code Repair Needs a Hard Cap</title>
      <dc:creator>James Smith</dc:creator>
      <pubDate>Fri, 28 Aug 2026 19:29:18 +0000</pubDate>
      <link>https://dev.to/aft-group/why-agent-led-code-repair-needs-a-hard-cap-k0l</link>
      <guid>https://dev.to/aft-group/why-agent-led-code-repair-needs-a-hard-cap-k0l</guid>
      <description>&lt;p&gt;This article explains why agent-led code repair needs a hard cap, how the policy applies that boundary and where its published evidence remains incomplete. Repeated attempts can compound the assumptions behind the first failure. A hard cap limits that exposure and returns unresolved work to a person, although the policy’s cap values remain unpublished.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A repair cap is a safety boundary, not a throughput target.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why repair needs a hard cap
&lt;/h2&gt;

&lt;p&gt;An agent that misunderstands a requirement must interpret two things during repair:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the original requirement;&lt;/li&gt;
&lt;li&gt;the reviewer’s objection to its implementation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The second attempt therefore depends on the same reasoning that produced the first. A correction can extend beyond its intended scope, alter behaviour, disturb unaffected code and introduce further assumptions.&lt;/p&gt;

&lt;p&gt;Consider a hypothetical sequence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;An agent interprets an unsettled business rule and implements that interpretation.&lt;/li&gt;
&lt;li&gt;Review rejects the resulting behaviour.&lt;/li&gt;
&lt;li&gt;The agent treats the objection as a local code defect rather than evidence that the rule remains unsettled.&lt;/li&gt;
&lt;li&gt;Its repair changes the rejected path and adjacent behaviour that depended on the original interpretation.&lt;/li&gt;
&lt;li&gt;Review must now assess both the initial misunderstanding and the wider correction.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This sequence is illustrative. The available material does not include a representative repair trace. It does, however, show why unlimited retries are unsafe: each attempt can carry the original misunderstanding into a broader change.&lt;/p&gt;

&lt;p&gt;The hard cap stops that process. It prevents repeated automated attempts under unresolved assumptions and forces re-specification when the budget is exhausted.&lt;/p&gt;

&lt;h2&gt;
  
  
  The policy boundary
&lt;/h2&gt;

&lt;p&gt;The current policy assigns a repair budget to each risk band. Only blocking or major findings can trigger repair, and budget must remain.&lt;/p&gt;

&lt;p&gt;Within the available material, the severity labels define eligibility rather than detailed operational criteria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blocking:&lt;/strong&gt; eligible to trigger repair when budget remains.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Major:&lt;/strong&gt; eligible to trigger repair when budget remains.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minor:&lt;/strong&gt; does not automatically reopen implementation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Correctness:&lt;/strong&gt; reported as a finding category, but its relationship to blocking and major classifications is not defined.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The classification criteria are not available. The actual budgets and cap values for each risk band are also unpublished.&lt;/p&gt;

&lt;p&gt;Risk affects the permitted repair budget because the consequence of an incorrect repair varies. A low-risk change and a critical financial change do not receive identical permission to iterate. The evidence does not state how their budgets differ.&lt;/p&gt;

&lt;p&gt;When a change exhausts its budget, it returns to a person for re-specification. It does not receive another automated attempt under the same assumptions. The person can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;narrow the requirement;&lt;/li&gt;
&lt;li&gt;resolve a disputed rule;&lt;/li&gt;
&lt;li&gt;split the change;&lt;/li&gt;
&lt;li&gt;reject the implementation approach.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The repair workflow
&lt;/h2&gt;

&lt;p&gt;The policy supports the following state model:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;State&lt;/th&gt;
&lt;th&gt;Condition&lt;/th&gt;
&lt;th&gt;Next action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Review and evidence&lt;/td&gt;
&lt;td&gt;Implementation enters its configured checks&lt;/td&gt;
&lt;td&gt;Accept or reject&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accepted first pass&lt;/td&gt;
&lt;td&gt;Checks complete without another implementation pass&lt;/td&gt;
&lt;td&gt;Complete&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rejected&lt;/td&gt;
&lt;td&gt;A review or evidence check fails&lt;/td&gt;
&lt;td&gt;Assess repair eligibility&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair eligible&lt;/td&gt;
&lt;td&gt;The finding is blocking or major, and budget remains&lt;/td&gt;
&lt;td&gt;Attempt a tightly scoped repair&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair ineligible&lt;/td&gt;
&lt;td&gt;The finding is minor, or another eligibility condition fails&lt;/td&gt;
&lt;td&gt;No automatic repair&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cap exhausted&lt;/td&gt;
&lt;td&gt;No repair budget remains&lt;/td&gt;
&lt;td&gt;Return to a person for re-specification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human escalation&lt;/td&gt;
&lt;td&gt;Assumptions or approach require reconsideration&lt;/td&gt;
&lt;td&gt;Narrow, clarify, split or reject the approach&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The hard cap matters at two points. It bounds the number of eligible attempts, then changes ownership when automated repair can no longer proceed safely.&lt;/p&gt;

&lt;p&gt;First-pass acceptance records whether a change completes its configured review and evidence path without another implementation pass. It measures an outcome, not effort, elapsed time, code volume or responses to comments. It also does not establish code quality in the abstract.&lt;/p&gt;

&lt;p&gt;Using first-pass acceptance as a proxy for effort would encourage teams to reach review quickly rather than remove uncertainty before coding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reduce repair pressure before implementation
&lt;/h2&gt;

&lt;p&gt;The working hypothesis is that much second-pass pressure begins with ambiguous intent. Possible sources include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;incomplete acceptance conditions;&lt;/li&gt;
&lt;li&gt;unresolved business rules;&lt;/li&gt;
&lt;li&gt;unclear ownership of side effects;&lt;/li&gt;
&lt;li&gt;plans that defer too much design to implementation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This remains a hypothesis rather than a measured causal result.&lt;/p&gt;

&lt;p&gt;Current policy requires approved plans and settled clarification questions before implementation. A useful plan establishes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;behavioural boundaries;&lt;/li&gt;
&lt;li&gt;affected components;&lt;/li&gt;
&lt;li&gt;validation expectations;&lt;/li&gt;
&lt;li&gt;explicit exclusions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The aim is to turn clarification answers into implementation constraints rather than review discoveries. A cap then acts as the final boundary when those controls fail to remove enough uncertainty.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evidence and policy limitations
&lt;/h2&gt;

&lt;p&gt;Two measurements are reported:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Measure&lt;/th&gt;
&lt;th&gt;Reported result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;First-pass acceptance&lt;/td&gt;
&lt;td&gt;91.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair-cycle distribution&lt;/td&gt;
&lt;td&gt;Entirely in the no-repair category&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These measures describe different events. First-pass acceptance records passage through review and evidence without another implementation pass. Repair-cycle distribution records whether repair was executed. They cannot be treated as one funnel without a shared cohort and linked state data.&lt;/p&gt;

&lt;p&gt;The source also reports blocking, major and correctness findings. It does not explain how those findings relate to a distribution containing no executed repairs. They may cover different periods, populations or workflow stages, but the evidence does not establish that.&lt;/p&gt;

&lt;p&gt;The source states that roughly a third of changes have an approved plan. Planning is selected partly by risk and complexity, so a direct comparison between planned and unplanned work could confuse selection effects with plan quality.&lt;/p&gt;

&lt;p&gt;The evidence does not provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;repair-cap values or budget assignments by risk band;&lt;/li&gt;
&lt;li&gt;definitions and stages for the configured review and evidence path;&lt;/li&gt;
&lt;li&gt;cohort sizes, dates, inclusion criteria or denominators;&lt;/li&gt;
&lt;li&gt;linked states from rejection through final outcome;&lt;/li&gt;
&lt;li&gt;classification criteria and context for the reported findings;&lt;/li&gt;
&lt;li&gt;a representative repair sequence;&lt;/li&gt;
&lt;li&gt;evidence of a causal relationship between planning and first-pass acceptance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These gaps limit independent assessment of both the policy and the reported measurements. They do not remove the causal case for bounding repeated repair under unresolved assumptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What needs to be tightened
&lt;/h2&gt;

&lt;p&gt;The stated instrumentation and process changes are to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;publish the cap and budget assigned to each risk band;&lt;/li&gt;
&lt;li&gt;define the configured review and evidence path;&lt;/li&gt;
&lt;li&gt;align first-pass and repair denominators;&lt;/li&gt;
&lt;li&gt;define cohort dates, sizes and inclusion criteria;&lt;/li&gt;
&lt;li&gt;link rejection, repair eligibility, repair execution and final outcome;&lt;/li&gt;
&lt;li&gt;record why rejected changes are not eligible for repair;&lt;/li&gt;
&lt;li&gt;trace correctness findings to unresolved requirements only where evidence supports the link;&lt;/li&gt;
&lt;li&gt;extend consistent use of the plan gate;&lt;/li&gt;
&lt;li&gt;settle clarification questions before implementation begins.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The cap remains hard under the current policy. Publishing its values is necessary to make the control operationally clear.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means
&lt;/h2&gt;

&lt;p&gt;A hard cap limits the propagation of unresolved assumptions across automated repair attempts and returns exhausted work to a person. The policy establishes that boundary, but its cap values, severity criteria and supporting measurement context still need to be published.&lt;/p&gt;




&lt;p&gt;Originally published at &lt;a href="https://aftgroup.co.uk/insights/why-agent-led-code-repair-needs-a-hard-cap?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=engineering_insights" rel="noopener noreferrer"&gt;AFT Group Engineering Insights&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>engineeringinsights</category>
      <category>deliveryassurance</category>
      <category>aiassisteddelivery</category>
    </item>
    <item>
      <title>Bounded Agent Repair: Measuring Review Demand Requires Aligned Evidence</title>
      <dc:creator>James Smith</dc:creator>
      <pubDate>Fri, 28 Aug 2026 19:29:17 +0000</pubDate>
      <link>https://dev.to/aft-group/bounded-agent-repair-measuring-review-demand-requires-aligned-evidence-1bgk</link>
      <guid>https://dev.to/aft-group/bounded-agent-repair-measuring-review-demand-requires-aligned-evidence-1bgk</guid>
      <description>&lt;p&gt;This article defines bounded agent repair, first-pass acceptance and the evidence required to measure repeated review demand. The policy is clear, but current event records and metric definitions are not sufficient to verify its effects.&lt;/p&gt;

&lt;p&gt;Agent-led repair can avoid a visible hand-off. It also asks the agent that misunderstood a requirement to reinterpret its work and the reviewer’s objection.&lt;/p&gt;

&lt;p&gt;Correction may then extend beyond the original change, alter unaffected code or introduce further assumptions. Each cycle requires reviewers to understand and verify another implementation pass. No sourced change trace is available to quantify these effects.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The objective is not to make agents better at looping. It is to stop ambiguity reaching review.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bounded repair is a policy position. Current evidence does not establish whether it reduces review demand, defect escape rates or failed acceptance.&lt;/p&gt;

&lt;h2&gt;
  
  
  First-pass acceptance
&lt;/h2&gt;

&lt;p&gt;First-pass acceptance asks whether an implementation completes its configured review and evidence path without another implementation pass.&lt;/p&gt;

&lt;p&gt;It measures an outcome, not activity. It does not reward generated code, responses to comments or repeated attempts. Nor does it measure effort, elapsed time or code quality in the abstract. Review can assess only the requirements, checks and evidence available.&lt;/p&gt;

&lt;p&gt;A carefully specified change may require substantial reasoning and still pass on its first attempt. A quick change may fail because a requirement remains unsettled. Using acceptance as a proxy for effort would encourage teams to rush towards review rather than remove uncertainty before coding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bounded repair policy
&lt;/h2&gt;

&lt;p&gt;Repair is a bounded exception:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only blocking or major findings trigger repair.&lt;/li&gt;
&lt;li&gt;Minor observations do not automatically reopen implementation.&lt;/li&gt;
&lt;li&gt;Each risk band has a repair budget with a hard cap.&lt;/li&gt;
&lt;li&gt;Exhausting the budget returns the change to a person for re-specification.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An agent cannot continue iterating merely because it can propose another patch.&lt;/p&gt;

&lt;p&gt;After budget exhaustion, the person can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;narrow the requirement;&lt;/li&gt;
&lt;li&gt;resolve a disputed rule;&lt;/li&gt;
&lt;li&gt;split the change;&lt;/li&gt;
&lt;li&gt;decide that the implementation approach is wrong.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The cap is a safety boundary, not a throughput target. It is intended to prevent repeated implementation and review cycles from becoming hidden delivery churn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Intended process
&lt;/h2&gt;

&lt;p&gt;The policy separates rejection, repair eligibility, repair execution and human disposition:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implementation
    ↓
Configured review and evidence path
    ├── Accepted → Complete
    └── Rejected
          ├── Not eligible for repair → Human disposition
          └── Eligible for repair
                ├── Budget available → Bounded repair → Review
                └── Budget exhausted → Human re-specification
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is an intended policy model, not a verified event schema.&lt;/p&gt;

&lt;p&gt;Human disposition may narrow the requirement, resolve a rule, split the change or reject the implementation approach. No sourced case currently traces these steps from rejection to final disposition.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measurement and evidence limits
&lt;/h2&gt;

&lt;p&gt;A complete first-pass acceptance metric requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a numerator covering changes accepted without another implementation pass;&lt;/li&gt;
&lt;li&gt;a denominator covering all eligible changes entering the configured path;&lt;/li&gt;
&lt;li&gt;a defined cohort and measurement period;&lt;/li&gt;
&lt;li&gt;explicit treatment of human-routed and abandoned changes;&lt;/li&gt;
&lt;li&gt;documented inclusion and exclusion rules.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These details are unavailable. The previously reported 91.7% rate is therefore omitted until its basis is documented.&lt;/p&gt;

&lt;p&gt;The available measurements describe different events:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First-pass acceptance records acceptance through the configured review and evidence path.&lt;/li&gt;
&lt;li&gt;Repair-cycle distribution records whether repair was executed.&lt;/li&gt;
&lt;li&gt;The recorded repair-cycle distribution contains only the no-repair category.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These measurements cannot yet form a single funnel because their denominators are not aligned. The data do not fully account for rejected changes that were ineligible for repair, abandoned or routed to a person. The zero-repair distribution therefore cannot be reconciled with first-pass failures.&lt;/p&gt;

&lt;p&gt;Further missing evidence includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a verified event schema linking rejection, eligibility, repair execution, abandonment, human routing and final disposition;&lt;/li&gt;
&lt;li&gt;counts for intermediate and terminal dispositions;&lt;/li&gt;
&lt;li&gt;published definitions for finding severity, risk bands, repair budgets and configured review paths;&lt;/li&gt;
&lt;li&gt;documented review controls and reviewer-independence criteria;&lt;/li&gt;
&lt;li&gt;a sourced change trace covering rejection through final disposition;&lt;/li&gt;
&lt;li&gt;aligned cohort counts for testing review demand, acceptance outcomes or defect escape effects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Until these definitions and records exist, the operational effect of bounded repair cannot be assessed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Untested hypothesis: ambiguity creates repair pressure
&lt;/h2&gt;

&lt;p&gt;The working hypothesis is that second-pass pressure often begins with ambiguous intent. Possible sources include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;incomplete acceptance conditions;&lt;/li&gt;
&lt;li&gt;unresolved business rules;&lt;/li&gt;
&lt;li&gt;unclear ownership of side effects;&lt;/li&gt;
&lt;li&gt;plans that leave too much design to implementation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Current evidence does not quantify this relationship or establish that approved plans improve first-pass acceptance.&lt;/p&gt;

&lt;p&gt;Planning is selected partly by risk and complexity. A direct comparison between planned and unplanned work could therefore confuse selection effects with plan quality.&lt;/p&gt;

&lt;p&gt;The policy places approved plans and settled clarification questions before implementation. A useful plan establishes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;behavioural boundaries;&lt;/li&gt;
&lt;li&gt;affected components;&lt;/li&gt;
&lt;li&gt;validation expectations;&lt;/li&gt;
&lt;li&gt;explicit exclusions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clarification answers then become implementation constraints rather than review discoveries. Whether this reduces repair pressure remains untested.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we are tightening next
&lt;/h2&gt;

&lt;p&gt;We are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;defining the first-pass numerator, denominator, cohort and measurement period;&lt;/li&gt;
&lt;li&gt;aligning first-pass acceptance with repair-event records;&lt;/li&gt;
&lt;li&gt;recording accepted, rejected, repair-eligible, repaired, abandoned and human-routed dispositions separately;&lt;/li&gt;
&lt;li&gt;testing whether those states are mutually exclusive and collectively exhaustive;&lt;/li&gt;
&lt;li&gt;recording why rejected changes are or are not eligible for repair;&lt;/li&gt;
&lt;li&gt;tracing correctness findings to unresolved requirements only where evidence supports the link;&lt;/li&gt;
&lt;li&gt;applying the plan gate consistently;&lt;/li&gt;
&lt;li&gt;requiring clarification questions to be settled before implementation;&lt;/li&gt;
&lt;li&gt;documenting review controls, risk bands and repair caps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The repair cap remains hard.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means
&lt;/h2&gt;

&lt;p&gt;Bounded repair is intended to expose repeated implementation and review demand rather than conceal it inside an open-ended loop. Complete metric definitions, aligned records and a sourced change trace are required before that intended effect can be treated as an observed outcome.&lt;/p&gt;




&lt;p&gt;Originally published at &lt;a href="https://aftgroup.co.uk/insights/bounding-agent-repair-without-hiding-review-demand?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=engineering_insights" rel="noopener noreferrer"&gt;AFT Group Engineering Insights&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>engineeringinsights</category>
      <category>deliveryassurance</category>
      <category>aiassisteddelivery</category>
    </item>
    <item>
      <title>Designing Commit-Bound Acceptance Gates for an Internal Software Factory</title>
      <dc:creator>James Smith</dc:creator>
      <pubDate>Fri, 28 Aug 2026 19:28:47 +0000</pubDate>
      <link>https://dev.to/aft-group/designing-commit-bound-acceptance-gates-for-an-internal-software-factory-30i7</link>
      <guid>https://dev.to/aft-group/designing-commit-bound-acceptance-gates-for-an-internal-software-factory-30i7</guid>
      <description>&lt;p&gt;This report explains how to design acceptance gates around approved plans, commit-specific evidence and independent review. It also identifies which controls are intended, partial or reported as operating, and why the available records do not support an end-to-end audit.&lt;/p&gt;

&lt;p&gt;Generating changes is not the difficult part of building an internal software factory. Establishing a trustworthy basis for accepting them is.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An agent’s account of its own work is not evidence that the work is correct.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why self-reporting is insufficient
&lt;/h2&gt;

&lt;p&gt;During the early build phase, coding agents received work without a plan contract, acceptance gate or independent review. The implementing agent also reported what it had done.&lt;/p&gt;

&lt;p&gt;Acceptance rested on that report rather than on evidence tied to the resulting software. This supported exploration of agent-led delivery. It was not sufficient for dependable engineering.&lt;/p&gt;

&lt;p&gt;The acceptance model now separates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Approved plans and specifications&lt;/li&gt;
&lt;li&gt;Product clarification&lt;/li&gt;
&lt;li&gt;Implementation&lt;/li&gt;
&lt;li&gt;Commit-specific CI evidence&lt;/li&gt;
&lt;li&gt;Independent review&lt;/li&gt;
&lt;li&gt;Repair, rejection or acceptance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These controls are at different implementation stages. The records do not show them operating together on a single candidate change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Planning is the contract
&lt;/h2&gt;

&lt;p&gt;An agreed plan and specification provide the reference point for implementation and review. The plan defines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intended behaviour&lt;/li&gt;
&lt;li&gt;Affected boundaries&lt;/li&gt;
&lt;li&gt;Validation approach&lt;/li&gt;
&lt;li&gt;Acceptance conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A technically precise plan can still contain an unresolved product decision. If ambiguity reaches implementation, an agent must stop or infer intent. That inference may produce coherent code that solves the wrong problem.&lt;/p&gt;

&lt;p&gt;Product clarification therefore belongs before implementation. The specification records business rules, exceptional cases and acceptable trade-offs. A person decides the intended behaviour before code is written.&lt;/p&gt;

&lt;p&gt;The target is not merely a plausible change. It is an approved interpretation of the requirement, implemented against conditions defined in advance.&lt;/p&gt;

&lt;p&gt;Approved plans are not yet universal. Product decision records are also too limited to measure coverage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evidence must be independent and commit-specific
&lt;/h2&gt;

&lt;p&gt;A plan defines the target. It does not prove that a candidate change reached it.&lt;/p&gt;

&lt;p&gt;Continuous integration is intended to provide evidence from the required checks. That evidence counts only when independently verified and attached to the exact commit under consideration.&lt;/p&gt;

&lt;p&gt;A test summary copied into an agent response is insufficient. It may:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Refer to another revision&lt;/li&gt;
&lt;li&gt;Omit a failed check&lt;/li&gt;
&lt;li&gt;Describe an environment that cannot be reproduced&lt;/li&gt;
&lt;li&gt;Lack evidence that the required checks ran&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A commit-bound evidence interface needs four defined elements:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Element&lt;/th&gt;
&lt;th&gt;Required definition&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Identity&lt;/td&gt;
&lt;td&gt;The immutable commit identity under consideration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inputs&lt;/td&gt;
&lt;td&gt;CI results, required attestations and provenance records&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validation&lt;/td&gt;
&lt;td&gt;Checks that the evidence belongs to the commit and meets the required conditions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure states&lt;/td&gt;
&lt;td&gt;Missing, malformed, incomplete, mismatched or non-compliant evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The intended gate fails closed for each listed failure state. However, the records do not describe how commit identity is verified, how CI results are bound to that identity or how attestations are validated. They also provide no workflow evidence that acceptance is blocked.&lt;/p&gt;

&lt;p&gt;Commit-bound evidence and fail-closed enforcement therefore remain design requirements rather than auditable controls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review is separate, but rejection policy is incomplete
&lt;/h2&gt;

&lt;p&gt;The records state that the reviewing agent comes from a different model family from the implementing agent. They also state that findings are classified by severity and category.&lt;/p&gt;

&lt;p&gt;Classification and rejection are separate controls. A workflow can classify findings without a complete policy for deciding which classifications block acceptance. The current records do not define:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The severity taxonomy&lt;/li&gt;
&lt;li&gt;Rejection thresholds&lt;/li&gt;
&lt;li&gt;Findings that require escalation&lt;/li&gt;
&lt;li&gt;Findings that permit acceptance&lt;/li&gt;
&lt;li&gt;How multiple findings are combined&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Severity classification is reported as operating, while rejection policy remains unspecified. Without workflow records or review artefacts, neither claim can be independently audited.&lt;/p&gt;

&lt;p&gt;Cross-family review may reduce repeated assumptions and blind spots. This remains a hypothesis. No comparative evidence shows whether it finds defects that same-family review would miss.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rejected work needs a defined exit
&lt;/h2&gt;

&lt;p&gt;A capped repair budget is intended to prevent a candidate circulating indefinitely between implementation and review. When the budget is exhausted, the work should return for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Human judgement&lt;/li&gt;
&lt;li&gt;Replanning&lt;/li&gt;
&lt;li&gt;A change of scope&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The records do not define how the cap is selected, configured or enforced. They also do not define the workflow state entered when the budget is exhausted.&lt;/p&gt;

&lt;p&gt;The repair limit is therefore a design principle. It becomes an auditable control only when workflow definitions record the budget, transitions and terminal states.&lt;/p&gt;

&lt;h2&gt;
  
  
  The codebase is part of the control system
&lt;/h2&gt;

&lt;p&gt;A strong workflow cannot compensate for an environment that agents cannot reproduce. Readiness requirements cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Written engineering conventions&lt;/li&gt;
&lt;li&gt;A pinned runtime&lt;/li&gt;
&lt;li&gt;Dependency locking&lt;/li&gt;
&lt;li&gt;An architecture map&lt;/li&gt;
&lt;li&gt;Testing guidance&lt;/li&gt;
&lt;li&gt;Common failure modes&lt;/li&gt;
&lt;li&gt;Consistently invocable checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The records identify weaknesses in agent tooling and default-branch protection. Repository policies or configurations supporting those findings are not available here.&lt;/p&gt;

&lt;p&gt;The requirements also lack recorded enforcement methods. The available material does not show which checks are automated, which are reviewed manually or which block acceptance. Codebase readiness must therefore be treated as partial and not yet reproducibly assessed.&lt;/p&gt;

&lt;p&gt;Every undocumented convention or environment-specific step pushes a decision back into inference. It also makes acceptance harder to audit.&lt;/p&gt;

&lt;h2&gt;
  
  
  How control status is assessed
&lt;/h2&gt;

&lt;p&gt;This report uses four status terms:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Intended&lt;/td&gt;
&lt;td&gt;Required behaviour is described, but implementation evidence is unavailable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Some constituent behaviour is reported or required, but coverage, enforcement or supporting records are incomplete&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reported operational&lt;/td&gt;
&lt;td&gt;The records state that the control operates, but linked configurations or artefacts are unavailable for independent verification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auditable&lt;/td&gt;
&lt;td&gt;Implementation records show the control acting on a specific candidate and commit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No control can be marked auditable from the available material. The source records and repository policies needed to verify operational claims have not been supplied.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current control status
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Control&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Basis&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Agreed plan and specification&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Plans provide a shared reference but are not universal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product clarification before implementation&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Human clarification is required, but durable decision records remain limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Separate automated review&lt;/td&gt;
&lt;td&gt;Reported operational&lt;/td&gt;
&lt;td&gt;The records state that implementing and reviewing agents are separate; supporting workflow records are unavailable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Severity and category classification&lt;/td&gt;
&lt;td&gt;Reported operational&lt;/td&gt;
&lt;td&gt;Classification is reported, but the taxonomy and review artefacts are unavailable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review rejection policy&lt;/td&gt;
&lt;td&gt;Intended&lt;/td&gt;
&lt;td&gt;Thresholds, escalation rules and rejection criteria are unspecified&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-family review&lt;/td&gt;
&lt;td&gt;Reported operational&lt;/td&gt;
&lt;td&gt;Different model families are reported as in use; effectiveness is unproven&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commit-bound CI evidence&lt;/td&gt;
&lt;td&gt;Intended&lt;/td&gt;
&lt;td&gt;Binding and verification mechanisms are not recorded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attestation and provenance validation&lt;/td&gt;
&lt;td&gt;Intended&lt;/td&gt;
&lt;td&gt;Required attestations and validation checks are unspecified&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fail-closed acceptance gate&lt;/td&gt;
&lt;td&gt;Intended&lt;/td&gt;
&lt;td&gt;Failure conditions are stated, but enforcement evidence is unavailable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Capped repair budget&lt;/td&gt;
&lt;td&gt;Intended&lt;/td&gt;
&lt;td&gt;Configuration, enforcement and exhaustion transitions are unspecified&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codebase readiness controls&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Requirements exist, but testing and enforcement methods are not recorded&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The missing delivery trace
&lt;/h2&gt;

&lt;p&gt;A source-backed trace is needed to show one candidate passing through:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Specification and plan approval&lt;/li&gt;
&lt;li&gt;Product clarification&lt;/li&gt;
&lt;li&gt;Implementation&lt;/li&gt;
&lt;li&gt;Identification of the candidate commit&lt;/li&gt;
&lt;li&gt;Commit-bound CI checks and attestations&lt;/li&gt;
&lt;li&gt;Independent review and classified findings&lt;/li&gt;
&lt;li&gt;Repair, rejection or escalation&lt;/li&gt;
&lt;li&gt;Final acceptance&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each stage must link the control to its corresponding artefact. Required artefacts include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The approved plan&lt;/li&gt;
&lt;li&gt;The product decision record&lt;/li&gt;
&lt;li&gt;The commit identifier&lt;/li&gt;
&lt;li&gt;CI evidence&lt;/li&gt;
&lt;li&gt;Attestations&lt;/li&gt;
&lt;li&gt;Review findings&lt;/li&gt;
&lt;li&gt;Repair history&lt;/li&gt;
&lt;li&gt;The acceptance decision&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No such trace is available. Adding an example without those records would repeat the self-reporting problem that the acceptance model is intended to remove.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measurement limits
&lt;/h2&gt;

&lt;p&gt;The records do not support publication of figures for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Readiness&lt;/li&gt;
&lt;li&gt;Approved-plan coverage&lt;/li&gt;
&lt;li&gt;First-pass acceptance&lt;/li&gt;
&lt;li&gt;Verified-evidence coverage&lt;/li&gt;
&lt;li&gt;Delivery activity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Denominators, dates, reporting windows, work-item counts and eligibility rules are missing.&lt;/p&gt;

&lt;p&gt;The records also do not establish a time saving, productivity multiplier or increase in individual working speed. Comparative data for cross-family and same-family review is unavailable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes next
&lt;/h2&gt;

&lt;p&gt;The remaining work is to turn stated requirements into recorded controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make approved plans universal&lt;/li&gt;
&lt;li&gt;Record product clarifications as durable decisions&lt;/li&gt;
&lt;li&gt;Define metric denominators, reporting windows and eligibility rules&lt;/li&gt;
&lt;li&gt;Publish the readiness checklist, enforcement method and scoring method&lt;/li&gt;
&lt;li&gt;Specify how CI evidence is bound to an immutable commit identity&lt;/li&gt;
&lt;li&gt;Define required attestations, provenance checks and validation failures&lt;/li&gt;
&lt;li&gt;Record an anonymised end-to-end delivery trace&lt;/li&gt;
&lt;li&gt;Define the severity taxonomy, rejection thresholds and escalation rules&lt;/li&gt;
&lt;li&gt;Establish a comparison method for cross-family review&lt;/li&gt;
&lt;li&gt;Define repair-budget configuration, enforcement and exhaustion states&lt;/li&gt;
&lt;li&gt;Provide workflow records and repository policies for reported controls&lt;/li&gt;
&lt;li&gt;Strengthen agent tooling&lt;/li&gt;
&lt;li&gt;Strengthen default-branch protection&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What this means
&lt;/h2&gt;

&lt;p&gt;The acceptance model separates implementation from planning, evidence and judgement. The available records establish design intent more clearly than implementation. Dependable acceptance requires reproducible evidence that every required control operated on the exact commit accepted.&lt;/p&gt;




&lt;p&gt;Originally published at &lt;a href="https://aftgroup.co.uk/insights/building-trustworthy-acceptance-gates-for-an-internal-software-factory?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=engineering_insights" rel="noopener noreferrer"&gt;AFT Group Engineering Insights&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>engineeringinsights</category>
      <category>softwarefactory</category>
      <category>aiassisteddelivery</category>
    </item>
    <item>
      <title>Why First-Pass Rate Does Not Measure End-to-End Delivery</title>
      <dc:creator>James Smith</dc:creator>
      <pubDate>Fri, 28 Aug 2026 19:28:26 +0000</pubDate>
      <link>https://dev.to/aft-group/why-first-pass-rate-does-not-measure-end-to-end-delivery-3kh</link>
      <guid>https://dev.to/aft-group/why-first-pass-rate-does-not-measure-end-to-end-delivery-3kh</guid>
      <description>&lt;p&gt;You will learn why first-pass rate and cohort delivery need separate measures. They cover different populations and answer different questions. A change can pass its first measured gate without reaching delivery.&lt;/p&gt;

&lt;p&gt;Code volume sits near the start of delivery. It does not show whether a change survives review, passes later checks, meets its business intent or reaches a usable state.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A high first-pass rate measures gate performance, not end-to-end delivery.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The denominator mismatch
&lt;/h2&gt;

&lt;p&gt;The supplied measurement draft reports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First-pass rate: 91.7%&lt;/li&gt;
&lt;li&gt;Delivered share of started work: 52.2%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The measures use different denominators:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;First-pass rate
= changes passing their first recorded gate attempt
  / changes with a recorded first gate attempt

Delivered share
= changes reaching delivery
  / changes in the defined started cohort
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Started work that has not reached the gate is excluded from the first calculation but included in the second. Work can also pass the gate and then remain pending, enter repair, be superseded or be abandoned.&lt;/p&gt;

&lt;p&gt;The gate boundary also matters. Moving it from implementation to review, or from review to production readiness, changes the meaning of the result. The reported first-pass rate applies only to its defined gate. It is not a proxy for delivery.&lt;/p&gt;

&lt;p&gt;The measurement boundaries should remain explicit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use gate attempts to measure first-pass performance.&lt;/li&gt;
&lt;li&gt;Use a defined started cohort to measure delivery.&lt;/li&gt;
&lt;li&gt;Separate pending work from terminal non-delivery.&lt;/li&gt;
&lt;li&gt;Record transitions between the two boundaries.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The reported results remain unauditable
&lt;/h2&gt;

&lt;p&gt;The source measurement draft and raw counts are unavailable. No citation or link has been supplied. The metric definitions, cohort rules, observation window, collection methods and source systems are also missing.&lt;/p&gt;

&lt;p&gt;The figures therefore remain reported observations. They cannot yet support comparisons across teams, periods or work classes.&lt;/p&gt;

&lt;p&gt;Other reported measures have the same limitation:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Reported result&lt;/th&gt;
&lt;th&gt;Intended scope&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Share requiring a second pass&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;Recorded repeat passes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair cycles per started change&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Recorded correction cycles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blocking review findings&lt;/td&gt;
&lt;td&gt;63.3%&lt;/td&gt;
&lt;td&gt;Severity of recorded findings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Approved-plan coverage&lt;/td&gt;
&lt;td&gt;34.8%&lt;/td&gt;
&lt;td&gt;Share of changes with an approved plan&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Publication of the source should include a raw-count appendix covering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Numerators and denominators for every percentage and zero value&lt;/li&gt;
&lt;li&gt;The exact gate definition&lt;/li&gt;
&lt;li&gt;Definitions of started work, gate attempts, repair cycles and delivery acceptance&lt;/li&gt;
&lt;li&gt;Cohort inclusion rules and dates&lt;/li&gt;
&lt;li&gt;The observation window&lt;/li&gt;
&lt;li&gt;The age distribution of unfinished work&lt;/li&gt;
&lt;li&gt;Finding-level dispositions and linked revisions&lt;/li&gt;
&lt;li&gt;Collection methods and source systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Until these materials are available, the results should not be treated as a substantive case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Delivery needs a validated lifecycle model
&lt;/h2&gt;

&lt;p&gt;End-to-end measurement needs consistent states and transition events. The following table is a proposed baseline, not a confirmed representation of the measured workflow.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Current state&lt;/th&gt;
&lt;th&gt;Transition event&lt;/th&gt;
&lt;th&gt;Next state&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Started&lt;/td&gt;
&lt;td&gt;Implementation submitted&lt;/td&gt;
&lt;td&gt;Implemented&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Started&lt;/td&gt;
&lt;td&gt;Work replaced&lt;/td&gt;
&lt;td&gt;Superseded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Started&lt;/td&gt;
&lt;td&gt;Work stopped&lt;/td&gt;
&lt;td&gt;Abandoned&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implemented&lt;/td&gt;
&lt;td&gt;Gate attempt passes&lt;/td&gt;
&lt;td&gt;Gate passed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implemented&lt;/td&gt;
&lt;td&gt;Gate attempt fails and correction starts&lt;/td&gt;
&lt;td&gt;In repair&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implemented&lt;/td&gt;
&lt;td&gt;Work replaced&lt;/td&gt;
&lt;td&gt;Superseded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implemented&lt;/td&gt;
&lt;td&gt;Work stopped&lt;/td&gt;
&lt;td&gt;Abandoned&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gate passed&lt;/td&gt;
&lt;td&gt;Required reviews and checks pass&lt;/td&gt;
&lt;td&gt;Approved&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gate passed&lt;/td&gt;
&lt;td&gt;Accepted finding requires correction&lt;/td&gt;
&lt;td&gt;In repair&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gate passed&lt;/td&gt;
&lt;td&gt;Work replaced&lt;/td&gt;
&lt;td&gt;Superseded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gate passed&lt;/td&gt;
&lt;td&gt;Work stopped&lt;/td&gt;
&lt;td&gt;Abandoned&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;In repair&lt;/td&gt;
&lt;td&gt;Revised implementation submitted&lt;/td&gt;
&lt;td&gt;Implemented&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;In repair&lt;/td&gt;
&lt;td&gt;Work replaced&lt;/td&gt;
&lt;td&gt;Superseded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;In repair&lt;/td&gt;
&lt;td&gt;Work stopped&lt;/td&gt;
&lt;td&gt;Abandoned&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Approved&lt;/td&gt;
&lt;td&gt;Delivery acceptance occurs&lt;/td&gt;
&lt;td&gt;Delivered&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In this baseline, delivered, superseded and abandoned are terminal states. Pending is not a separate terminal state. It describes work with no later transition at the observation cut-off.&lt;/p&gt;

&lt;p&gt;The model must be checked against the actual workflow. Validation must determine how it represents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rollback after delivery&lt;/li&gt;
&lt;li&gt;Rejection after approval&lt;/li&gt;
&lt;li&gt;Partial deployment&lt;/li&gt;
&lt;li&gt;Reopened work&lt;/li&gt;
&lt;li&gt;Work that leaves the tracked workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If these events occur, the model needs corresponding transitions. Otherwise, it will hide outcomes or assign them to the wrong state.&lt;/p&gt;

&lt;p&gt;Each transition should record a persistent change identifier, timestamp, responsible stage and applicable work or risk class. Each review finding should link to its disposition and any revision that addresses it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pending work changes the result
&lt;/h2&gt;

&lt;p&gt;A recent cohort may contain substantial unfinished work. Counting every unfinished change as non-delivery lowers the delivered share without showing whether those changes will later reach delivery.&lt;/p&gt;

&lt;p&gt;Reporting should distinguish:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delivered work&lt;/li&gt;
&lt;li&gt;Superseded work&lt;/li&gt;
&lt;li&gt;Abandoned work&lt;/li&gt;
&lt;li&gt;Work still pending at the cut-off&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The following example is hypothetical. It does not represent the reported data.&lt;/p&gt;

&lt;p&gt;A cohort contains 100 started changes. Its status changes between two observation dates:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;State&lt;/th&gt;
&lt;th&gt;Earlier cut-off&lt;/th&gt;
&lt;th&gt;Later cut-off&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Delivered&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pending&lt;/td&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Abandoned&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Superseded&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Started cohort&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;At the earlier cut-off:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Delivered share = 40 / 100 = 40%
Pending share   = 45 / 100 = 45%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At the later cut-off:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Delivered share = 58 / 100 = 58%
Pending share   = 17 / 100 = 17%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The cohort size does not change, but its observed outcome does. Some pending work reaches delivery. Other work becomes abandoned or superseded. A delivered-share figure therefore needs both a cohort definition and an observation date.&lt;/p&gt;

&lt;p&gt;The method must also define cohort maturity. It may use a documented maturity threshold or a documented time-to-delivery treatment. The available material provides neither, so no method can yet be selected or assessed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blocking findings expose a recording gap
&lt;/h2&gt;

&lt;p&gt;The supplied draft reports that automated reviewers raised all recorded findings and that every recorded finding was categorised as a correctness issue. It also reports that 63.3% were blocking, while the share requiring a second pass and repair cycles per started change were both zero.&lt;/p&gt;

&lt;p&gt;These observations do not prove that repair occurred. They raise a narrower question: what happened after each blocking finding?&lt;/p&gt;

&lt;p&gt;A finding record should show whether the affected change:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Was corrected before the measured pass&lt;/li&gt;
&lt;li&gt;Continued without a recorded repair cycle&lt;/li&gt;
&lt;li&gt;Remained pending&lt;/li&gt;
&lt;li&gt;Was superseded or abandoned&lt;/li&gt;
&lt;li&gt;Left the tracked workflow&lt;/li&gt;
&lt;li&gt;Reached delivery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without these links, the data cannot show whether findings create repair work or how much engineering capacity that work consumes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the measures separate
&lt;/h2&gt;

&lt;p&gt;Complete transition records support several distinct measures:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Measure&lt;/th&gt;
&lt;th&gt;Numerator&lt;/th&gt;
&lt;th&gt;Denominator&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;First-pass rate&lt;/td&gt;
&lt;td&gt;Changes passing their first recorded gate attempt&lt;/td&gt;
&lt;td&gt;Changes with a first recorded gate attempt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delivered share&lt;/td&gt;
&lt;td&gt;Changes reaching delivery&lt;/td&gt;
&lt;td&gt;Started changes in the defined cohort&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair cycles per started change&lt;/td&gt;
&lt;td&gt;Transitions into repair&lt;/td&gt;
&lt;td&gt;Started changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal non-delivery share&lt;/td&gt;
&lt;td&gt;Superseded or abandoned changes&lt;/td&gt;
&lt;td&gt;Started changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pending share&lt;/td&gt;
&lt;td&gt;Changes without a terminal state at the cut-off&lt;/td&gt;
&lt;td&gt;Started changes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These measures describe gate quality, correction activity, workflow progress and final outcomes. Combining them produces an ambiguous result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measurement priorities
&lt;/h2&gt;

&lt;p&gt;The immediate task is to make the existing claims auditable:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Publish or cite the source measurement draft.&lt;/li&gt;
&lt;li&gt;Add a raw-count appendix for every reported result.&lt;/li&gt;
&lt;li&gt;Define the measured gate and each lifecycle state.&lt;/li&gt;
&lt;li&gt;Publish the cohort rules, dates and observation window.&lt;/li&gt;
&lt;li&gt;Define the treatment of immature and unfinished work.&lt;/li&gt;
&lt;li&gt;Validate the proposed state model against the actual workflow.&lt;/li&gt;
&lt;li&gt;Record transitions against persistent change identifiers.&lt;/li&gt;
&lt;li&gt;Link findings to dispositions, revisions and final states.&lt;/li&gt;
&lt;li&gt;Compare teams or periods only after definitions and collection methods remain stable.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What this means
&lt;/h2&gt;

&lt;p&gt;First-pass rate describes one gate. End-to-end delivery requires a defined cohort, explicit outcomes and transition records from start to observation cut-off.&lt;/p&gt;




&lt;p&gt;Originally published at &lt;a href="https://aftgroup.co.uk/insights/why-first-pass-rate-is-not-an-end-to-end-delivery-measure?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=engineering_insights" rel="noopener noreferrer"&gt;AFT Group Engineering Insights&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>engineeringinsights</category>
      <category>measurement</category>
      <category>aiassisteddelivery</category>
    </item>
  </channel>
</rss>
