Skip to content

Update the TypeScript guestbook client and kernel contract pairing #673

Open

Description

@woksin

Problem

The TypeScript guestbook pins an old Chronicle client contract while promising to track the current development kernel.

At f3234f8, package.json specifies Chronicle 3.1.1 and Fundamentals 7.18.2, while Compose selects latest-development.

Published Chronicle 3.1.1 depends on contracts 17.0.0, using the old Cratis.Chronicle.Contracts.EventSequences.EventSequences/Append service. The kernel at 57aae45, also in the inspected 19.115.3 release, registers the relocated Cratis.Chronicle.Contracts.Sequences service. The old contract cannot append against that inspected server API.

This is a static contract finding, not a live container reproduction: the digest behind the moving image was not verified, and a different compatibility call might fail before append. PR #583 fixed an earlier Ensure/EnsureEventStore mismatch, not this later service relocation.

Expected outcome

  • Select and document a compatible client, Fundamentals and immutable kernel image together.
  • Candidate published client 6.54.0 depends on contracts 19.70.0 and requires Fundamentals ^7.24.1; do not bump Chronicle alone while retaining 7.18.2.
  • Add a reproducible dependency lock and compile coverage for this sample, currently absent from the frontend matrix.
  • Demonstrate append, reactor completion and reading the resulting data against the selected server, separately from a compile-only pass.

Keep this coordinated migration separate from mechanical patch-only dependency refreshes.

Activity

  1. self-assigned this
    on Nov 2, 2026
  2. woksin commented on Nov 2, 2026

    @woksin
    CollaboratorAuthor

    Implementation design (rev 1)

    Base: f3234f8 (main, 2026-11-02)
    Status: proposed
    Size / release intent: M · patch
    Reviewed: independent Claude reviewer — source and published RPC paths confirmed; no runtime reproduction

    Problem and root cause

    The client pins select contracts17 while Compose tracks a moving kernel. Published17 uses Contracts.EventSequences.EventSequences/Append; inspected Chronicle19.115.3 and source57aae452 use Contracts.Sequences.EventSequences/Append. Actual moving-image digest remains unknown.

    Approach

    Qualify one explicit client/Fundamentals/kernel cohort. Candidate npm Chronicle6.54.0 requires Fundamentals^7.24.1 and contracts19.70.0. Verify the selected image exists and serves this contract; do not assume version numbers alone prove compatibility.

    Steps

    1. Drift-check client source, README, Compose and workflow against Base.
    2. Select immutable compatible kernel image and client/Foundation versions; update client code only where required by published APIs.
    3. Add dependency lock with intended package manager; update README to stop promising unbounded development-tag compatibility.
    4. Register compile coverage and separately prove append, reactor completion and read output against the selected kernel.

    Files to touch

    Chronicle/TypeScript/{package.json,package-lock.json,docker-compose.yml,README.md}; affected client source only if needed; .github/workflows/build.yml.

    Public API, compatibility, migration

    Sample dependency migration across Chronicle npm majors; no product API change. Regenerate dependency state, do not patch generated contracts.

    Performance

    Use bounded completion waits and container deadlines; no benchmark needed.

    Specs to add (red first)

    A narrow sample compile check plus wire-level append/react/read acceptance against the exact selected kernel. Distinguish an earlier compatibility rejection from the Append mismatch.

    Gate (exact commands from the repo's CI)

    Existing frontend setup: corepack enable, yarn install, yarn samples:validate. Add sample-specific compile coverage using its package manager. Once an npm lock is intentionally added:

    cd Chronicle/TypeScript
    npm ci
    npm run compile

    Existing solution CI runs Debug and Release builds; this TypeScript sample is not currently in its frontend matrix. The new real-kernel acceptance is an additional bounded integration gate, not a claimed existing pass. All commands are planned, not executed for this design.

    Done when

    • Client and selected immutable kernel agree on RPC contract.
    • Dependency lock and compile coverage exist.
    • Append/react/read succeeds with bounded waits and useful failure output.
    • README accurately describes the qualified pair.

    Risks and open questions

    BLOCKING before merge: verify actual image availability and real wire compatibility. Fundamentals must meet the published client's floor; a Chronicle-only bump is insufficient.

    Out of scope

    Blind modernization of other samples and moving-tag compatibility guarantees.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions