release: version packages#30
Open
github-actions[bot] wants to merge 1 commit into
Open
Conversation
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
anchorage-showcase | b20a3f0 | Jul 20 2026, 03:40 PM |
github-actions
Bot
force-pushed
the
changeset-release/dev
branch
3 times, most recently
from
July 18, 2026 02:25
1539e81 to
18b0fb5
Compare
github-actions
Bot
force-pushed
the
changeset-release/dev
branch
from
July 20, 2026 15:38
18b0fb5 to
b20a3f0
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.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to dev, this PR will be updated.
Releases
@proofoftech/flowsafe@0.6.0
Minor Changes
d54d2be: Track D — schedules (
@proofoftech/flowsafe/schedules, additive, opt-in). A newsubpath ships the D1 schedules domain, a CAS-driven tick we own, and a tenant
facade — all on the single DO + D1 RunnerRuntime substrate (P1), no new
ApprovalRecordshape or existing signature changed, unconfigured hostsbyte-identical.
D1SchedulesStorage+createScheduleStorageDomains— the flowsafe-owned D1domain over
mastra_schedules/mastra_schedule_triggers(the@mastra/cloudflare-d1adapter ships neither), mirroring core'sSchedulesStoragecontract incl. the CASupdateScheduleNextFire. Composedinto
createD1Storagevia the injecteddomainsseam.createScheduleTick— we OWN the tick (DL-012):listDueSchedules→ CAS claim→ workflow targets mint a fresh INV-1 runId and fire through the host's
run-start seam; agent targets are GUARDED OFF (their only public fire path,
schedules.run(id), enqueues onto core's pubsub worker loop we do not run, sofiring is a fail-closed audited skip — agent-target execution is deferred). An
injectable run-cap seam (DL-007) skips a capped tenant while the schedule stays
healthy. The P4 stored-context barrier strips reserved keys before any leg.
createScheduleRouter— the tenant facade (DL-013): server-minted ids,metadata.tenantIdstamping, tenant-filtered reads, ownership 404s (nooracle), per-tenant count + fire-rate caps, and P4 reserved-key rejection on
create/update (the whole
breakwater.namespace +mastra:goal).(8 → 10) with a new metadata-filtered
purgeTenantkind(
TENANT_METADATA_PURGE_TABLES), pluspurgeExpiredScheduleTriggersfor thetrigger-history TTL.
createFlowsafeWorkergains an opt-inscheduleTickseam(its own failure-isolated cron duty) and a
SCHEDULE_TRIGGER_RETENTION_DAYSpurge duty.
0f4f70a: Track E (M-007) — signal providers: a new subpath
@proofoftech/flowsafe/signal-providers(additive, opt-in, subpath-only). Host external-event providers on a Durable
Object with alarm-driven polling, terminate provider webhooks on the Worker, and
persist subscriptions in a flowsafe-owned D1 table.
SignalProviderHost— a per-tenant provider host DO (idFromName(tenantId))whose alarm rehydrates subscriptions from D1 (core's registry is in-memory,
lost on eviction) and polls each of the tenant's providers with per-provider +
per-delivery failure isolation, delivering through Track C's thread-DO topology.
D1SubscriptionStoreFactory— a flowsafe-owned, tenant-columnedflowsafe_signal_subscriptionsstore mirroring the approval store's INV-2posture (
.forTenant()tenant-bound,.system().listByResource()the webhook'scross-tenant authority). Registered in
purgeTenant(PurgeTenantResult.subscriptions);retention is
none(standing config reaped only at offboarding).createWebhookRouter— webhook ingress that verifies the provider signatureover the RAW bytes BEFORE parsing, maps the payload to a tenant via the
subscription ROW only (never the payload), rate-caps per provider+tenant, and
audits every ingest with a bounded forgery audit.
createSubscriptionRouter—the human-only HTTP subscribe/unsubscribe surface (never exposed as model
tools; mints no capability).
githubSignalProvider— a binding-gated GitHub reference provider(
X-Hub-Signature-256verified constant-time via WebCrypto).createWebhookSignalProvideris the generic path.
Also adds a
subscriptionscounter toPurgeTenantResult(the DL-003 offboardingcoverage for the new flowsafe-owned table).
6c80e92: Track F (M-005) — goals. New subpath-only export
@proofoftech/flowsafe/goals:createObjectiveRouter, a role-gated + audited objective HTTP surface(set/get/update/clear over
/api/threads/:threadId/goal) that writes thethread-scoped goal record in Track C's
mastra_thread_statedomain(
GOAL_STATE_TYPE'goal'). The write path is a P6-lite ingestion boundary(auth → coarse role → thread-prefix ownership 404 → size cap →
assertNoClientMemoryIds→ field allowlist → maxRuns host cap → audit) andpersists through
@mastra/core's ownwriteObjective/readObjective/clearObjective, so a record it writes is byte-identical to what the durablegoal step reads via
resolveGoalStore(DL-018 — no thread-DO affinity neededfor the write). A requested
maxRunsabove the host cap is rejected, notclamped (default the core
DEFAULT_GOAL_MAX_RUNS, 50; DL-007). Goals never mintcapability (P8) and Track F starts no runs — per-tenant run budgets stay
enforced at the existing seams.
GOAL_REQUEST_CONTEXT_KEY('mastra:goal') isreserved with a no-collision pin against the runtime's requestContext base keys.
Hosts mount the surface opt-in through
createFlowsafeWorker's newbuildObjectiveRouterseam; absent config is byte-identical. Additive only — nonew table, schema-guard, purge, or TTL change (reuses the Track C thread-state
domain), and no existing signature or
ApprovalRecordshape changes.Patch Changes
signal, goal, and schedule routers decoded the threadId/schedule-id path
segment with bare
decodeURIComponentbefore authentication, andcreateFlowsafeWorker's fetch handler did not wrap the router calls — so anunauthenticated request with malformed percent-encoding (e.g.
POST /api/threads/%/message) threw aURIErrorout offetch()as aper-request 500. The three routers now use a shared
safeDecodeSegment(host-kit) that treats malformed encoding as route-absent (byte-identical to a
non-matching path), matching the Track E webhook router; the worker fetch
handler gains a top-level try/catch that contains any handler throw as a
generic 500 without leaking
error.message. The same helper closes the wholeclass: the background-tasks read route (post-auth, DO-mounted) adopts it too, so
a malformed taskId returns the no-oracle 404 instead of throwing. Additive and
behavior-preserving for all valid paths.
showcase@0.0.5
Patch Changes