<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>HumanDeploy Changelog</title>
    <link>https://humandeploy.ai/changelog/</link>
    <atom:link href="https://humandeploy.ai/changelog/rss.xml" rel="self" type="application/rss+xml"/>
    <description>Ship log for HumanDeploy — features, fixes, and infrastructure in the order they land.</description>
    <language>en-us</language>
    <copyright>Copyright 2026 Lets Imagine, LLC, d/b/a HumanDeploy</copyright>
    <managingEditor>steffan@humandeploy.ai (Steffan Howey)</managingEditor>
    <webMaster>steffan@humandeploy.ai (Steffan Howey)</webMaster>
    <pubDate>Thu, 16 Apr 2026 16:00:00 +0000</pubDate>
    <lastBuildDate>Sat, 18 Apr 2026 16:00:00 +0000</lastBuildDate>
    <generator>HumanDeploy ship log</generator>
    <image>
      <url>https://humandeploy.ai/favicon.svg</url>
      <title>HumanDeploy Changelog</title>
      <link>https://humandeploy.ai/changelog/</link>
    </image>

    <item>
      <title>v0.9.2 — Spaces and realtime threads</title>
      <link>https://humandeploy.ai/changelog/#v0-9-2</link>
      <guid isPermaLink="false">humandeploy:changelog:v0.9.2</guid>
      <pubDate>Thu, 16 Apr 2026 16:00:00 +0000</pubDate>
      <category>Infrastructure</category>
      <dc:creator>Noor (Engineering)</dc:creator>
      <description>Renamed Areas to Spaces with a spaces_projects join table. Thread orchestration moved from a 5-second poll to Supabase realtime on postgres replication.</description>
      <content:encoded><![CDATA[<p>Renamed <code>Areas</code> to <code>Spaces</code> with a new <code>spaces_projects</code> join table. Projects now live inside a Space with scoped brand and context. Thread orchestration moved off a 5-second poll onto Supabase realtime on postgres replication; Slack mutations land on web surfaces sub-second. Migration ran online behind a feature flag with no downtime.</p>]]></content:encoded>
    </item>

    <item>
      <title>v0.7.0 — Inflow becomes HumanDeploy</title>
      <link>https://humandeploy.ai/changelog/#v0-7-0</link>
      <guid isPermaLink="false">humandeploy:changelog:v0.7.0</guid>
      <pubDate>Fri, 10 Apr 2026 14:00:00 +0000</pubDate>
      <category>Launch</category>
      <dc:creator>Steffan Howey</dc:creator>
      <description>Same codebase, new domain, new name, new story. No data migration.</description>
      <content:encoded><![CDATA[<p>Inflow is now HumanDeploy. Same codebase, new domain (humandeploy.ai), new name, new story. No data migration. Existing tenants kept their workspace, memory, and billing. Founding-tier pricing holds at $2,500/mo.</p>]]></content:encoded>
    </item>

    <item>
      <title>v0.9.0 — Credit operations</title>
      <link>https://humandeploy.ai/changelog/#v0-9-0</link>
      <guid isPermaLink="false">humandeploy:changelog:v0.9.0</guid>
      <pubDate>Sun, 05 Apr 2026 15:00:00 +0000</pubDate>
      <category>Infrastructure</category>
      <dc:creator>Noor (Engineering)</dc:creator>
      <description>credit-operations with reserve, consume, release. Each call runs inside a SELECT FOR UPDATE transaction with an idempotency key.</description>
      <content:encoded><![CDATA[<p>Added <code>credit-operations</code> with three primitives: <code>reserve</code>, <code>consume</code>, <code>release</code>. Each call runs inside a <code>SELECT FOR UPDATE</code> transaction with an idempotency key, so a retried network call never double-spends. A scope approval reserves against client balance; delivery consumes; cancellation releases. Failed debits write to a recovery table the admin dashboard reads from. Unlimited-credit allowlist accounts bypass reservation.</p>]]></content:encoded>
    </item>

    <item>
      <title>v0.8.8 — Expert Slack app</title>
      <link>https://humandeploy.ai/changelog/#v0-8-8</link>
      <guid isPermaLink="false">humandeploy:changelog:v0.8.8</guid>
      <pubDate>Wed, 01 Apr 2026 14:00:00 +0000</pubDate>
      <category>Feature</category>
      <dc:creator>Noor (Engineering)</dc:creator>
      <description>A second Slack app for experts with separate install, separate OAuth, and shared workspace memory. Unresponded assignments expire after 2h and re-route.</description>
      <content:encoded><![CDATA[<p>Shipped a second Slack app for experts with separate install, separate OAuth, and shared workspace memory. When a handoff moves into <code>assigned</code>, the expert receives a DM with scope, deadline, and a link to the brand profile. Accept flips state to <code>in_progress</code>; decline routes to next-best-fit via the assignment engine. Assignments with no response in 2 hours expire on a cron and re-route to the next expert in rank. Experts see a kanban of the work they own.</p>]]></content:encoded>
    </item>

    <item>
      <title>v0.8.6 — Integrations framework</title>
      <link>https://humandeploy.ai/changelog/#v0-8-6</link>
      <guid isPermaLink="false">humandeploy:changelog:v0.8.6</guid>
      <pubDate>Mon, 30 Mar 2026 15:00:00 +0000</pubDate>
      <category>Infrastructure</category>
      <dc:creator>Noor (Engineering)</dc:creator>
      <description>integration-oauth handles the full OAuth lifecycle for any provider in providerConfigs.ts. Tokens AES-encrypted. Rate limiter + circuit breaker on BaseConnector.</description>
      <content:encoded><![CDATA[<p><code>integration-oauth</code> now handles the full OAuth lifecycle for any provider listed in <code>providerConfigs.ts</code>. Tokens are AES-encrypted before persistence. Connectors extend <code>BaseConnector</code> and inherit per-provider rate limiting (10 req/s default) and circuit breaking on every outbound call (opens at 5 failures, cools for 60s). A health runner scans active connections every 15 minutes. Notion and Google Drive are live on the new path; adding the next provider is a pull request against <code>registry.ts</code> plus two env vars. Slack and Stripe remain on legacy.</p>]]></content:encoded>
    </item>

    <item>
      <title>v0.8.4 — Scope generation</title>
      <link>https://humandeploy.ai/changelog/#v0-8-4</link>
      <guid isPermaLink="false">humandeploy:changelog:v0.8.4</guid>
      <pubDate>Thu, 26 Mar 2026 14:00:00 +0000</pubDate>
      <category>Feature</category>
      <dc:creator>Noor (Engineering)</dc:creator>
      <description>generate-handoff-scope returns a HandoffScope validated against a Zod schema: deliverables, exclusions, timeline, credit cost.</description>
      <content:encoded><![CDATA[<p>Added <code>generate-handoff-scope</code>. A Slack DM from a client is read alongside the workspace brand guardrails and any prior project context, and returns a <code>HandoffScope</code> validated against a Zod schema: deliverables, exclusions, timeline, credit cost. The scope renders back into the thread via Block Kit with Approve and Adjust actions. Approve writes a row into <code>work_requests</code> on the new <code>slack_conversation</code> intake path and moves the handoff to <code>approved</code>. Adjust opens a modal.</p>]]></content:encoded>
    </item>

    <item>
      <title>v0.8.2 — Message classifier</title>
      <link>https://humandeploy.ai/changelog/#v0-8-2</link>
      <guid isPermaLink="false">humandeploy:changelog:v0.8.2</guid>
      <pubDate>Sun, 15 Mar 2026 15:00:00 +0000</pubDate>
      <category>Infrastructure</category>
      <dc:creator>Noor (Engineering)</dc:creator>
      <description>classifyAndRoute runs on every inbound Slack message. Confidence above 0.7 routes; below triggers a clarifying question. Under 400ms p95.</description>
      <content:encoded><![CDATA[<p>Every inbound Slack message now runs through <code>classifyAndRoute()</code> before reaching a handler. It reads thread history and the workspace brand profile, then returns one of eight intent types with a confidence score. Confidence above 0.7 routes to the owning handler; below that triggers a clarifying question. Runs under 400ms p95. Model: GPT-4.1-mini, temperature 0.2, structured JSON output.</p>]]></content:encoded>
    </item>

    <item>
      <title>v0.8.0 — Handoffs table</title>
      <link>https://humandeploy.ai/changelog/#v0-8-0</link>
      <guid isPermaLink="false">humandeploy:changelog:v0.8.0</guid>
      <pubDate>Tue, 03 Mar 2026 15:00:00 +0000</pubDate>
      <category>Infrastructure</category>
      <dc:creator>Noor (Engineering)</dc:creator>
      <description>handoffs table with eight validated states. A Postgres trigger rejects invalid transitions at the database. Requester vs admin transitions split via RLS.</description>
      <content:encoded><![CDATA[<p>Added the <code>handoffs</code> table with eight states: <code>draft</code>, <code>approved</code>, <code>assigned</code>, <code>in_progress</code>, <code>delivered</code>, <code>revision</code>, <code>complete</code>, <code>cancelled</code>, plus <code>paused</code>. A Postgres trigger validates every transition against an allowed-edges map, so an invalid write fails at the database. Requester-allowed transitions are separated from admin-only ones via RLS. Each state writes its own timestamp column. Downstream surfaces read this row as the source of truth: the client's confirmation, the expert kanban, the admin dashboard.</p>]]></content:encoded>
    </item>

  </channel>
</rss>
