Reference · Changelog
Changelog
Public API and platform changes are tracked here as Esy formalizes runtime contracts. Breaking changes will move to a new versioned path; non-breaking additions ship continuously.
2026-07-07
platformSpecialty: the demand hierarchy — team produces → worker specialty → goals
- A team is a department, named for what it produces: teams gain a “produces” domain, and members inherit it as their specialty when they don’t state a narrower one.
- A worker’s specialty (formerly “description”) now steers every shift’s planning — identity that never reached the planner produced off-mission batches.
- No worker without a WHAT: creation requires a specialty or a producing team; shifts refuse to run without one, loudly.
- Reporters may not flatter: reports describe the record’s actual categories and must flag batches that don’t match the specialty.
- The new-worker form gains a Publishing choice (publish classified work / keep private) — previously new workers silently never published.
2026-07-07
platformThe publish routing framework: the fence, Solo outlets, provenance, syndication
- One law: goals decide WHAT gets made; designations and sections decide WHERE it ships. Goals no longer carry outlets — steering demand and routing distribution are separate systems.
- The fence: a team with a designated outlet is a publishing contract — everything the crew publishes ships there; a member’s Solo outlet defers (kept dormant, wakes on leaving), sibling sections can’t poach, and “this team publishes only to X” is provable by one query.
- Solo outlets replace the worker default (and the legacy job.publishTo, now fully retired): a worker’s own channel while solo — the home site’s sections sort by category, the rest lands home.
- Publish provenance: every published item records why it landed where it did (routedVia: team | section | solo | manual | subscription); every assignment change is on the record.
- Syndication (wire-service model): an outlet can carry every published artifact of its accepted kinds as its own act — one artifact on many sites, unpublishable per outlet, with worker fences untouched.
2026-07-07
platformTeams: workers organized into crews with titles and a shared channel
- Teams group the roster: one team has many workers (a worker belongs to at most one), and a team carries a default outlet — the last rung of the publish ladder, so every worker on a team gets a sane publish destination with no per-worker config.
- Workers gain a title — their role, especially within a team (e.g. Illustrator) — which colors how they sign their reports. Workers on one team can hold different titles.
- A worker’s publish destination is now a first-class, validated default outlet (promoting the old job.publishTo slug, which still works for compatibility).
- The routing ladder grows to four rungs, most specific first: the goal’s outlet → category/section match → the worker’s default outlet → the team’s outlet → unpublished.
- New Teams management on the Workers page: workers grouped under team headers, inline team create/rename/outlet-change, and an Assignment card on each worker for title, team, and default outlet.
2026-07-07
platformOutlets go URL-defined: sections, the routing ladder, endpoint secrets
- An outlet is now URL-defined (siteUrl + sectionPath): clip.art/free, clip.art/flowers, and clip.art/worksheets are different outlets; any site — including esy.com/* surfaces — is another. projectId scopes which workers publish where.
- The publish routing ladder decides WHERE each artifact ships, most specific rung first: the assigned goal’s outlet (goals carry an optional outletId) → the same-site outlet whose section matches the artifact’s category → the job’s publishTo fallback. No rung matched → the artifact stays unpublished.
- Webhook secrets belong to the endpoint, not the channel (the Stripe model): outlets sharing a revalidateUrl share one secret; rotating any rotates the endpoint. A consumer holds exactly one secret no matter how many outlets ship to it.
- Consumers discover their outlets from the platform roster (GET /v1/outlets filtered by their own domain) — channel lists never live in consumer configuration.
- The items feed pages deterministically (stable id tiebreak), so consumer scans never re-serve or skip rows across page boundaries.
2026-07-06
platformThe manufacturing tier: Workers, Assigned work, Orders, and Outlets
- Workers: durable principals that run bounded shifts on schedules, produce against a standing job, and report to your Inbox in their own voice (with stop-condition escalation).
- Assigned work: goals and tasks carry an assignee — yours or a worker’s. Worker goals require measurable targets, progress by live catalog census, and achieve themselves; scheduled tasks are day directives workers check off with a completion note.
- Generation Orders documented: one template fanned into N child runs with variation, per-child dedupe keys, and a hard budget cap — two-phase (planned → start).
- Outlets (new, separate from compose’s Publications): channels for publishing artifacts of any kind from app.esy.com. Publish/unpublish are platform acts fired to your site as signed webhooks ({ outlet, action, artifactIds }).
- New references: Workers API, Planning API (goals/tasks/messages), and the expanded Outlets API.
2026-06-04
platformWorkflow publishing — visibility ladder + admin-gated authoring
- Introduced template visibility (draft → internal → public) as the single control over where a template is listed, decoupled from lifecycle status.
- Publish-time validation (executability + estimability) now runs when a template is promoted to a listed rung, not on a status flag.
- Gated workflow create/update behind admin; admin-published templates are system-owned and the public catalog lists only public, system-owned templates.
2026-05-16
docsPublic reference layer
- Launched docs.esy.com with the Esy brand system aligned to esy.com and app.esy.com.
- Added concept pages for Workflow templates, Runs, Artifacts, and Costs.
- Documented the generate-clip-art-asset workflow end-to-end with step-level telemetry.
- Introduced the provider cost ledger with estimated, provider-reported, and reconciled states.