<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/the-promise-none-of-them-kept-guapkaav6" -->

---
title: The Promise None of Them Kept | daily.dev
description: Mark Burgess formalized promise theory in 2005, describing autonomous agents that observe their environment locally, reason independently, and make voluntary...
canonical: https://daily.dev/posts/the-promise-none-of-them-kept-guapkaav6
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: The Promise None of Them Kept | daily.dev
og:description: Mark Burgess formalized promise theory in 2005, describing autonomous agents that observe their environment locally, reason independently, and make voluntary...
og:url: https://daily.dev/posts/the-promise-none-of-them-kept-guapkaav6
og:image: https://api.daily.dev/og/posts/gUapKaaV6.png
og:image:alt: The Promise None of Them Kept
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# The Promise None of Them Kept

**[Webframp](https://daily.dev/sources/webframp)** · 20 min read · 3 upvotes · 0 comments

## Summary

Mark Burgess formalized promise theory in 2005, describing autonomous agents that observe their environment locally, reason independently, and make voluntary commitments about their own behavior. Terraform, Ansible, Chef, and Puppet all borrowed the vocabulary but none implemented the model: Terraform diffs files against files and is blind between applies, Ansible pushes tasks from a central controller with no agent autonomy on targets, and Chef/Puppet approximate the loop only within their declared scope. CFEngine is the only tool that actually kept the promise, running a local agent on every host every five minutes — but it never stored what it observed, making historical assessment impossible. The post argues that LLMs finally supply the missing reasoning agent, and introduces Swamp as a framework built around observation-first infrastructure: model methods observe live systems, results are stored as versioned, schema-validated snapshots, and workflows decide whether to act based on queried diffs between reality at T and T-1. Idempotency moves from per-resource logic up to workflow-level guards. The post includes comparison tables for Terraform and Ansible users, CLI examples, and an honest acknowledgment that Swamp shares Ansible's availability problem when its scheduler is down.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://webframp.com/posts/the-promise-none-of-them-kept>

## Questions this post answers

### Why doesn't Terraform detect infrastructure drift between plan and apply runs?

Terraform's plan/apply cycle diffs your .tf configuration files against a state file, which is just a snapshot of what Terraform last wrote, not a live observation of your infrastructure. Between applies, Terraform has no awareness of changes made outside it, such as a security group rule added through the console; it stays blind until a human runs terraform plan or refresh again.

_Anyone weighing Terraform against newer observation-first tooling can track that debate on daily.dev._

### Why does Ansible's agentless architecture prevent local reasoning on target hosts?

Ansible's control node connects via SSH and pushes tasks to targets that have no agent and no capacity for local decision-making; facts gathered by the setup module travel back to the control node where conditions and templates are evaluated, then a task is sent back to execute. This makes it an imposition model rather than a promise model, so connectivity failures mid-run leave changes partial with no automatic resumption.

_Engineers debating Ansible's push model versus agent-based alternatives can follow that discussion on daily.dev._

### What does CFEngine do differently from Terraform and Ansible in terms of observation and convergence?

A cf-agent runs on every host roughly every five minutes, observing local state, deciding locally which of its promises are unkept, and repairing only those, with no central controller issuing orders. Its limitation is scope and memory: it only observes what its promises describe, and it can only report whether a promise is kept right now, with no stored history of past assessments or repairs.

_Teams comparing CFEngine's convergence model against declarative tools can track that tradeoff on daily.dev._

## Similar posts on daily.dev

- [You Were Never Declaring State. You Were Observing By Hand.](https://daily.dev/posts/you-were-never-declaring-state-you-were-observing-by-hand--pn4y6dlig) · Webframp · 2 upvotes · 0 comments
- [Fragments: May 14](https://daily.dev/posts/fragments-may-14-lvinaemdo) · Martin Fowler · 1 upvotes · 0 comments
- [Swamp tutorial: make AI agent work repeatable](https://daily.dev/posts/swamp-tutorial-make-ai-agent-work-repeatable-va3nkfhad) · Flavio Copes · 1 upvotes · 0 comments

---

Tags: [#terraform](https://daily.dev/tags/terraform), [#iac](https://daily.dev/tags/iac), [#ansible](https://daily.dev/tags/ansible)

[View this post on daily.dev](https://daily.dev/posts/the-promise-none-of-them-kept-guapkaav6)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"The Promise None of Them Kept","url":"https://daily.dev/posts/the-promise-none-of-them-kept-guapkaav6","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/the-promise-none-of-them-kept-guapkaav6"},"datePublished":"2026-08-09T21:19:47.841Z","dateModified":"2026-09-13T18:54:53.433Z","description":"Mark Burgess formalized promise theory in 2005, describing autonomous agents that observe their environment locally, reason independently, and make voluntary...","image":"https://media.daily.dev/image/upload/s--58gMhC4P--/f_auto/v1722860399/public/Placeholder%2012","thumbnailUrl":"https://media.daily.dev/image/upload/s--58gMhC4P--/f_auto/v1722860399/public/Placeholder%2012","isAccessibleForFree":true,"articleSection":"Webframp","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Webframp","logo":"https://media.daily.dev/image/upload/s--NCWOwzJ8--/f_auto,q_auto/v1779608748/logos/webframp","url":"https://daily.dev/sources/webframp"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/the-promise-none-of-them-kept-guapkaav6","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":3},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"terraform,iac,ansible","timeRequired":"PT20M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Webframp","item":"https://daily.dev/sources/webframp"},{"@type":"ListItem","position":3,"name":"The Promise None of Them Kept"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/the-promise-none-of-them-kept-guapkaav6#faq","mainEntity":[{"@type":"Question","name":"Why doesn't Terraform detect infrastructure drift between plan and apply runs?","acceptedAnswer":{"@type":"Answer","text":"Terraform's plan/apply cycle diffs your .tf configuration files against a state file, which is just a snapshot of what Terraform last wrote, not a live observation of your infrastructure. Between applies, Terraform has no awareness of changes made outside it, such as a security group rule added through the console; it stays blind until a human runs terraform plan or refresh again. Anyone weighing Terraform against newer observation-first tooling can track that debate on daily.dev."}},{"@type":"Question","name":"Why does Ansible's agentless architecture prevent local reasoning on target hosts?","acceptedAnswer":{"@type":"Answer","text":"Ansible's control node connects via SSH and pushes tasks to targets that have no agent and no capacity for local decision-making; facts gathered by the setup module travel back to the control node where conditions and templates are evaluated, then a task is sent back to execute. This makes it an imposition model rather than a promise model, so connectivity failures mid-run leave changes partial with no automatic resumption. Engineers debating Ansible's push model versus agent-based alternatives can follow that discussion on daily.dev."}},{"@type":"Question","name":"What does CFEngine do differently from Terraform and Ansible in terms of observation and convergence?","acceptedAnswer":{"@type":"Answer","text":"A cf-agent runs on every host roughly every five minutes, observing local state, deciding locally which of its promises are unkept, and repairing only those, with no central controller issuing orders. Its limitation is scope and memory: it only observes what its promises describe, and it can only report whether a promise is kept right now, with no stored history of past assessments or repairs. Teams comparing CFEngine's convergence model against declarative tools can track that tradeoff on daily.dev."}}]}
```

