<?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: Indu Das</title>
    <description>The latest articles on DEV Community by Indu Das (@indu_das_e14b18dd167a8cf7).</description>
    <link>https://dev.to/indu_das_e14b18dd167a8cf7</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%2F3749583%2Fb5324956-6c5c-41fe-a6b9-09cdc0bba748.jpg</url>
      <title>DEV Community: Indu Das</title>
      <link>https://dev.to/indu_das_e14b18dd167a8cf7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/indu_das_e14b18dd167a8cf7"/>
    <language>en</language>
    <item>
      <title>An AI agent can make a reasonable decision from accurate information—and still take the wrong action.</title>
      <dc:creator>Indu Das</dc:creator>
      <pubDate>Fri, 28 Aug 2026 19:16:30 +0000</pubDate>
      <link>https://dev.to/indu_das_e14b18dd167a8cf7/an-ai-agent-can-make-a-reasonable-decision-from-accurate-information-and-still-take-the-wrong-4opn</link>
      <guid>https://dev.to/indu_das_e14b18dd167a8cf7/an-ai-agent-can-make-a-reasonable-decision-from-accurate-information-and-still-take-the-wrong-4opn</guid>
      <description>&lt;p&gt;&lt;strong&gt;The problem is timing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Business systems do not pause while an agent reads data, calls tools, reasons, waits for approval, or prepares an action.&lt;/p&gt;

&lt;p&gt;During that interval:&lt;/p&gt;

&lt;p&gt;An account can be frozen.&lt;/p&gt;

&lt;p&gt;A payment authorization can be withdrawn.&lt;/p&gt;

&lt;p&gt;Inventory can be sold.&lt;/p&gt;

&lt;p&gt;A price can change.&lt;/p&gt;

&lt;p&gt;A policy can be revised.&lt;/p&gt;

&lt;p&gt;A configuration file can be updated.&lt;/p&gt;

&lt;p&gt;An API or database can become unreachable.&lt;/p&gt;

&lt;p&gt;The agent may still be holding a conclusion derived from the earlier state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The gap between checking and acting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most production systems already have important controls.&lt;/p&gt;

&lt;p&gt;Payment workflows have rules and approvals. Healthcare operations have authorization and access controls. E-commerce platforms have inventory and fulfillment checks. Engineering teams use GitHub, pull requests, branch protection, and CI/CD.&lt;/p&gt;

&lt;p&gt;Those controls remain necessary.&lt;/p&gt;

&lt;p&gt;But many of them establish whether something was valid when it was checked. An AI-supported workflow also needs to know whether the evidence supporting its current conclusion is still valid when the action is about to happen.&lt;/p&gt;

&lt;p&gt;That is the reasoning-to-action freshness gap.&lt;/p&gt;

&lt;p&gt;It resembles a time-of-check-to-time-of-use problem, but it also affects the reasoning derived from the changed source—not only the source itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three examples&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Payments&lt;/p&gt;

&lt;p&gt;An agent reviews an account, beneficiary status, risk result, and approval records before preparing a payment.&lt;/p&gt;

&lt;p&gt;Before execution, a fraud signal changes or the account is placed on legal hold.&lt;/p&gt;

&lt;p&gt;The earlier reasoning may have been reasonable when it was produced. But the evidence supporting it is no longer current, so the payment should not proceed on the old conclusion.&lt;/p&gt;

&lt;p&gt;Healthcare operations&lt;/p&gt;

&lt;p&gt;An automated workflow reads an authorization or scheduling record. The authorization changes—or its source becomes unreachable—while the workflow is underway.&lt;/p&gt;

&lt;p&gt;The workflow should not silently treat its earlier snapshot as current.&lt;/p&gt;

&lt;p&gt;Freshness validation can complement operational and compliance controls. It does not replace clinical judgment, authorization policy, privacy safeguards, or regulatory review.&lt;/p&gt;

&lt;p&gt;E-commerce&lt;/p&gt;

&lt;p&gt;An agent prepares an order using inventory, price, fraud, and delivery-capacity evidence.&lt;/p&gt;

&lt;p&gt;Before fulfillment, the inventory falls below the requested quantity.&lt;/p&gt;

&lt;p&gt;The inventory observation is now stale. The fulfillment reasoning that depended on it must also be reconsidered. An unrelated fraud result, however, may still be current.&lt;/p&gt;

&lt;p&gt;That distinction matters. Invalidating everything is safe but inefficient. Invalidating nothing is dangerous.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What FreshCtx does&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today, I’m releasing FreshCtx™ v0.1, an Apache-2.0 open-source freshness and dependency-validation runtime for AI agents.&lt;/p&gt;

