diff --git a/scripts/check.mjs b/scripts/check.mjs
index f73e8d0..eee4532 100644
--- a/scripts/check.mjs
+++ b/scripts/check.mjs
@@ -211,6 +211,7 @@ const requestedConceptSlugs = [
"living-story-loop",
"groundtruth-audit-loop",
"recovery-proof-loop",
+ "refund-follow-up-loop",
];
const submissionPromptAnchors = new Map([
["ticket-to-pr-ready-loop", ["bug report", "customer complaint"]],
@@ -267,6 +268,10 @@ const submissionPromptAnchors = new Map([
"recovery-proof-loop",
["disposable, isolated clean-room", "actual RPO and RTO", "never overwrite production"],
],
+ [
+ "refund-follow-up-loop",
+ ["Start the claim now", "keep following up", "genuinely blocked"],
+ ],
]);
const beginnerClarityAnchors = new Map([
["promise-to-proof-loop", ["marketing", "current product behavior", "customer trust"]],
@@ -302,6 +307,10 @@ const beginnerClarityAnchors = new Map([
"recovery-proof-loop",
["real recovery point", "representative business reads and writes", "restored production data"],
],
+ [
+ "refund-follow-up-loop",
+ ["pending refund is progress, not success", "money actually arrives", "permissions already granted"],
+ ],
]);
assert.equal(collection.mainEntity.numberOfItems, loops.length);
@@ -319,7 +328,7 @@ assert.deepEqual(agentLoopTerm.sameAs, [
"https://code.claude.com/docs/en/agent-sdk/agent-loop",
"https://arxiv.org/abs/2210.03629",
]);
-assert.equal(loops.length, 49);
+assert.equal(loops.length, 50);
assert.equal(slugs.size, loops.length);
assert.equal(featuredLoopSlugs.length, 3);
assert.equal(new Set(featuredLoopSlugs).size, featuredLoopSlugs.length);
@@ -805,6 +814,7 @@ assert(html.includes("Alex Burkhart (@neuralwhisperer)"));
assert(html.includes("Buddy Hadry (@buddyhadry)"));
assert(html.includes("Mohamed (@aivibecode)"));
assert(html.includes("Eric Lott"));
+assert(html.includes("Jason (@jxnlco)"));
for (const removedSlug of [
"focused-ai-signal-brief",
"hands-on-tool-evaluation-loop",
diff --git a/scripts/loop-data.mjs b/scripts/loop-data.mjs
index 934b601..942d8e5 100644
--- a/scripts/loop-data.mjs
+++ b/scripts/loop-data.mjs
@@ -7,7 +7,7 @@ export const site = {
description:
"Practical AI agent workflows for engineering, research, editorial work, evaluation, and operations.",
updated: "2026-06-21",
- socialImageVersion: "20260621",
+ socialImageVersion: "20260621-2",
socialImageExtension: "png",
socialImageMimeType: "image/png",
};
@@ -21,9 +21,9 @@ export const categories = [
];
export const featuredLoopSlugs = [
+ "refund-follow-up-loop",
"five-minute-repository-maintainer-loop",
"full-product-evaluation-loop",
- "fresh-clone-loop",
];
const categorySlugByLabel = new Map([
@@ -35,6 +35,7 @@ const categorySlugByLabel = new Map([
["AI data operations workflow", "operations"],
["AI deployment operations workflow", "operations"],
["AI recovery operations workflow", "operations"],
+ ["AI consumer advocacy workflow", "operations"],
["AI search visibility workflow", "content"],
["AI editorial workflow", "content"],
["AI visual design workflow", "design"],
@@ -2062,6 +2063,51 @@ export const loops = [
"production-error-sweep",
],
},
+ {
+ number: "050",
+ slug: "refund-follow-up-loop",
+ title: "The refund follow-up loop",
+ summary:
+ "Keeps pursuing a refund until the money arrives or the agent genuinely needs the user.",
+ seoTitle: "Refund Follow-Up Loop for AI Agents | Loop Library",
+ description:
+ "A persistent follow-up workflow that starts a refund claim, watches replies and deadlines, and keeps the case moving until the money arrives.",
+ categoryLabel: "AI consumer advocacy workflow",
+ author: "Jason (@jxnlco)",
+ sourceUrl: "https://x.com/jxnlco",
+ published: "2026-06-21",
+ modified: "2026-06-21",
+ prompt:
+ "Get my refund for [company and charge info]. Start the claim now through an approved support channel, then keep following up on replies, promises, and deadlines until the refund arrives. Keep a short case note so each follow-up has context. Stop only when the refund is received or you are genuinely blocked and need me.",
+ verifyTitle:
+ "The refund is received, or a genuine blocker requires the user.",
+ verifyDetail:
+ "An open claim, promise, or pending refund is progress, not success; keep following up until the money arrives or no approved next step remains.",
+ useWhen:
+ "Use this when someone owes you a refund and getting it may take more than one support conversation or follow-up.",
+ steps: [
+ "Gather the charge, reason for the refund, useful evidence, current status, and any earlier conversation or promise.",
+ "Start or continue the claim through a support channel the user has approved, then note what happened and what should happen next.",
+ "Follow up whenever a reply, promise, or deadline creates a useful next step; keep the case moving instead of treating a pending status as done.",
+ "Stop when the refund arrives, or explain the genuine blocker when the next useful step needs the user.",
+ ],
+ why:
+ "Refunds often stall because a promise or pending status gets treated as completion. This loop keeps ownership through delays and handoffs until the money actually arrives.",
+ note:
+ "Use truthful information and the permissions already granted. If the next step needs a new permission or decision, bring that blocker to the user instead of stopping silently.",
+ keywords: [
+ "refund follow up",
+ "consumer advocacy",
+ "customer support escalation",
+ "refund status tracking",
+ "case log",
+ ],
+ related: [
+ "promise-to-proof-loop",
+ "living-story-loop",
+ "recent-feedback-sweep",
+ ],
+ },
];
validateLoopData(loops);
diff --git a/site/assets/social/100-percent-test-coverage-loop-20260621-2.png b/site/assets/social/100-percent-test-coverage-loop-20260621-2.png
new file mode 100644
index 0000000..04b1d19
Binary files /dev/null and b/site/assets/social/100-percent-test-coverage-loop-20260621-2.png differ
diff --git a/site/assets/social/accessibility-repair-loop-20260621-2.png b/site/assets/social/accessibility-repair-loop-20260621-2.png
new file mode 100644
index 0000000..1b902ca
Binary files /dev/null and b/site/assets/social/accessibility-repair-loop-20260621-2.png differ
diff --git a/site/assets/social/architecture-satisfaction-loop-20260621-2.png b/site/assets/social/architecture-satisfaction-loop-20260621-2.png
new file mode 100644
index 0000000..f50e43f
Binary files /dev/null and b/site/assets/social/architecture-satisfaction-loop-20260621-2.png differ
diff --git a/site/assets/social/artifact-to-skill-loop-20260621-2.png b/site/assets/social/artifact-to-skill-loop-20260621-2.png
new file mode 100644
index 0000000..5940397
Binary files /dev/null and b/site/assets/social/artifact-to-skill-loop-20260621-2.png differ
diff --git a/site/assets/social/autonomy-loop-20260621-2.png b/site/assets/social/autonomy-loop-20260621-2.png
new file mode 100644
index 0000000..401f093
Binary files /dev/null and b/site/assets/social/autonomy-loop-20260621-2.png differ
diff --git a/site/assets/social/axelrod-subagent-arena-loop-20260621-2.png b/site/assets/social/axelrod-subagent-arena-loop-20260621-2.png
new file mode 100644
index 0000000..95280ac
Binary files /dev/null and b/site/assets/social/axelrod-subagent-arena-loop-20260621-2.png differ
diff --git a/site/assets/social/boeing-747-benchmark-20260621-2.png b/site/assets/social/boeing-747-benchmark-20260621-2.png
new file mode 100644
index 0000000..bebcdf1
Binary files /dev/null and b/site/assets/social/boeing-747-benchmark-20260621-2.png differ
diff --git a/site/assets/social/clodex-adversarial-review-loop-20260621-2.png b/site/assets/social/clodex-adversarial-review-loop-20260621-2.png
new file mode 100644
index 0000000..270b21e
Binary files /dev/null and b/site/assets/social/clodex-adversarial-review-loop-20260621-2.png differ
diff --git a/site/assets/social/codex-completion-contract-loop-20260621-2.png b/site/assets/social/codex-completion-contract-loop-20260621-2.png
new file mode 100644
index 0000000..e617f8b
Binary files /dev/null and b/site/assets/social/codex-completion-contract-loop-20260621-2.png differ
diff --git a/site/assets/social/cold-load-trimmer-loop-20260621-2.png b/site/assets/social/cold-load-trimmer-loop-20260621-2.png
new file mode 100644
index 0000000..87f1c9c
Binary files /dev/null and b/site/assets/social/cold-load-trimmer-loop-20260621-2.png differ
diff --git a/site/assets/social/customer-ai-deployment-loop-20260621-2.png b/site/assets/social/customer-ai-deployment-loop-20260621-2.png
new file mode 100644
index 0000000..266d163
Binary files /dev/null and b/site/assets/social/customer-ai-deployment-loop-20260621-2.png differ
diff --git a/site/assets/social/devils-advocate-design-loop-20260621-2.png b/site/assets/social/devils-advocate-design-loop-20260621-2.png
new file mode 100644
index 0000000..542b4d5
Binary files /dev/null and b/site/assets/social/devils-advocate-design-loop-20260621-2.png differ
diff --git a/site/assets/social/easy-onboarding-loop-20260621-2.png b/site/assets/social/easy-onboarding-loop-20260621-2.png
new file mode 100644
index 0000000..5ab9e65
Binary files /dev/null and b/site/assets/social/easy-onboarding-loop-20260621-2.png differ
diff --git a/site/assets/social/exhaustive-logging-coverage-loop-20260621-2.png b/site/assets/social/exhaustive-logging-coverage-loop-20260621-2.png
new file mode 100644
index 0000000..cda40ae
Binary files /dev/null and b/site/assets/social/exhaustive-logging-coverage-loop-20260621-2.png differ
diff --git a/site/assets/social/five-minute-repository-maintainer-loop-20260621-2.png b/site/assets/social/five-minute-repository-maintainer-loop-20260621-2.png
new file mode 100644
index 0000000..d05d1c6
Binary files /dev/null and b/site/assets/social/five-minute-repository-maintainer-loop-20260621-2.png differ
diff --git a/site/assets/social/fresh-clone-loop-20260621-2.png b/site/assets/social/fresh-clone-loop-20260621-2.png
new file mode 100644
index 0000000..5f11a12
Binary files /dev/null and b/site/assets/social/fresh-clone-loop-20260621-2.png differ
diff --git a/site/assets/social/full-product-evaluation-loop-20260621-2.png b/site/assets/social/full-product-evaluation-loop-20260621-2.png
new file mode 100644
index 0000000..046cebc
Binary files /dev/null and b/site/assets/social/full-product-evaluation-loop-20260621-2.png differ
diff --git a/site/assets/social/goal-forge-loop-20260621-2.png b/site/assets/social/goal-forge-loop-20260621-2.png
new file mode 100644
index 0000000..dc7ecd5
Binary files /dev/null and b/site/assets/social/goal-forge-loop-20260621-2.png differ
diff --git a/site/assets/social/groundtruth-audit-loop-20260621-2.png b/site/assets/social/groundtruth-audit-loop-20260621-2.png
new file mode 100644
index 0000000..80a1a73
Binary files /dev/null and b/site/assets/social/groundtruth-audit-loop-20260621-2.png differ
diff --git a/site/assets/social/housekeeper-loop-20260621-2.png b/site/assets/social/housekeeper-loop-20260621-2.png
new file mode 100644
index 0000000..0094ad6
Binary files /dev/null and b/site/assets/social/housekeeper-loop-20260621-2.png differ
diff --git a/site/assets/social/infinite-clickbait-loop-20260621-2.png b/site/assets/social/infinite-clickbait-loop-20260621-2.png
new file mode 100644
index 0000000..f8106ad
Binary files /dev/null and b/site/assets/social/infinite-clickbait-loop-20260621-2.png differ
diff --git a/site/assets/social/living-story-loop-20260621-2.png b/site/assets/social/living-story-loop-20260621-2.png
new file mode 100644
index 0000000..c7545ee
Binary files /dev/null and b/site/assets/social/living-story-loop-20260621-2.png differ
diff --git a/site/assets/social/loop-harness-verification-loop-20260621-2.png b/site/assets/social/loop-harness-verification-loop-20260621-2.png
new file mode 100644
index 0000000..83b86d8
Binary files /dev/null and b/site/assets/social/loop-harness-verification-loop-20260621-2.png differ
diff --git a/site/assets/social/loop-library-20260621-2.png b/site/assets/social/loop-library-20260621-2.png
new file mode 100644
index 0000000..af7d235
Binary files /dev/null and b/site/assets/social/loop-library-20260621-2.png differ
diff --git a/site/assets/social/multi-llm-convergence-loop-20260621-2.png b/site/assets/social/multi-llm-convergence-loop-20260621-2.png
new file mode 100644
index 0000000..c798afd
Binary files /dev/null and b/site/assets/social/multi-llm-convergence-loop-20260621-2.png differ
diff --git a/site/assets/social/nightly-changelog-sweep-20260621-2.png b/site/assets/social/nightly-changelog-sweep-20260621-2.png
new file mode 100644
index 0000000..47aa6db
Binary files /dev/null and b/site/assets/social/nightly-changelog-sweep-20260621-2.png differ
diff --git a/site/assets/social/overnight-docs-sweep-20260621-2.png b/site/assets/social/overnight-docs-sweep-20260621-2.png
new file mode 100644
index 0000000..e0e2ceb
Binary files /dev/null and b/site/assets/social/overnight-docs-sweep-20260621-2.png differ
diff --git a/site/assets/social/pixel-safe-css-trim-loop-20260621-2.png b/site/assets/social/pixel-safe-css-trim-loop-20260621-2.png
new file mode 100644
index 0000000..c600ca6
Binary files /dev/null and b/site/assets/social/pixel-safe-css-trim-loop-20260621-2.png differ
diff --git a/site/assets/social/post-release-baseline-loop-20260621-2.png b/site/assets/social/post-release-baseline-loop-20260621-2.png
new file mode 100644
index 0000000..6ee204a
Binary files /dev/null and b/site/assets/social/post-release-baseline-loop-20260621-2.png differ
diff --git a/site/assets/social/prepare-new-project-loop-20260621-2.png b/site/assets/social/prepare-new-project-loop-20260621-2.png
new file mode 100644
index 0000000..d83fd95
Binary files /dev/null and b/site/assets/social/prepare-new-project-loop-20260621-2.png differ
diff --git a/site/assets/social/product-update-podcast-loop-20260621-2.png b/site/assets/social/product-update-podcast-loop-20260621-2.png
new file mode 100644
index 0000000..ec4c218
Binary files /dev/null and b/site/assets/social/product-update-podcast-loop-20260621-2.png differ
diff --git a/site/assets/social/production-data-cleanup-loop-20260621-2.png b/site/assets/social/production-data-cleanup-loop-20260621-2.png
new file mode 100644
index 0000000..4740533
Binary files /dev/null and b/site/assets/social/production-data-cleanup-loop-20260621-2.png differ
diff --git a/site/assets/social/production-error-sweep-20260621-2.png b/site/assets/social/production-error-sweep-20260621-2.png
new file mode 100644
index 0000000..b309261
Binary files /dev/null and b/site/assets/social/production-error-sweep-20260621-2.png differ
diff --git a/site/assets/social/promise-to-proof-loop-20260621-2.png b/site/assets/social/promise-to-proof-loop-20260621-2.png
new file mode 100644
index 0000000..d12cd45
Binary files /dev/null and b/site/assets/social/promise-to-proof-loop-20260621-2.png differ
diff --git a/site/assets/social/propagation-compliance-loop-20260621-2.png b/site/assets/social/propagation-compliance-loop-20260621-2.png
new file mode 100644
index 0000000..854ae8f
Binary files /dev/null and b/site/assets/social/propagation-compliance-loop-20260621-2.png differ
diff --git a/site/assets/social/quality-streak-loop-20260621-2.png b/site/assets/social/quality-streak-loop-20260621-2.png
new file mode 100644
index 0000000..f89c1dd
Binary files /dev/null and b/site/assets/social/quality-streak-loop-20260621-2.png differ
diff --git a/site/assets/social/recent-feedback-sweep-20260621-2.png b/site/assets/social/recent-feedback-sweep-20260621-2.png
new file mode 100644
index 0000000..085ac8d
Binary files /dev/null and b/site/assets/social/recent-feedback-sweep-20260621-2.png differ
diff --git a/site/assets/social/recovery-proof-loop-20260621-2.png b/site/assets/social/recovery-proof-loop-20260621-2.png
new file mode 100644
index 0000000..d23b92a
Binary files /dev/null and b/site/assets/social/recovery-proof-loop-20260621-2.png differ
diff --git a/site/assets/social/refund-follow-up-loop-20260621-2.png b/site/assets/social/refund-follow-up-loop-20260621-2.png
new file mode 100644
index 0000000..5119809
Binary files /dev/null and b/site/assets/social/refund-follow-up-loop-20260621-2.png differ
diff --git a/site/assets/social/repository-cleanup-loop-20260621-2.png b/site/assets/social/repository-cleanup-loop-20260621-2.png
new file mode 100644
index 0000000..321bacf
Binary files /dev/null and b/site/assets/social/repository-cleanup-loop-20260621-2.png differ
diff --git a/site/assets/social/revolve-self-improvement-loop-20260621-2.png b/site/assets/social/revolve-self-improvement-loop-20260621-2.png
new file mode 100644
index 0000000..4050a83
Binary files /dev/null and b/site/assets/social/revolve-self-improvement-loop-20260621-2.png differ
diff --git a/site/assets/social/self-improving-champion-loop-20260621-2.png b/site/assets/social/self-improving-champion-loop-20260621-2.png
new file mode 100644
index 0000000..a910e86
Binary files /dev/null and b/site/assets/social/self-improving-champion-loop-20260621-2.png differ
diff --git a/site/assets/social/seo-geo-visibility-loop-20260621-2.png b/site/assets/social/seo-geo-visibility-loop-20260621-2.png
new file mode 100644
index 0000000..e86d7cb
Binary files /dev/null and b/site/assets/social/seo-geo-visibility-loop-20260621-2.png differ
diff --git a/site/assets/social/stale-safe-batch-release-loop-20260621-2.png b/site/assets/social/stale-safe-batch-release-loop-20260621-2.png
new file mode 100644
index 0000000..e263759
Binary files /dev/null and b/site/assets/social/stale-safe-batch-release-loop-20260621-2.png differ
diff --git a/site/assets/social/strip-miner-loop-20260621-2.png b/site/assets/social/strip-miner-loop-20260621-2.png
new file mode 100644
index 0000000..4399c7e
Binary files /dev/null and b/site/assets/social/strip-miner-loop-20260621-2.png differ
diff --git a/site/assets/social/sub-50ms-page-load-loop-20260621-2.png b/site/assets/social/sub-50ms-page-load-loop-20260621-2.png
new file mode 100644
index 0000000..8805ced
Binary files /dev/null and b/site/assets/social/sub-50ms-page-load-loop-20260621-2.png differ
diff --git a/site/assets/social/test-stabilizer-loop-20260621-2.png b/site/assets/social/test-stabilizer-loop-20260621-2.png
new file mode 100644
index 0000000..188576f
Binary files /dev/null and b/site/assets/social/test-stabilizer-loop-20260621-2.png differ
diff --git a/site/assets/social/test-suite-speed-loop-20260621-2.png b/site/assets/social/test-suite-speed-loop-20260621-2.png
new file mode 100644
index 0000000..e50f98f
Binary files /dev/null and b/site/assets/social/test-suite-speed-loop-20260621-2.png differ
diff --git a/site/assets/social/ticket-to-pr-ready-loop-20260621-2.png b/site/assets/social/ticket-to-pr-ready-loop-20260621-2.png
new file mode 100644
index 0000000..d57625d
Binary files /dev/null and b/site/assets/social/ticket-to-pr-ready-loop-20260621-2.png differ
diff --git a/site/assets/social/ui-ux-score-loop-20260621-2.png b/site/assets/social/ui-ux-score-loop-20260621-2.png
new file mode 100644
index 0000000..a084be7
Binary files /dev/null and b/site/assets/social/ui-ux-score-loop-20260621-2.png differ
diff --git a/site/assets/social/war-loops-frontend-designer-20260621-2.png b/site/assets/social/war-loops-frontend-designer-20260621-2.png
new file mode 100644
index 0000000..6dd3ad7
Binary files /dev/null and b/site/assets/social/war-loops-frontend-designer-20260621-2.png differ
diff --git a/site/catalog.json b/site/catalog.json
index 5a45ac6..97580db 100644
--- a/site/catalog.json
+++ b/site/catalog.json
@@ -20,7 +20,7 @@
"adaptation": "Use only details supplied by the user or found in systems they placed in scope. Ask when a missing detail is necessary for safety or success."
},
"updated": "2026-06-21",
- "loopCount": 49,
+ "loopCount": 50,
"categories": [
{
"slug": "engineering",
@@ -2411,6 +2411,58 @@
"url": "https://signals.forwardfuture.ai/loop-library/loops/production-error-sweep/"
}
]
+ },
+ {
+ "number": "050",
+ "slug": "refund-follow-up-loop",
+ "title": "The refund follow-up loop",
+ "url": "https://signals.forwardfuture.ai/loop-library/loops/refund-follow-up-loop/",
+ "category": {
+ "slug": "operations",
+ "label": "Operations"
+ },
+ "author": "Jason (@jxnlco)",
+ "published": "2026-06-21",
+ "modified": "2026-06-21",
+ "description": "A persistent follow-up workflow that starts a refund claim, watches replies and deadlines, and keeps the case moving until the money arrives.",
+ "useWhen": "Use this when someone owes you a refund and getting it may take more than one support conversation or follow-up.",
+ "prompt": "Get my refund for [company and charge info]. Start the claim now through an approved support channel, then keep following up on replies, promises, and deadlines until the refund arrives. Keep a short case note so each follow-up has context. Stop only when the refund is received or you are genuinely blocked and need me.",
+ "verification": {
+ "title": "The refund is received, or a genuine blocker requires the user.",
+ "detail": "An open claim, promise, or pending refund is progress, not success; keep following up until the money arrives or no approved next step remains."
+ },
+ "steps": [
+ "Gather the charge, reason for the refund, useful evidence, current status, and any earlier conversation or promise.",
+ "Start or continue the claim through a support channel the user has approved, then note what happened and what should happen next.",
+ "Follow up whenever a reply, promise, or deadline creates a useful next step; keep the case moving instead of treating a pending status as done.",
+ "Stop when the refund arrives, or explain the genuine blocker when the next useful step needs the user."
+ ],
+ "why": "Refunds often stall because a promise or pending status gets treated as completion. This loop keeps ownership through delays and handoffs until the money actually arrives.",
+ "implementationNote": "Use truthful information and the permissions already granted. If the next step needs a new permission or decision, bring that blocker to the user instead of stopping silently.",
+ "keywords": [
+ "refund follow up",
+ "consumer advocacy",
+ "customer support escalation",
+ "refund status tracking",
+ "case log"
+ ],
+ "related": [
+ {
+ "slug": "promise-to-proof-loop",
+ "title": "The promise-to-proof loop",
+ "url": "https://signals.forwardfuture.ai/loop-library/loops/promise-to-proof-loop/"
+ },
+ {
+ "slug": "living-story-loop",
+ "title": "The Living Story loop",
+ "url": "https://signals.forwardfuture.ai/loop-library/loops/living-story-loop/"
+ },
+ {
+ "slug": "recent-feedback-sweep",
+ "title": "The recent-feedback sweep",
+ "url": "https://signals.forwardfuture.ai/loop-library/loops/recent-feedback-sweep/"
+ }
+ ]
}
]
}
diff --git a/site/catalog.md b/site/catalog.md
index 7276fee..5f7b36e 100644
--- a/site/catalog.md
+++ b/site/catalog.md
@@ -450,3 +450,12 @@ URL above.
- Verify: Every required recovery scenario succeeds repeatedly from a real recovery point. Fresh clean-room restores satisfy integrity, dependency, representative read/write, RPO, and RTO checks under unchanged criteria, with failures preserved as regression drills and restored data destroyed securely.
- Keywords: backup recovery testing, disaster recovery drill, RPO and RTO validation, clean room restore, recovery proof
- Related: [The quality streak loop](https://signals.forwardfuture.ai/loop-library/loops/quality-streak-loop/), [The post-release baseline loop](https://signals.forwardfuture.ai/loop-library/loops/post-release-baseline-loop/), [The production error sweep](https://signals.forwardfuture.ai/loop-library/loops/production-error-sweep/)
+
+## 050 — [The refund follow-up loop](https://signals.forwardfuture.ai/loop-library/loops/refund-follow-up-loop/)
+
+- Category: Operations
+- Use when: Use this when someone owes you a refund and getting it may take more than one support conversation or follow-up.
+- Prompt: Get my refund for [company and charge info]. Start the claim now through an approved support channel, then keep following up on replies, promises, and deadlines until the refund arrives. Keep a short case note so each follow-up has context. Stop only when the refund is received or you are genuinely blocked and need me.
+- Verify: The refund is received, or a genuine blocker requires the user. An open claim, promise, or pending refund is progress, not success; keep following up until the money arrives or no approved next step remains.
+- Keywords: refund follow up, consumer advocacy, customer support escalation, refund status tracking, case log
+- Related: [The promise-to-proof loop](https://signals.forwardfuture.ai/loop-library/loops/promise-to-proof-loop/), [The Living Story loop](https://signals.forwardfuture.ai/loop-library/loops/living-story-loop/), [The recent-feedback sweep](https://signals.forwardfuture.ai/loop-library/loops/recent-feedback-sweep/)
diff --git a/site/catalog.txt b/site/catalog.txt
index 7276fee..5f7b36e 100644
--- a/site/catalog.txt
+++ b/site/catalog.txt
@@ -450,3 +450,12 @@ URL above.
- Verify: Every required recovery scenario succeeds repeatedly from a real recovery point. Fresh clean-room restores satisfy integrity, dependency, representative read/write, RPO, and RTO checks under unchanged criteria, with failures preserved as regression drills and restored data destroyed securely.
- Keywords: backup recovery testing, disaster recovery drill, RPO and RTO validation, clean room restore, recovery proof
- Related: [The quality streak loop](https://signals.forwardfuture.ai/loop-library/loops/quality-streak-loop/), [The post-release baseline loop](https://signals.forwardfuture.ai/loop-library/loops/post-release-baseline-loop/), [The production error sweep](https://signals.forwardfuture.ai/loop-library/loops/production-error-sweep/)
+
+## 050 — [The refund follow-up loop](https://signals.forwardfuture.ai/loop-library/loops/refund-follow-up-loop/)
+
+- Category: Operations
+- Use when: Use this when someone owes you a refund and getting it may take more than one support conversation or follow-up.
+- Prompt: Get my refund for [company and charge info]. Start the claim now through an approved support channel, then keep following up on replies, promises, and deadlines until the refund arrives. Keep a short case note so each follow-up has context. Stop only when the refund is received or you are genuinely blocked and need me.
+- Verify: The refund is received, or a genuine blocker requires the user. An open claim, promise, or pending refund is progress, not success; keep following up until the money arrives or no approved next step remains.
+- Keywords: refund follow up, consumer advocacy, customer support escalation, refund status tracking, case log
+- Related: [The promise-to-proof loop](https://signals.forwardfuture.ai/loop-library/loops/promise-to-proof-loop/), [The Living Story loop](https://signals.forwardfuture.ai/loop-library/loops/living-story-loop/), [The recent-feedback sweep](https://signals.forwardfuture.ai/loop-library/loops/recent-feedback-sweep/)
diff --git a/site/feed.xml b/site/feed.xml
index 880f6b2..46357da 100644
--- a/site/feed.xml
+++ b/site/feed.xml
@@ -549,4 +549,15 @@
A disaster-recovery validation workflow that restores randomly selected real recovery points, verifies integrity and RPO/RTO, and preserves failures as regression drills.
+
+ The refund follow-up loop
+ https://signals.forwardfuture.ai/loop-library/loops/refund-follow-up-loop/
+
+ 2026-06-21T00:00:00-07:00
+ 2026-06-21T00:00:00-07:00
+
+ Jason (@jxnlco)
+
+ A persistent follow-up workflow that starts a refund claim, watches replies and deadlines, and keeps the case moving until the money arrives.
+
diff --git a/site/index.html b/site/index.html
index 84db22f..c379948 100644
--- a/site/index.html
+++ b/site/index.html
@@ -58,11 +58,11 @@
/>
Keeps pursuing a refund until the money arrives or the agent genuinely needs the user.
+
+ Get my refund for [company and charge info]. Start the claim
+ now through an approved support channel, then keep following
+ up on replies, promises, and deadlines until the refund
+ arrives. Keep a short case note so each follow-up has
+ context. Stop only when the refund is received or you are
+ genuinely blocked and need me.
+
A persistent follow-up workflow that starts a refund claim, watches replies and deadlines, and keeps the case moving until the money arrives.
+
+ By Jason (@jxnlco)
+
+
+
+
+
+
+
+
+
+
+
Ready-to-use prompt
+
Copy the loop
+
+
+
+
Get my refund for [company and charge info]. Start the claim now through an approved support channel, then keep following up on replies, promises, and deadlines until the refund arrives. Keep a short case note so each follow-up has context. Stop only when the refund is received or you are genuinely blocked and need me.
+
+
+
+
Verify / stop
+
+
The refund is received, or a genuine blocker requires the user.
+
An open claim, promise, or pending refund is progress, not success; keep following up until the money arrives or no approved next step remains.
+
+
+
+
+
+ Context and guidance
+ When to use it, steps, safety notes, and related loops
+
+
+
+
+
+
Published
+
+
+
+
Updated
+
+
+
+
+
+
Use this when
+
Use this when someone owes you a refund and getting it may take more than one support conversation or follow-up.
+
+
+
+
How to run it
+
+
Gather the charge, reason for the refund, useful evidence, current status, and any earlier conversation or promise.
+
Start or continue the claim through a support channel the user has approved, then note what happened and what should happen next.
+
Follow up whenever a reply, promise, or deadline creates a useful next step; keep the case moving instead of treating a pending status as done.
+
Stop when the refund arrives, or explain the genuine blocker when the next useful step needs the user.
+
+
+
+
+
Why it works
+
Refunds often stall because a promise or pending status gets treated as completion. This loop keeps ownership through delays and handoffs until the money actually arrives.
+
+
+
+
Implementation note
+
Use truthful information and the permissions already granted. If the next step needs a new permission or decision, bring that blocker to the user instead of stopping silently.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/site/loops/repository-cleanup-loop/index.html b/site/loops/repository-cleanup-loop/index.html
index 7765d25..5418f90 100644
--- a/site/loops/repository-cleanup-loop/index.html
+++ b/site/loops/repository-cleanup-loop/index.html
@@ -38,8 +38,8 @@
-
-
+
+
@@ -49,7 +49,7 @@
-
+
@@ -102,7 +102,7 @@
],
"image": {
"@type": "ImageObject",
- "url": "https://signals.forwardfuture.ai/loop-library/assets/social/repository-cleanup-loop-20260621.png",
+ "url": "https://signals.forwardfuture.ai/loop-library/assets/social/repository-cleanup-loop-20260621-2.png",
"width": 1200,
"height": 630
},
diff --git a/site/loops/revolve-self-improvement-loop/index.html b/site/loops/revolve-self-improvement-loop/index.html
index 85c9f51..78146d9 100644
--- a/site/loops/revolve-self-improvement-loop/index.html
+++ b/site/loops/revolve-self-improvement-loop/index.html
@@ -38,8 +38,8 @@
-
-
+
+
@@ -49,7 +49,7 @@
-
+
@@ -102,7 +102,7 @@
],
"image": {
"@type": "ImageObject",
- "url": "https://signals.forwardfuture.ai/loop-library/assets/social/revolve-self-improvement-loop-20260621.png",
+ "url": "https://signals.forwardfuture.ai/loop-library/assets/social/revolve-self-improvement-loop-20260621-2.png",
"width": 1200,
"height": 630
},
diff --git a/site/loops/self-improving-champion-loop/index.html b/site/loops/self-improving-champion-loop/index.html
index f705d0d..d282295 100644
--- a/site/loops/self-improving-champion-loop/index.html
+++ b/site/loops/self-improving-champion-loop/index.html
@@ -38,8 +38,8 @@
-
-
+
+
@@ -49,7 +49,7 @@
-
+
@@ -102,7 +102,7 @@
],
"image": {
"@type": "ImageObject",
- "url": "https://signals.forwardfuture.ai/loop-library/assets/social/self-improving-champion-loop-20260621.png",
+ "url": "https://signals.forwardfuture.ai/loop-library/assets/social/self-improving-champion-loop-20260621-2.png",
"width": 1200,
"height": 630
},
diff --git a/site/loops/seo-geo-visibility-loop/index.html b/site/loops/seo-geo-visibility-loop/index.html
index 3ebde05..b91eb0e 100644
--- a/site/loops/seo-geo-visibility-loop/index.html
+++ b/site/loops/seo-geo-visibility-loop/index.html
@@ -38,8 +38,8 @@
-
-
+
+
@@ -49,7 +49,7 @@
-
+
@@ -102,7 +102,7 @@
],
"image": {
"@type": "ImageObject",
- "url": "https://signals.forwardfuture.ai/loop-library/assets/social/seo-geo-visibility-loop-20260621.png",
+ "url": "https://signals.forwardfuture.ai/loop-library/assets/social/seo-geo-visibility-loop-20260621-2.png",
"width": 1200,
"height": 630
},
diff --git a/site/loops/stale-safe-batch-release-loop/index.html b/site/loops/stale-safe-batch-release-loop/index.html
index 1b03e0a..efb5abc 100644
--- a/site/loops/stale-safe-batch-release-loop/index.html
+++ b/site/loops/stale-safe-batch-release-loop/index.html
@@ -38,8 +38,8 @@
-
-
+
+
@@ -49,7 +49,7 @@
-
+
@@ -102,7 +102,7 @@
],
"image": {
"@type": "ImageObject",
- "url": "https://signals.forwardfuture.ai/loop-library/assets/social/stale-safe-batch-release-loop-20260621.png",
+ "url": "https://signals.forwardfuture.ai/loop-library/assets/social/stale-safe-batch-release-loop-20260621-2.png",
"width": 1200,
"height": 630
},
diff --git a/site/loops/strip-miner-loop/index.html b/site/loops/strip-miner-loop/index.html
index 1564d99..29a479f 100644
--- a/site/loops/strip-miner-loop/index.html
+++ b/site/loops/strip-miner-loop/index.html
@@ -38,8 +38,8 @@
-
-
+
+
@@ -49,7 +49,7 @@
-
+
@@ -102,7 +102,7 @@
],
"image": {
"@type": "ImageObject",
- "url": "https://signals.forwardfuture.ai/loop-library/assets/social/strip-miner-loop-20260621.png",
+ "url": "https://signals.forwardfuture.ai/loop-library/assets/social/strip-miner-loop-20260621-2.png",
"width": 1200,
"height": 630
},
diff --git a/site/loops/sub-50ms-page-load-loop/index.html b/site/loops/sub-50ms-page-load-loop/index.html
index d48e7c7..f495c88 100644
--- a/site/loops/sub-50ms-page-load-loop/index.html
+++ b/site/loops/sub-50ms-page-load-loop/index.html
@@ -38,8 +38,8 @@
-
-
+
+
@@ -49,7 +49,7 @@
-
+
@@ -102,7 +102,7 @@
],
"image": {
"@type": "ImageObject",
- "url": "https://signals.forwardfuture.ai/loop-library/assets/social/sub-50ms-page-load-loop-20260621.png",
+ "url": "https://signals.forwardfuture.ai/loop-library/assets/social/sub-50ms-page-load-loop-20260621-2.png",
"width": 1200,
"height": 630
},
diff --git a/site/loops/test-stabilizer-loop/index.html b/site/loops/test-stabilizer-loop/index.html
index 1d4b51e..c29ea56 100644
--- a/site/loops/test-stabilizer-loop/index.html
+++ b/site/loops/test-stabilizer-loop/index.html
@@ -38,8 +38,8 @@
-
-
+
+
@@ -49,7 +49,7 @@
-
+
@@ -102,7 +102,7 @@
],
"image": {
"@type": "ImageObject",
- "url": "https://signals.forwardfuture.ai/loop-library/assets/social/test-stabilizer-loop-20260621.png",
+ "url": "https://signals.forwardfuture.ai/loop-library/assets/social/test-stabilizer-loop-20260621-2.png",
"width": 1200,
"height": 630
},
diff --git a/site/loops/test-suite-speed-loop/index.html b/site/loops/test-suite-speed-loop/index.html
index e1064ff..e30c6a9 100644
--- a/site/loops/test-suite-speed-loop/index.html
+++ b/site/loops/test-suite-speed-loop/index.html
@@ -38,8 +38,8 @@
-
-
+
+
@@ -49,7 +49,7 @@
-
+
@@ -102,7 +102,7 @@
],
"image": {
"@type": "ImageObject",
- "url": "https://signals.forwardfuture.ai/loop-library/assets/social/test-suite-speed-loop-20260621.png",
+ "url": "https://signals.forwardfuture.ai/loop-library/assets/social/test-suite-speed-loop-20260621-2.png",
"width": 1200,
"height": 630
},
diff --git a/site/loops/ticket-to-pr-ready-loop/index.html b/site/loops/ticket-to-pr-ready-loop/index.html
index 6183195..7ba414f 100644
--- a/site/loops/ticket-to-pr-ready-loop/index.html
+++ b/site/loops/ticket-to-pr-ready-loop/index.html
@@ -38,8 +38,8 @@
-
-
+
+
@@ -49,7 +49,7 @@
-
+
@@ -102,7 +102,7 @@
],
"image": {
"@type": "ImageObject",
- "url": "https://signals.forwardfuture.ai/loop-library/assets/social/ticket-to-pr-ready-loop-20260621.png",
+ "url": "https://signals.forwardfuture.ai/loop-library/assets/social/ticket-to-pr-ready-loop-20260621-2.png",
"width": 1200,
"height": 630
},
diff --git a/site/loops/ui-ux-score-loop/index.html b/site/loops/ui-ux-score-loop/index.html
index 9d26b4b..018957b 100644
--- a/site/loops/ui-ux-score-loop/index.html
+++ b/site/loops/ui-ux-score-loop/index.html
@@ -38,8 +38,8 @@
-
-
+
+
@@ -49,7 +49,7 @@
-
+
@@ -102,7 +102,7 @@
],
"image": {
"@type": "ImageObject",
- "url": "https://signals.forwardfuture.ai/loop-library/assets/social/ui-ux-score-loop-20260621.png",
+ "url": "https://signals.forwardfuture.ai/loop-library/assets/social/ui-ux-score-loop-20260621-2.png",
"width": 1200,
"height": 630
},
diff --git a/site/loops/war-loops-frontend-designer/index.html b/site/loops/war-loops-frontend-designer/index.html
index 82b5d8a..939f710 100644
--- a/site/loops/war-loops-frontend-designer/index.html
+++ b/site/loops/war-loops-frontend-designer/index.html
@@ -38,8 +38,8 @@
-
-
+
+
@@ -49,7 +49,7 @@
-
+
@@ -102,7 +102,7 @@
],
"image": {
"@type": "ImageObject",
- "url": "https://signals.forwardfuture.ai/loop-library/assets/social/war-loops-frontend-designer-20260621.png",
+ "url": "https://signals.forwardfuture.ai/loop-library/assets/social/war-loops-frontend-designer-20260621-2.png",
"width": 1200,
"height": 630
},
diff --git a/site/sitemap.xml b/site/sitemap.xml
index c7ea331..eba8749 100644
--- a/site/sitemap.xml
+++ b/site/sitemap.xml
@@ -208,4 +208,8 @@
https://signals.forwardfuture.ai/loop-library/loops/recovery-proof-loop/2026-06-21
+
+ https://signals.forwardfuture.ai/loop-library/loops/refund-follow-up-loop/
+ 2026-06-21
+
diff --git a/skills/loop-library/references/catalog.md b/skills/loop-library/references/catalog.md
index 7276fee..5f7b36e 100644
--- a/skills/loop-library/references/catalog.md
+++ b/skills/loop-library/references/catalog.md
@@ -450,3 +450,12 @@ URL above.
- Verify: Every required recovery scenario succeeds repeatedly from a real recovery point. Fresh clean-room restores satisfy integrity, dependency, representative read/write, RPO, and RTO checks under unchanged criteria, with failures preserved as regression drills and restored data destroyed securely.
- Keywords: backup recovery testing, disaster recovery drill, RPO and RTO validation, clean room restore, recovery proof
- Related: [The quality streak loop](https://signals.forwardfuture.ai/loop-library/loops/quality-streak-loop/), [The post-release baseline loop](https://signals.forwardfuture.ai/loop-library/loops/post-release-baseline-loop/), [The production error sweep](https://signals.forwardfuture.ai/loop-library/loops/production-error-sweep/)
+
+## 050 — [The refund follow-up loop](https://signals.forwardfuture.ai/loop-library/loops/refund-follow-up-loop/)
+
+- Category: Operations
+- Use when: Use this when someone owes you a refund and getting it may take more than one support conversation or follow-up.
+- Prompt: Get my refund for [company and charge info]. Start the claim now through an approved support channel, then keep following up on replies, promises, and deadlines until the refund arrives. Keep a short case note so each follow-up has context. Stop only when the refund is received or you are genuinely blocked and need me.
+- Verify: The refund is received, or a genuine blocker requires the user. An open claim, promise, or pending refund is progress, not success; keep following up until the money arrives or no approved next step remains.
+- Keywords: refund follow up, consumer advocacy, customer support escalation, refund status tracking, case log
+- Related: [The promise-to-proof loop](https://signals.forwardfuture.ai/loop-library/loops/promise-to-proof-loop/), [The Living Story loop](https://signals.forwardfuture.ai/loop-library/loops/living-story-loop/), [The recent-feedback sweep](https://signals.forwardfuture.ai/loop-library/loops/recent-feedback-sweep/)