Back to the catalog

POSTFACT — Resolve Ambiguous Side Effects Before Retry

Resolve whether an uncertain side-effecting action completed before software retries it.

Open source Repository Open in the app JSON README (API)

About

Resolve whether an uncertain side-effecting action completed before software retries it.

Details

Kind
MCP servers
Topic
No topic detected
Publisher
gsterlingpress
Origin
official
Category
ferramentas
Transport
http
Version
0.1.0
Last push
2026-09-04T08:57:47Z
Repository state
ativo
Language
JavaScript
Added
2026-08-29 03:01:55
Updated
2026-08-29 03:01:55
Origin id
io.github.GSterlingPress/postfact

README

# POSTFACT

**Did the call actually happen?**

POSTFACT is a tiny ambiguous-outcome resolver for autonomous software. Use it after a side-effecting API/tool action fails ambiguously and **before retrying**.

Production: `https://postfact-api-production.up.railway.app`

It is intentionally strict:

- `DONE` only when affirmative evidence establishes completion.
- `NOT_DONE` only when affirmative evidence establishes non-execution.
- `UNKNOWN` whenever evidence is insufficient. `UNKNOWN` is the safe default.

POSTFACT does not execute the underlying action, move money, or pretend a timeout means failure.

## REST

Production endpoint: `POST https://postfact-api-production.up.railway.app/v1/resolve`

Input accepts method/status/failure, side-effect and idempotency context, durable references, and optional affirmative evidence. Output is `state`, `retry_safe`, `confidence`, `evidence`, and `next`.

## MCP

Remote endpoint: `POST https://postfact-api-production.up.railway.app/mcp`

Tool: `resolve_outcome`

The tool description explicitly tells agents to invoke POSTFACT after an ambiguous side-effect failure and before retry.

## Middleware-shaped contract

```js
const outcome = await postfact.resolve(failureContext)
if (outcome.state === 'DONE') return completed
if (outcome.state === 'NOT_DONE' && outcome.retry_safe) return retry()
return verifyOrHold()
```

Future SDKs can wrap retry middleware without changing the wire contract.

## POSTFACT + RECOVER

POSTFACT answers **what can we establish happened?** RECOVER answers **what is the safest next action?** A future retry stack can call POSTFACT first, then RECOVER when the outcome remains uncertain.

## Safe discovery and demo

- Health: `GET https://postfact-api-production.up.railway.app/health`
- Demo: `GET https://postfact-api-production.up.railway.app/demo`
- Activity: `GET https://postfact-api-production.up.railway.app/activity`
- Machine-readable activity: `GET https://postfact-api-production.up.railway.app/activity.json`

`GET /demo` is deliberately excluded from real-use analytics.

## Real-use scoreboard

`GET /activity` shows the permanent FIRST 10 TRUE STRANGERS scoreboard. `GET /activity.json` exposes its machine-readable summary. Demo/internal traffic is excluded. Production persistent storage is mounted at `/data`.

## Run

```bash
npm test
npm start
```

Default port: `8080`.

More