&lt;p&gt;FreshCtx records the declared sources an agent observed, connects downstream reasoning to those observations, and revalidates the dependencies at a protected action boundary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It produces four explicit states:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CURRENT: every reachable, declared dependency was successfully revalidated as equivalent.&lt;/p&gt;

&lt;p&gt;STALE_SOURCE: an observed source changed.&lt;/p&gt;

&lt;p&gt;STALE_REASONING: reasoning depends on stale evidence.&lt;/p&gt;

&lt;p&gt;UNVERIFIABLE: FreshCtx could not safely determine whether the dependency is still current.&lt;/p&gt;

&lt;p&gt;UNVERIFIABLE never silently becomes CURRENT.&lt;/p&gt;

&lt;p&gt;The configured policy can block, warn, allow, or perform one bounded refresh. Blocking is the default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install it&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FreshCtx supports Python 3.10 through 3.13.&lt;/p&gt;

&lt;p&gt;python -m pip install freshctx==0.1.0&lt;/p&gt;

&lt;p&gt;To use the optional Postgres adapter:&lt;/p&gt;

&lt;p&gt;python -m pip install 'freshctx[postgres]==0.1.0'&lt;/p&gt;

&lt;p&gt;No account is required, and the runtime sends no telemetry.&lt;/p&gt;

&lt;p&gt;A minimal example&lt;/p&gt;

&lt;p&gt;Imagine an agent selecting a deployment target from a configuration file:&lt;/p&gt;

&lt;p&gt;from pathlib import Path&lt;br&gt;
from tempfile import TemporaryDirectory&lt;/p&gt;

&lt;p&gt;from freshctx import MemoryStore, guard, observe, reasoning&lt;/p&gt;

&lt;p&gt;def deploy(target: str) -&amp;gt; None:&lt;br&gt;
    print(f"DEPLOYED to {target}")&lt;/p&gt;

&lt;p&gt;with TemporaryDirectory() as directory:&lt;br&gt;
    root = Path(directory)&lt;br&gt;
    config = root / "deployment.env"&lt;br&gt;
    audit = root / "freshctx-audit.jsonl"&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;config.write_text("TARGET=staging\n", encoding="utf-8")

with guard(
    policy="block",
    store=MemoryStore(),
    audit_path=audit,
) as ctx:
    source = observe(config)

    with reasoning(
        "choose_target",
        depends_on=[source],
    ) as decision:
        target = "staging"

    ctx.run(
        deploy,
        target,
        depends_on=[decision],
    )

print(f"FreshCtx state: {ctx.result.state.value}")
print(f"Audit file: {audit}")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Expected output:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DEPLOYED to staging&lt;br&gt;
FreshCtx state: CURRENT&lt;br&gt;
Audit file: /.../freshctx-audit.jsonl&lt;/p&gt;

&lt;p&gt;Before deploy() runs, FreshCtx revalidates the declared dependency.&lt;/p&gt;

&lt;p&gt;If the configuration changes after observation, the source becomes STALE_SOURCE, the dependent decision becomes STALE_REASONING, and the protected action is blocked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dependency-aware invalidation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FreshCtx does not automatically invalidate every conclusion whenever anything changes.&lt;/p&gt;

&lt;p&gt;Suppose an audit contains three findings:&lt;/p&gt;

&lt;p&gt;retention policy ──&amp;gt; retention finding&lt;br&gt;
access evidence  ──&amp;gt; access finding&lt;br&gt;
backup evidence  ──&amp;gt; backup finding&lt;/p&gt;

&lt;p&gt;If only the retention policy changes, FreshCtx can mark the retention observation STALE_SOURCE and its dependent finding STALE_REASONING.&lt;/p&gt;

&lt;p&gt;The access and backup findings can remain CURRENT.&lt;/p&gt;

&lt;p&gt;FreshCtx follows the declared dependency graph rather than treating the entire workflow as one undifferentiated cache entry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What CURRENT does—and does not—prove&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CURRENT means that every reachable, declared dependency was successfully revalidated as equivalent under its configured adapter at check time.&lt;/p&gt;

&lt;p&gt;It does not prove:&lt;/p&gt;

&lt;p&gt;The source itself is true.&lt;/p&gt;

&lt;p&gt;The agent’s reasoning is correct.&lt;/p&gt;

&lt;p&gt;The action is authorized.&lt;/p&gt;

&lt;p&gt;The action is safe or compliant.&lt;/p&gt;

&lt;p&gt;Every relevant dependency was declared.&lt;/p&gt;

&lt;p&gt;The wider world has not changed.&lt;/p&gt;

