<?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: Mid-Mountain</title>
    <description>The latest articles on DEV Community by Mid-Mountain (@midmountainfea).</description>
    <link>https://dev.to/midmountainfea</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%2Fuser%2Fprofile_image%2F4075150%2F3e681cde-20ee-4666-9712-70022bd738fd.png</url>
      <title>DEV Community: Mid-Mountain</title>
      <link>https://dev.to/midmountainfea</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/midmountainfea"/>
    <language>en</language>
    <item>
      <title>Catch naming drift before an Abaqus run: a deterministic contract-audit pattern in Python</title>
      <dc:creator>Mid-Mountain</dc:creator>
      <pubDate>Wed, 12 Aug 2026 18:11:12 +0000</pubDate>
      <link>https://dev.to/midmountainfea/catch-naming-drift-before-an-abaqus-run-a-deterministic-contract-audit-pattern-in-python-4k43</link>
      <guid>https://dev.to/midmountainfea/catch-naming-drift-before-an-abaqus-run-a-deterministic-contract-audit-pattern-in-python-4k43</guid>
      <description>&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I maintain the open-source repository described below. This article was prepared with AI assistance and reviewed before publication.&lt;/p&gt;

&lt;p&gt;Automation failures in finite-element projects are often blamed on the solver, but many failures begin earlier. A script renames a region while a later load still points to the old name. An output request no longer covers the quantity needed by a review. A report calls a result "approved" even though the solver and physical-review gates are incomplete.&lt;/p&gt;

&lt;p&gt;These are contract problems. They are useful to detect before launching a licensed application or handling a large model. In this tutorial I will use a small, dependency-free Python demo to show the pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Run the tagged example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/1348109517/abaqus-agent-skills.git
&lt;span class="nb"&gt;cd &lt;/span&gt;abaqus-agent-skills
git checkout v0.3.0
python scripts/run_demo.py &lt;span class="nt"&gt;--scenario&lt;/span&gt; &lt;span class="nb"&gt;complete&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The complete synthetic contract produces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PASS: 8
WARNING: 0
REVIEW_REQUIRED: 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command writes &lt;code&gt;report.json&lt;/code&gt; and &lt;code&gt;report.md&lt;/code&gt;. Both reports are derived from the same ordered finding objects. They contain an input SHA-256 digest but no runtime timestamp by default, so rerunning an unchanged contract yields deterministic review artifacts.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Introduce naming drift
&lt;/h2&gt;

&lt;p&gt;Now run the committed failure case:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python scripts/run_demo.py &lt;span class="nt"&gt;--scenario&lt;/span&gt; naming-drift
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Its summary is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PASS: 7
WARNING: 0
REVIEW_REQUIRED: 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;C-REF-001&lt;/code&gt; finding points to &lt;code&gt;loads.Gravity.region&lt;/code&gt;. The load refers to &lt;code&gt;ExcavationFaceRenamed&lt;/code&gt;, while that region is not declared by the contract. The command still exits successfully because the auditor completed its job; the finding is a structured request for human review, not a Python crash.&lt;/p&gt;

&lt;p&gt;This separation matters in CI. An invalid JSON shape or an I/O failure should fail the tool. A valid contract containing an engineering-review finding should produce a stable artifact that a person or later workflow can inspect.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Keep evidence states narrower than engineering claims
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python scripts/run_demo.py &lt;span class="nt"&gt;--scenario&lt;/span&gt; evidence-overreach
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This scenario also returns seven passes and one &lt;code&gt;REVIEW_REQUIRED&lt;/code&gt; finding. &lt;code&gt;C-EVIDENCE-001&lt;/code&gt; records that an engineering claim was marked approved before the declared solver and physical-review gates were complete.&lt;/p&gt;

&lt;p&gt;The key rule is intentionally conservative:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static contract review != solver evidence
solver completion       != physical correctness
physical review         != automatic claim approval
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A deterministic preflight can verify names and declared dependencies. It cannot choose a constitutive model, judge mesh adequacy for a specific claim, interpret an ODB, or certify an engineering conclusion.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Adapt the pattern safely
&lt;/h2&gt;

&lt;p&gt;The public example uses synthetic data only. For another workflow, start with a small schema that names producers and consumers explicitly: parts, instances, regions, materials, steps, loads, output requests, and evidence gates. Keep machine-checkable references separate from decisions that require domain judgment. Prefer a status such as &lt;code&gt;REVIEW_REQUIRED&lt;/code&gt; when automation has reached its evidence boundary.&lt;/p&gt;

&lt;p&gt;Repository:&lt;br&gt;
&lt;a href="https://github.com/1348109517/abaqus-agent-skills" rel="noopener noreferrer"&gt;https://github.com/1348109517/abaqus-agent-skills&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Verified v0.3.0 release:&lt;br&gt;
&lt;a href="https://github.com/1348109517/abaqus-agent-skills/releases/tag/v0.3.0" rel="noopener noreferrer"&gt;https://github.com/1348109517/abaqus-agent-skills/releases/tag/v0.3.0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is early-stage, Apache-2.0 licensed, and independently maintained. It is not affiliated with or endorsed by Dassault Systemes or SIMULIA. It does not include Abaqus, official documentation, solver binaries, or private model data.&lt;/p&gt;

&lt;p&gt;If the project is useful in your workflow, star the repository to follow its development. I would also appreciate a reproducible issue report or a proposal for another synthetic contract failure; those concrete cases are more useful at this stage than broad adoption claims.&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>testing</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
