Repository navigation
Description
Where Arc for TypeScript (and the Chronicle.TypeScript work it depends on) stands, what is in flight, and how to continue. Each item links to the issue that holds its details.
Recently released
Arc.TypeScript (GitHub prereleases; npm publication is still disabled):
- v0.44.0: PostgreSQL observation recovery (Recover PostgreSQL observation of Drizzle read models after a lost listener #125, closes Observe Drizzle read models across processes with PostgreSQL LISTEN/NOTIFY #92)
- v0.45.0: shutdown participants (Let integrations take part in shutdown before Arc disposes services #127)
- v0.45.1: service registry disposed when closing WebSockets throws synchronously (Dispose the service registry when closing WebSockets throws synchronously #129, Dispose the service registry when closing WebSockets fails synchronously #121)
- v0.46.0: scoped fallbacks for reactors and reducers (Register discovered reactors and reducers as scoped fallbacks #131)
- v0.47.0: protected read models released on raw MongoDB read paths (Release protected read models on raw MongoDB read paths #132, Release protected read models on raw MongoDB read paths #111)
- v0.48.0: preview scoped activation (Activate Chronicle reactors and reducers in Arc scopes (preview) #135)
- v0.49.0: delivery-store pinning (Pin Chronicle access to the delivery store in scoped activation #136)
- v0.50.0: caller-owned clients and a Chronicle 6.17 floor (Complete scoped activation of Chronicle reactors and reducers #137, closes Construct Chronicle reactors and reducers through Arc dependency injection #93)
Earlier: v0.40.0 through v0.43.0 (runInScope, PostgreSQL LISTEN/NOTIFY observation, co-located vertical slices, projection-backed given events).
Also merged without a release: AI corpus update (#117), CI fix for pull requests with an empty diff (#138, #109), documentation correction (#139, #133). Closed #35.
Chronicle.TypeScript (npm on merge), for #129 (EventScenario and ReactorScenario):
- Update the shared Cratis AI corpus to Cratis/AI e7dc6fe #142 increment 4: unique constraints in kernel-free scenarios
- Update the shared Cratis AI corpus #143 key domain (5.0/5.1)
- Store Chronicle read models in the collection Arc reads them from #144 replacement and removal (5.2)
- Update the shared Cratis AI corpus to Cratis/AI cc84741 #145 unique event-type cycles (5.3)
- Update the shared Cratis AI corpus #146 composite and case-insensitive keys (5.4)
- Verify that pull request descriptions are publishable release notes #147 deterministic 403 retry spec (fixes flaky auth spec, Docs overstate which Chronicle artifacts discovered before withChronicle are picked up #133)
- Align metric names and scope version with the .NET Arc #148 explicit child key for the child-type form of
@childrenFrom(Let integrations take part in shutdown before Arc disposes services #127)
In flight
- Make React hooks in generated proxies opt-in #112 opt-out React hooks in generated proxies
- Map external types and packages in generated proxies #113 external type and package mappings in generated proxies (decision: Decide how far the source proxy generator grows toward the .NET generator #50)
Next
Arc parity and integrations:
- Decide whether
activateArtifactsInScopesshould be on by default - Decide how far the source proxy generator grows toward the .NET generator #50, Decide whether validators take command read models as constructor parameters #51, Decide which identity-provider integrations come next #52 open decisions
- Composite unique constraints collide when a component contains the separator Chronicle#4131 composite key collisions (kernel)
Chronicle.TypeScript parity with the .NET client (umbrella Cratis/Chronicle.TypeScript#58):
- Dispose the service registry when closing WebSockets throws synchronously #129 part 5.5 scoped constraints: blocked on Testing: in-memory constraint storage drops constraint scopes Chronicle#4361
- Dispose the service registry when closing WebSockets throws synchronously #129 part 5.6 Unicode and numeric keys: needs an owner decision (Unicode case folding, numeric culture)
- Dispose the service registry when closing WebSockets throws synchronously #129 increments 6 (composition) and 7 (replay and redelivery)
- Evaluate projections in-process in ReadModelScenario Chronicle.TypeScript#106 projection evaluator: arithmetic, children, joins
- Prove unique constraints under concurrent appends against a kernel Chronicle.TypeScript#136 unique constraints under concurrent appends
- Test PII from append through release and erasure against a kernel Chronicle.TypeScript#137 PII from append through erasure
- Verify event type migrations when replaying older generations Chronicle.TypeScript#138 event type migrations on replay
- Add inbound webhook captures Chronicle.TypeScript#139 inbound webhook captures
- Cover the job not-replayable/not-active assertion and outbound webhook delivery against a kernel Chronicle.TypeScript#140 jobs and outbound webhooks against a kernel
- Add an ergonomic 'patterns at a moment' query over the facet-set API Chronicle.TypeScript#57 patterns at a moment
How the work is done
- One issue per change, assigned to its owner; one branch and worktree per change.
- Arc for .NET is the reference; its
Documentation/http-contract.mdis the wire contract. Parity is claimed per area only with a passing executable check. - In-process test harnesses (Chronicle
ReadModelScenario,EventScenario,ReactorScenario) support only behavior proven by a committed fixture from the pinned kernel oracle (yarn oracle:check); anything else is rejected with an explicit error pointing to a kernel-backed test. - Every change is reviewed independently until it has no confirmed findings (cross-provider when available, otherwise a same-provider review that is stated as such), then local gates, then a PR with release notes in the repository template's sections.
- Local gates: run every step of the root
package.jsonciscript. The Library e2e needs a workingcratis/chronicle:latest-developmentimage (recently unreliable locally); hosted CI always runs it. - Merge with a merge commit only (
gh pr merge --merge) once hosted CI is green; never squash, rebase or force-push. Minor and patch releases:gh release create vX.Y.Z --prerelease --target <merge commit>. No major release without an explicit human decision. - Applications built on Arc for TypeScript keep a behavior's backend code, backend specs, generated proxy, React component and frontend specs in one slice folder (see
Documentation/vertical-slices.md).
Open decisions for the maintainer
- Publish Arc for TypeScript to npm?
- Arc decisions 0002/0003.
- Unicode case folding and numeric culture for unique keys (Dispose the service registry when closing WebSockets throws synchronously #129 part 5.6).
- Whether to turn
activateArtifactsInScopeson by default. - Decide how far the source proxy generator grows toward the .NET generator #50, Decide whether validators take command read models as constructor parameters #51, Decide which identity-provider integrations come next #52.
Activity
woksin commentedon Sep 29, 2026
Also released: v0.51.0 (#140, #112 server-only proxies via --skip-react-hooks) and v0.52.0 (#141, #113 type mappings to other packages in generated proxies).
woksin commentedon Sep 29, 2026
Chronicle.TypeScript merged this round: #155 (ReadModelScenario.observe, #129 inc 6), #158 (children projections in-process, #106), #157 (PII end to end, #137), #160 (concurrent unique appends, #136), #162 (migrations on replay, #138), #159 (jobs and webhooks against a kernel, #140), #163 (patch: class-level @onceonly reactors and not-replayable webhooks are no longer replayed; stopgap for Cratis/Chronicle#4394). Blocked upstream: #139 on Cratis/Chronicle#4393, #129 5.5 on #4361. Filed: Chronicle #4383–#4386, #4390, #4393, #4394, #4396; Chronicle.TypeScript #151, #156.
woksin commentedon Sep 29, 2026
Publishing to npm now blocks Cratis/Templates#61, the TypeScript
dotnet new cratistemplate. The full plan is in Cratis/Templates#61 (comment). These unpublished packages are needed:@cratis/arc.core,arc.chronicle,arc.mongodb,arc.testingandarc.proxygenerator. Refs Cratis/Documentation#19woksin commentedon Oct 2, 2026
Released v0.53.0: Chronicle stores read models in the collection Arc reads them from (#144), Cratis dependencies updated to Arc 22.44, Fundamentals 7.20 and Chronicle 6.31 (#154, #150), and metric names and scope version aligned with Arc for .NET (#156, #148). In flight: outcome and transport metric attributes and generated version constants (#153), and the next Cratis dependency update (#157).
woksin commentedon Oct 2, 2026
Released v0.54.0: outcome and transport attributes on Arc metrics, a command outcome counter, a 1,000-name cardinality cap, span-name constants, and generated version constants instead of package.json imports (#160, #153); Cratis dependencies updated to Arc 22.45, Fundamentals 7.22 and Chronicle 6.35 (#161, #157). In flight: discovery endpoints requiring authentication outside Development, as Arc for .NET 22.45 does (#158), and a fix for the flaky source-watch contract test on macOS (#159). #155 was moved to Cratis/Arc#2973.
woksin commentedon Oct 2, 2026
Released v0.55.0 (#163, #159: proxy-generator watch mode recovers missed source changes, with
--watch-poll-interval), v0.56.0 (#162, #158: discovery endpoints require authentication outside Development, as in Arc for .NET 22.45) and v0.57.0 (#165, #164:introspection.enabled/Cratis:Arc:Introspection:Enabledturns discovery off entirely, from code or configuration). Open owner decisions: #50, #51, #52 and npm publication.woksin commentedon Oct 2, 2026
Released v0.57.1 (#179, #174): in-memory sorting on a complex field is rejected instead of returning an unreliable order, and the generated
sortByhelpers for complex fields are deprecated. Also merged: decision records for #50–#52 (#170), contract tests for the TypeScript template slice (#171), the Entra ID, AuthProxy and observable authentication recipes (#172), validation specs (#173) and a pinned .NET 22.45.0 proxy comparison (#175), which found Cratis/Arc#2998. Open: #176, #177, #178, #169, npm publication.woksin commentedon Oct 2, 2026
Released v0.57.2 (#180, #176): in-memory sorting compares concept, Date, DateOnly, TimeOnly and TimeSpan values by value. Open: #177 and #178 (next major release, waiting on an owner decision), #169 (needs a deployment to verify), npm publication.