&lt;p&gt;FreshCtx validates the freshness of declared dependencies. It is not a truth engine, authorization system, policy engine, or compliance certification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why CI/CD is not enough&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CI/CD establishes that a particular commit passed its configured checks.&lt;/p&gt;

&lt;p&gt;FreshCtx answers a different question:&lt;/p&gt;

&lt;p&gt;Is the evidence supporting this specific action still current now?&lt;/p&gt;

&lt;p&gt;A CI pipeline can verify a commit. FreshCtx can revalidate the declared Git path, file, API response, database row, or MCP resource supporting an agent’s current action.&lt;/p&gt;

&lt;p&gt;GitHub and CI/CD remain essential. FreshCtx operates at the reasoning-to-action boundary they do not cover.&lt;/p&gt;

&lt;p&gt;Similarly, memory tells an agent what it previously knew. FreshCtx checks whether that knowledge is still current.&lt;/p&gt;

&lt;p&gt;Adapters in v0.1&lt;/p&gt;

&lt;p&gt;FreshCtx v0.1 includes adapters for:&lt;/p&gt;

&lt;p&gt;Filesystem&lt;/p&gt;

&lt;p&gt;Git&lt;/p&gt;

&lt;p&gt;HTTP&lt;/p&gt;

&lt;p&gt;Postgres&lt;/p&gt;

&lt;p&gt;MCP&lt;/p&gt;

&lt;p&gt;The runtime is local-first, model-neutral, and framework-neutral. It does not require OpenAI, Anthropic, LangChain, or any other particular model or agent framework.&lt;/p&gt;

&lt;p&gt;It also includes local JSONL audit events, SQLite and in-memory stores, machine-readable schemas, a documented adapter contract, security semantics, and executable reference scenarios.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try the drift demos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Clone the repository and run the three reference demonstrations:&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/Hyperwise-LLC/freshctx.git" rel="noopener noreferrer"&gt;https://github.com/Hyperwise-LLC/freshctx.git&lt;/a&gt;&lt;br&gt;
cd freshctx&lt;/p&gt;

&lt;p&gt;python -m venv .venv&lt;br&gt;
source .venv/bin/activate&lt;/p&gt;

&lt;p&gt;python -m pip install .&lt;br&gt;
python examples/coding_file_drift.py&lt;br&gt;
python examples/configuration_api_drift.py&lt;br&gt;
python examples/audit_reasoning_drift.py&lt;/p&gt;

&lt;p&gt;The examples demonstrate:&lt;/p&gt;

&lt;p&gt;A file changing after an agent observes it.&lt;/p&gt;

&lt;p&gt;An API-backed configuration changing while reasoning is underway.&lt;/p&gt;

&lt;p&gt;Evidence supporting only one audit finding changing while unrelated findings remain current.&lt;/p&gt;

&lt;p&gt;Project links&lt;/p&gt;

&lt;p&gt;FreshCtx repository&lt;/p&gt;

&lt;p&gt;README and quickstart&lt;/p&gt;

&lt;p&gt;FreshCtx v0.1.0 release&lt;/p&gt;

&lt;p&gt;PyPI package&lt;/p&gt;

&lt;p&gt;Versioned specification&lt;/p&gt;

&lt;p&gt;Adapter contract&lt;/p&gt;

&lt;p&gt;Security model&lt;/p&gt;

&lt;p&gt;Validated reference scenarios&lt;/p&gt;

&lt;p&gt;FreshCtx™ is an independent Apache-2.0 open-source project owned and stewarded by Hyperwise LLC.&lt;/p&gt;

&lt;p&gt;If you build AI-supported workflows that act on mutable systems, I would be interested to hear where the reasoning-to-action freshness gap appears in your architecture—and which sources your agent would need to revalidate.&lt;/p&gt;

&lt;p&gt;_Disclosure: I am associated with the team releasing FreshCtx. AI-assisted editing was used to improve the structure of this article. The technical claims, examples, and final text were reviewed against the released FreshCtx v0.1.0 implementation and documentation.  &lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Missing Layer in Modern Supply Chains: Execution</title>
      <dc:creator>Indu Das</dc:creator>
      <pubDate>Tue, 03 Feb 2026 04:44:20 +0000</pubDate>
      <link>https://dev.to/indu_das_e14b18dd167a8cf7/the-missing-layer-in-modern-supply-chains-execution-5e25</link>
      <guid>https://dev.to/indu_das_e14b18dd167a8cf7/the-missing-layer-in-modern-supply-chains-execution-5e25</guid>
      <description>&lt;p&gt;Why visibility, planning, and control towers still fail without an execution layer&lt;/p&gt;

&lt;p&gt;For the last decade, supply chains have invested heavily in visibility, analytics, and planning systems.&lt;/p&gt;

