feat(api): bulk apply reconciles Schedule documents - #1805
Merged
Conversation
Collaborator
Author
|
Labelled |
jhgaylor
force-pushed
the
stack/1636-teammate-kind
branch
from
September 10, 2026 11:10
f2ba1b8 to
dde1862
Compare
jhgaylor
force-pushed
the
stack/1636-schedule-kind
branch
from
September 10, 2026 11:10
343ad31 to
0384556
Compare
jhgaylor
force-pushed
the
stack/1636-teammate-kind
branch
from
September 10, 2026 11:26
dde1862 to
ed777ee
Compare
jhgaylor
force-pushed
the
stack/1636-schedule-kind
branch
from
September 10, 2026 11:26
0384556 to
7875dd3
Compare
jhgaylor
force-pushed
the
stack/1636-teammate-kind
branch
from
September 10, 2026 11:35
ed777ee to
8b6d1cf
Compare
A `Schedule` document declares a cron that runs a teammate with a prompt. It is keyed by the document name under its `teammate`, and carries the `TeamScheduleCreateRequest` fields, so it goes through `Fountain.Team.Schedules` and an invalid cron fails with the create route's own changeset error. The one thing that needed a decision: a teammate's name is its conversation's title, or its agent's name, and neither is unique. A name two of the tenant's teammates answer to resolves to `:ambiguous` and fails the Schedule row that used it, rather than binding to whichever the roster listed last. A name this manifest reconciled is unique among the documents (`unclaimed/3`) and wins over the tenant's. The roster read is skipped entirely when the manifest holds no schedules, because listing the team is several queries. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WQyc3wWWDAeZJE1Vr6etQa
jhgaylor
force-pushed
the
stack/1636-schedule-kind
branch
from
September 10, 2026 11:35
7875dd3 to
ae7b3aa
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A
Scheduledocument declares a cron that runs a teammate with a prompt. Itis keyed by the document name under its
teammate, and carries theTeamScheduleCreateRequestfields, so it goes throughFountain.Team.Schedulesand an invalid cron fails with the create route'sown changeset error.
The one thing that needed a decision: a teammate's name is its conversation's
title, or its agent's name, and neither is unique. A name two of the tenant's
teammates answer to resolves to
:ambiguousand fails the Schedule row thatused it, rather than binding to whichever the roster listed last. A name this
manifest reconciled is unique among the documents and wins over the tenant's.
The roster read is skipped entirely when the manifest holds no schedules,
because listing the team is several queries.
Seventh of eight PRs toward #1636. #1675 is the combined branch and stays open
as the reference until the stack is in.
Validation:
mix precommit,go test ./...incli/, the SDK contract checkand the TypeScript verifier.
The stack (each PR is based on the one above it; review and merge top down):
stack/1680-unchanged-verdict— a save that changes nothing records nothing (Bulk apply reportsupdatedfor a document that changed nothing, so a client cannot tell a no-op from a write #1680)stack/1636-apply-isolation— a raise in one apply document fails that rowstack/1636-cotenant-identity— a co-tenant follows a replacement only if it declared the same identitystack/1636-update-teammate— Team.update_teammate/4stack/1636-cli-group-by-kind— CLI: group apply documents by kindstack/1636-teammate-kind— apply reconciles Teammate documentsstack/1636-schedule-kind— apply reconciles Schedule documents ← this onestack/1636-webhook-kind— apply reconciles Webhook documents (Bulk apply: accept Teammate, Schedule and Webhook documents so one manifest reconciles the whole estate #1636)🤖 Generated with Claude Code
https://claude.ai/code/session_01WQyc3wWWDAeZJE1Vr6etQa