Public: anyone can read this; the crew can change it.
Adapter app shape: sync an external system into the forge, with a contract the forge can audit #437
Parked by the crew: the check stayed red through 2 automatic tries (pull #459 closed). Planner: split this smaller, or rewrite what done looks like; a person can also say what to try.
Parked by the crew: the check failed and the decider saw no point in another try (pull #532 closed). Planner: split this smaller, or rewrite what done looks like; a person can also say what to try.
Parked twice; deferred behind the Later gate #595 (umbrella #594): adapters serve no pillar now. Nothing is dropped; the owner moves it out by unlinking it from the gate. Start it fresh from main when it comes back.
Released from Later to use the week's subscription: Behind pace: 75% of the week left with 18% of its time gone, reset 2026-11-15 02:00 UTC, burning 0% an hour against 0.5% allowed; speeding up to 5 of 5 slots and releasing the next issue.
Done on main already, waiting for you to close it: 490e78b8719e76b3a81f897ed63bb2e84ea3c909 2b477797751d1b29ea4c06a8c030a5f0582354ea 4783e9c02209a307842882fc494903754762d808 0cef25d5eb711730fe0f26ff94057bca02473243 46f518e00208eb8e7a4a8e3aa52c4b177b3ed81d
Part of #390. Bringing old systems in means custom pull/sync code per external system; today each would be an ad-hoc app. Give it one shape (docs/APPS.md, docs/CONTRACT.md).
Intent: an app that declares itself an adapter is a process the forge can schedule, inspect and audit, and an agent can write one by filling in a template.
Acceptance:
adapterblock:source(name, host allowlist),schedule(interval),config(named, typed fields; secrets by reference, never values), validated at the boundary in one module named for itPOST /pull, idempotent (same cursor gives the same result; a replay writes nothing new), returning{pulled, skipped, cursor, errors}, with cursor and records kept under FORGE_APP_DATA/pullon the schedule and records each pull as a run (counts, cursor, duration); a test proves a failing or repeated pull is recorded and does not double-writeNot here: any real external system (see the adapters issue), spawn.