&lt;p&gt;We can see disruptions in real time.&lt;br&gt;
We can simulate scenarios.&lt;br&gt;
We can forecast demand with increasing accuracy.&lt;/p&gt;

&lt;p&gt;Yet supply chains still break at the same point: execution.&lt;/p&gt;

&lt;p&gt;When a disruption occurs, the hard questions are not analytical—they are operational:&lt;br&gt;
    • Who reallocates inventory?&lt;br&gt;
    • Which orders get substituted?&lt;br&gt;
    • Which constraints apply?&lt;br&gt;
    • Which partners act first?&lt;br&gt;
    • How do we confirm the decision was executed?&lt;/p&gt;

&lt;p&gt;Most organizations answer these questions manually, through meetings, spreadsheets, and escalations. That’s not a tooling failure. It’s a missing system layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The execution gap&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Visibility tells you what happened.&lt;br&gt;
Planning tells you what should happen.&lt;br&gt;
Control towers tell you where attention is needed.&lt;/p&gt;

&lt;p&gt;None of them ensure coordinated action across a multi-tier supply chain network.&lt;/p&gt;

&lt;p&gt;This gap becomes more severe as supply chains grow more complex:&lt;br&gt;
    • Multiple suppliers&lt;br&gt;
    • Distributed warehouses&lt;br&gt;
    • External logistics partners&lt;br&gt;
    • Regulatory and contractual constraints&lt;br&gt;
    • Shared responsibility across organizations&lt;/p&gt;

&lt;p&gt;At that point, execution can’t remain informal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a supply chain execution layer?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A supply chain execution layer is the operational software layer that coordinates and enforces real-time decisions across multi-hierarchical supply chain networks.&lt;/p&gt;

&lt;p&gt;It translates plans, constraints, and signals into executable actions across suppliers, warehouses, distributors, and retailers—and tracks what actually happened.&lt;/p&gt;

&lt;p&gt;This layer sits above existing systems like ERP, WMS, TMS, and POS.&lt;br&gt;
Those systems remain in place. The execution layer operates across them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it differs from existing systems&lt;/strong&gt;&lt;br&gt;
    • ERP systems record transactions and internal processes.&lt;br&gt;
    • Planning systems optimize forecasts and scenarios.&lt;br&gt;
    • Control towers provide visibility and alerts.&lt;/p&gt;

&lt;p&gt;An execution layer does something different:&lt;br&gt;
    • Validates decisions against constraints&lt;br&gt;
    • Orchestrates actions across parties&lt;br&gt;
    • Coordinates timing and responsibility&lt;br&gt;
    • Creates accountability for outcomes&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execution is not a feature.&lt;br&gt;
It’s a system role.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this matters now&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Modern supply chains are no longer linear or single-owner systems. They are shared networks.&lt;/p&gt;

&lt;p&gt;In shared networks:&lt;br&gt;
    • Decisions have downstream effects&lt;br&gt;
    • Constraints vary by partner&lt;br&gt;
    • Accountability is distributed&lt;br&gt;
    • Manual coordination does not scale&lt;/p&gt;

&lt;p&gt;Without an execution layer, organizations end up with excellent insight and inconsistent action.&lt;/p&gt;

&lt;p&gt;Resilience is not achieved at planning time.&lt;br&gt;
It is achieved at execution time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A practical example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Consider a late supplier shipment.&lt;/p&gt;

&lt;p&gt;Visibility tools detect it.&lt;br&gt;
Planning tools recalculate scenarios.&lt;/p&gt;

&lt;p&gt;But execution requires:&lt;br&gt;
    • Reallocating inventory across nodes&lt;br&gt;
    • Substituting SKUs within constraints&lt;br&gt;
    • Rerouting fulfillment paths&lt;br&gt;
    • Coordinating approvals across organizations&lt;br&gt;
    • Confirming actions were completed&lt;/p&gt;

&lt;p&gt;Without an execution layer, this work happens outside the system.&lt;br&gt;
With one, it becomes coordinated, auditable, and repeatable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where this fits in practice&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At Opsis, we’re building systems designed to operate as this execution layer—coordinating real-time decisions across multi-hierarchical supply chain networks while operating above existing enterprise systems.&lt;/p&gt;

&lt;p&gt;For a concrete explanation of how this layer works in practice, see:&lt;br&gt;
👉 &lt;a href="https://opsisone.com/execution-layer" rel="noopener noreferrer"&gt;https://opsisone.com/execution-layer&lt;/a&gt;&lt;/p&gt;

</description>
      <category>supplychain</category>
      <category>architecture</category>
      <category>enterprise</category>
      <category>operations</category>
    </item>
  </channel>
</rss>
