Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion scripts/check.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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"]],
Expand Down Expand Up @@ -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"]],
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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",
Expand Down
50 changes: 48 additions & 2 deletions scripts/loop-data.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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",
};
Expand All @@ -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([
Expand All @@ -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"],
Expand Down Expand Up @@ -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);
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added site/assets/social/autonomy-loop-20260621-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added site/assets/social/loop-library-20260621-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
54 changes: 53 additions & 1 deletion site/catalog.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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/"
}
]
}
]
}
9 changes: 9 additions & 0 deletions site/catalog.md
Original file line number Diff line number Diff line change
Expand Up @@ -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/)
9 changes: 9 additions & 0 deletions site/catalog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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/)
11 changes: 11 additions & 0 deletions site/feed.xml
Original file line number Diff line number Diff line change
Expand Up @@ -549,4 +549,15 @@
</author>
<summary>A disaster-recovery validation workflow that restores randomly selected real recovery points, verifies integrity and RPO/RTO, and preserves failures as regression drills.</summary>
</entry>
<entry>
<title>The refund follow-up loop</title>
<id>https://signals.forwardfuture.ai/loop-library/loops/refund-follow-up-loop/</id>
<link href="https://signals.forwardfuture.ai/loop-library/loops/refund-follow-up-loop/" />
<published>2026-06-21T00:00:00-07:00</published>
<updated>2026-06-21T00:00:00-07:00</updated>
<author>
<name>Jason (@jxnlco)</name>
</author>
<summary>A persistent follow-up workflow that starts a refund claim, watches replies and deadlines, and keeps the case moving until the money arrives.</summary>
</entry>
</feed>
56 changes: 48 additions & 8 deletions site/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,11 @@
/>
<meta
property="og:image"
content="https://signals.forwardfuture.ai/loop-library/assets/social/loop-library-20260621.png"
content="https://signals.forwardfuture.ai/loop-library/assets/social/loop-library-20260621-2.png"
/>
<meta
property="og:image:secure_url"
content="https://signals.forwardfuture.ai/loop-library/assets/social/loop-library-20260621.png"
content="https://signals.forwardfuture.ai/loop-library/assets/social/loop-library-20260621-2.png"
/>
<meta property="og:image:type" content="image/png" />
<meta
Expand All @@ -82,7 +82,7 @@
/>
<meta
name="twitter:image"
content="https://signals.forwardfuture.ai/loop-library/assets/social/loop-library-20260621.png"
content="https://signals.forwardfuture.ai/loop-library/assets/social/loop-library-20260621-2.png"
/>
<meta
name="twitter:image:alt"
Expand Down Expand Up @@ -168,7 +168,7 @@
"dateModified": "2026-06-21",
"primaryImageOfPage": {
"@type": "ImageObject",
"url": "https://signals.forwardfuture.ai/loop-library/assets/social/loop-library-20260621.png",
"url": "https://signals.forwardfuture.ai/loop-library/assets/social/loop-library-20260621-2.png",
"width": 1200,
"height": 630
},
Expand All @@ -180,7 +180,7 @@
},
"mainEntity": {
"@type": "ItemList",
"numberOfItems": 49,
"numberOfItems": 50,
"itemListElement": [
{
"@type": "ListItem",
Expand Down Expand Up @@ -475,6 +475,12 @@
"position": 49,
"name": "The Recovery Proof loop",
"url": "https://signals.forwardfuture.ai/loop-library/loops/recovery-proof-loop/"
},
{
"@type": "ListItem",
"position": 50,
"name": "The refund follow-up loop",
"url": "https://signals.forwardfuture.ai/loop-library/loops/refund-follow-up-loop/"
}
]
}
Expand Down Expand Up @@ -706,7 +712,7 @@ <h2 id="agent-skill-title">
</div>

<div class="results-line">
<p id="results-count" aria-live="polite">Showing 49 loops</p>
<p id="results-count" aria-live="polite">Showing 50 loops</p>
<time datetime="2026-06-21">Updated June 21, 2026</time>
</div>

Expand Down Expand Up @@ -1546,12 +1552,10 @@ <h3>
data-copy-root
data-category="engineering"
data-published="2026-06-18"
data-featured="true"
data-search="fresh clone clean environment readme onboarding setup documentation hidden assumptions disposable 0xumbra"
>
<td class="cell-loop">
<div class="loop-meta">
<span class="loop-featured">Featured</span>
<span class="loop-category">Engineering</span>
<span class="loop-attribution">By 0xUmbra</span>
</div>
Expand Down Expand Up @@ -2478,6 +2482,42 @@ <h3>
</td>
</tr>

<tr
class="loop-row"
data-copy-root
data-category="operations"
data-published="2026-06-21"
data-featured="true"
data-search="refund follow up consumer advocacy customer support escalation status tracking case log jason jxnlco"
>
<td class="cell-loop">
<div class="loop-meta">
<span class="loop-featured">Featured</span>
<span class="loop-category">Operations</span>
<span class="loop-attribution">By Jason (@jxnlco)</span>
</div>
<h3>
<a class="loop-title-link" href="./loops/refund-follow-up-loop/">
The refund follow-up loop
</a>
</h3>
<p class="loop-summary">Keeps pursuing a refund until the money arrives or the agent genuinely needs the user.</p>
<p data-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.
</p>
</td>
<td class="cell-action">
<button class="copy-button" type="button">
<span>Copy loop</span>
</button>
</td>
</tr>

</tbody>
</table>
</div>
Expand Down
2 changes: 1 addition & 1 deletion site/llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,4 @@ For guided finding, auditing, repairing, adapting, and designing loops:

`npx skills add Forward-Future/loop-library --skill loop-library -g`

Catalog updated 2026-06-21. Published loops: 49.
Catalog updated 2026-06-21. Published loops: 50.
Loading
Loading