Skip to content

Add a disposable projection-replay recovery walkthrough #676

Open

Description

@woksin

Learning gap

The catalog teaches Chronicle diagnosis, but has no dedicated application walkthrough of rebuilding a projection after diagnosis. The existing OperationsDiagnosis README explicitly excludes replay, retry and clearing quarantine; preserve that boundary.

Chronicle already exposes IProjections.Replay<TProjection>() and Replay(ProjectionId), returning Task<JobId>. The inspected 19.115.3 release contains these APIs. This is missing learning coverage, not a claim that the feature is missing or broken.

Proposed scope

Add a small, separate Chronicle/OperationsRecovery sample that seeds deterministic facts into a disposable local event store, builds a side-effect-free projection, explicitly requests its replay, observes the returned job and eventual completion, and verifies the rebuilt read model against known facts.

  • Reuse existing sample infrastructure where possible; register the project, README and catalog entry.
  • Show bounded waiting and useful failure output, not unbounded sleeps or an immediate-read assumption after receiving a job id.
  • Restrict the exercise to its disposable local store; do not offer arbitrary administrative targets.
  • Document cleanup and distinguish in-process specs from real-kernel verification.
  • Exclude partition retry, erasure, quarantine clearing and external business side effects from this first walkthrough.

Chronicle issue #4021 concerns owning-product operating documentation/navigation, not this runnable Samples learning journey. Link that guidance rather than duplicate or modify its scope. Existing completed learning-path work #625 remains completed.

Static catalog/source research only; no replay or application was executed for this proposal.

Activity

  1. self-assigned this
    on Nov 2, 2026
  2. added theissue type on Nov 2, 2026
  3. woksin commented on Nov 2, 2026

    @woksin
    CollaboratorAuthor

    Implementation design (rev 1)

    Base: f3234f8 (main, 2026-11-02)
    Status: proposed
    Size / release intent: M · minor
    Reviewed: independent Claude reviewer — dedicated learning gap and released replay API confirmed

    Problem and root cause

    The catalog's diagnosis exercise intentionally excludes replay. Chronicle19.115.3 already exposes projection Replay methods returning JobId; a separate rebuilding walkthrough is absent.

    Approach

    Add a small separate OperationsRecovery application using deterministic facts and one side-effect-free projection. Demonstrate explicit replay request, bounded completion observation, and rebuilt-state verification. Leave diagnosis-only behavior intact.

    Steps

    1. Drift-check catalog/solution/diagnosis infrastructure and verify selected Chronicle release APIs.
    2. Add separate application/spec project and disposable local-store setup, with a guard against arbitrary administrative targets.
    3. Seed known facts, establish projected output, request replay and observe the returned JobId through supported published APIs until completion or bounded timeout.
    4. Assert rebuilt output, expose useful failure diagnostics, and document cleanup.
    5. Register catalog/solution/CI and link operating guidance without editing Chronicle#4021.

    Files to touch

    New Chronicle/OperationsRecovery/ application, specs, README and local configuration; Samples.slnx, samples.json, relevant CI project registration.

    Public API, compatibility, migration

    No product API change. Use existing consumer projection APIs, not invented observer methods or internal kernel contracts.

    Performance

    Tiny deterministic fixture; bounded polling and container deadlines. Do not busy-loop or assume receiving JobId means completion.

    Specs to add (red first)

    Verify known seed/projection result, replay JobId observation, eventual rebuilt state, timeout diagnostics and rejection of non-sample targets. Keep in-process and real-server evidence distinct.

    Gate (exact commands from the repo's CI)

    dotnet restore Samples.slnx
    dotnet build Samples.slnx --configuration Debug --no-restore
    bash .github/scripts/run-specs.sh --project <registered-spec-project> --configuration Debug --no-build --no-restore --
    dotnet restore Samples.slnx -p:Configuration=Release
    dotnet build Samples.slnx --configuration Release --no-restore -p:CratisProxiesOutputPath=
    corepack enable
    yarn install
    yarn samples:validate

    Register and substitute the new spec project. Add one bounded real-kernel replay acceptance in the appropriate CI lane; none was run for this proposal.

    Done when

    • Separate catalog sample shows explicit replay, completed job and verified rebuilt data.
    • Disposable-only safeguards, deadlines, cleanup and error guidance are documented and tested.
    • Required builds/specs and actual replay acceptance pass.

    Risks and open questions

    Confirm completion-observation API against the selected published package before implementation; do not invent polling methods.

    Out of scope

    Partition retry, erasure, clearing quarantine, external effects, arbitrary production targets, and changing the existing diagnosis sample's contract.

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

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions