Skip to content

[Task] Resolve GitHub activity ID collisions with explicit compatibility evidence #8325

Closed

Description

@sfmskywalker

Program: #8194
Parent: #8286

Evidence and scope

The released-package and relocated-source probes delivered by #8317 and #8322 independently reproduce four GitHub activity failures: Comments.DeleteComment, Comments.GetComment, Comments.UpdateComment, and Gists.GetGist. Each declares an Input<T> Id that hides the workflow IActivity.Id. The existing serialized shape cannot reliably preserve both identities. This is a baseline defect, not evidence that relocation introduced it. #8313 remains blocked on an explicit resolution or supported migration.

Acceptance

  • Reproduce all four failures in offline regression fixtures, covering root activities and Sequence-contained activities, concrete and IActivity serialization entry points, and configured provider IDs.
  • Define and implement a serialization/activity-version compatibility strategy preserving the public package ID and established activity type identities. Preserve public CLR APIs where feasible; document any required input/version migration rather than silently renaming contracts.
  • Verify the workflow activity ID and provider input independently survive serialization, restoration, and subsequent reserialization. No GitHub API calls or credentials are needed.
  • Preserve representative historical JSON. If old JSON has already lost the workflow ID, report the irrecoverable information and require explicit migration input; do not invent an ID and call it preserved.
  • Prove unaffected GitHub activity contracts remain unchanged, and run the current source compatibility matrix. Keep the original released-host failure evidence intact and distinguish a corrected-source pass from a historical pass.
  • Store a focused source-integration patch or implementation in Core using the established consolidation approach, with tests and migration documentation. Incorporate and verify it in the eventual history-preserving import before closing the parent gate.

Dependencies and boundaries

Parent membership is #8286; this task blocks #8313. #8323 resolves a separate generated-root serialization defect and does not resolve these four static activities. Inspect existing Extensions work before implementation. No package publication, external communication, live provider operation, or production change is authorized by this task.

Activity

  1. sfmskywalker commented on Sep 24, 2026

    @sfmskywalker
    MemberAuthor

    Source-grounded follow-up: all four retained released-host net10 fixtures serialize id as an Input object; their provider literal values survive, while IdentityPreserved is false. Core activity discovery includes every Input<T> property even without an InputAttribute, and root versus nested serialization follow different metadata paths. A simple rename or obsolete alias is therefore insufficient without root/nested regression tests. Any historical document that contains no original workflow ID needs explicit migration input; inventing a replacement is not identity preservation. Original receipts remain unchanged.

  2. sfmskywalker commented on Sep 24, 2026

    @sfmskywalker
    MemberAuthor

    Implementation is in PR #8330: #8330

    The PR adds the versioned activity compatibility patch, bounded offline migration, ADR, and a reproducible mapped-source replay. Its committed receipt records 6/6 focused .NET tests on net10.0 and 20 Python tests in normal and optimized modes. The actual history-preserving import, other target frameworks, and current source compatibility matrix remain open gates; this issue stays open.

  3. added
    enhancementNew feature or request
    prio highIs on the roadmap for the near-future
    elsa 3This issue is specific to Elsa 3
    on Sep 24, 2026
  4. sfmskywalker commented on Sep 24, 2026

    @sfmskywalker
    MemberAuthor

    Focused identity proof #8330 merged as 63abc7205343486a5aa20b205409b2a66daec950 after current-head required checks, exact-head Greptile 5/5 and resolved threads. It preserves the version-1 activity classes, adds explicit version-2 provider-ID inputs and a bounded offline workflow migration utility. The six recorded net10.0 mapped-source tests and 23 Python guards remain scoped evidence; net8.0/net9.0, refreshed full activity matrix and validation in the actual imported source are still required before this task can close. The merge subject suppressed publishing-capable push workflows; no package was published.

  5. sfmskywalker commented on Sep 24, 2026

    @sfmskywalker
    MemberAuthor

    A review of #8333 exposed an additional fail-open case in the already merged offline GitHub activity-ID migration: a supported Sequence could contain Elsa.For or Elsa.StateMachine nodes with nested legacy GitHub activities that the visitor did not inspect. The focused fix is PR #8338, head 806151433fa53a37615fe01896dad09d8d67a65d. It rejects both unsupported containers before writing output; the CLI regression verifies no partial output and an unchanged input. Focused migration tests passed 17/17 in normal and optimized Python, and the full tooling suite passed. Current-head CI and review are pending. #8325 remains open for the framework matrix and actual imported-source validation; no package was published.

  6. sfmskywalker commented on Sep 24, 2026

    @sfmskywalker
    MemberAuthor

    PR #8338 merged at 2700e12 after exact-head CI, Greptile 5/5 and zero unresolved threads. It prevents partial migration of nested legacy GitHub activity IDs while preserving unrelated business-data type fields. PR #8333 was rebased to include this guard at head 218cf9a; its refreshed checks/review are pending. #8325 stays open for the remaining net8/net9 and actual imported-source identity proof.

  7. added 2 commits that reference this issue on Sep 27, 2026
  8. sfmskywalker commented on Sep 27, 2026

    @sfmskywalker
    MemberAuthor

    #8512 merged into draft import #8409 as ecd2a77613405efe98a4adb9f9587a8d668c31e7 (merge commit). It passed exact-head checks (import-rehearsal-tests, mapped-source-artifact-proof, selector-and-plan, pinned-source-contract) with Greptile 5/5 and resolved threads.

    GitHub fix (#8325):

    • The version-2 activities (DeleteCommentV2, GetCommentV2, UpdateCommentV2, GetGistV2) and their identity tests are now in the imported source. Before, the fix existed only as a stored patch in Core.
    • Version-1 classes are unchanged, per the ADR.
    • Focused tests: 6/6 reviewed tests plus a new nested-ID regression test, on net10.0.

    Compatibility matrix on the actual import, identical on net10.0, net9.0 and net8.0:

    • Released 3.8.4 has 134 activity types (118 plain + 16 generated); the imported source has 147.
    • The source adds only the 9 approved LDAP/MQTT activities and the 4 maintainer-approved GitHub version-2 contracts. The latter use a separate, versioned matrix entry that approves exactly those four.
    • Historical workflows import with IDs and typed inputs preserved.
    • Negative probes reject 18/18 mutations.

    The four version-1 GitHub identity failures stay failing by maintainer decision, with no allowlist, so the runner exits 1. The ADR and migration utility are the supported path. The generated Agent root failure is fixed in source by #8323.

    Remaining:

    • verification after the import lands on main;
    • generated activities beyond the controlled fixtures;
    • provider behaviour, live dispatch and webhooks;
    • a production workflow corpus.

    No package publication occurred.

  9. sfmskywalker commented on Sep 29, 2026

    @sfmskywalker
    MemberAuthor

    Delivered: #8409 landed on main as merge commit 8b34ab1e71c22c853e1aa340774231c80e92e677, with the imported histories preserved. The work and evidence for this issue were merged into the import branch, as recorded above. No package publication or cutover occurred.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    elsa 3This issue is specific to Elsa 3enhancementNew feature or requestprio highIs on the roadmap for the near-futuretriaged

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions