Skip to content

Issue management support #187

@jaden-young

Description

@jaden-young

Description

We propose creating new event types to handle issues as first class entities, and replacing the existing notion of issues in Eiffel with links to these new event types.

When EiffelSourceChangeCreatedEvent.data.issues was added, the status of issues made sense, as Eiffel is a protocol focused on CI/CD, not issue management. But the simultaneous existence of EiffelIssueVerifiedEvent.data.issues necessitates a refactoring.

This issue and pending pull request build on discussions in the Eiffel Community Google Group.

Changes can be summarized as follows:

New events

  • EiffelIssueDefinedEvent: Gives provenance for an issue, serves as a handle for future links similar to EiffelActivityTriggeredEvent
  • EiffelIssueStatusModifiedEvent: Used to transition the state of an issue: OPEN, RESOLVED, etc, links back to IssueDefined.
  • EiffelIssueAssignedEvent (optional): Emitted when an issue is assigned to a contributor in an issue tracker, fields mirror EiffelSourceChangeCreatedEvent.data.author. This event could aid traceability to specific contributors, but introduces the same problem of two events referencing an entity without a canonical form.

Modifications to existing events

  • EiffelSourceChangeCreatedEvent: Remove data.issues, replacing with new link types targeting IssueDefined:
    • data.issues.transition.PARTIAL -> PARTIALLY_RESOLVED_ISSUE
    • data.issues.transition.RESOLVED -> RESOLVED_ISSUE
    • data.issues.transition.REMOVED -> DERESOLVED_ISSUE
  • EiffelIssueVerifiedEvent: Remove data.issues, replacing with new link types targeting IssueDefined:
    • data.issues.value.SUCCESS -> SUCCESSFUL_ISSUE
    • data.issues.value.FAILURE -> FAILED_ISSUE
    • data.issues.value.INCONCLUSIVE -> INCONCLUSIVE_ISSUE

Motivation

There are two main motivating factors to these changes. The first is that the current state of SourceChangeCreated and IssueVerified both containing an array of issues is not desirable. Two different events reference the same entity without a canonical form, inviting inconsistency as the protocol evolves. The second reason for these proposed protocol changes is to facilitate the creation of issue management plugins for Eiffel.

Exemplification

In the current version of Eiffel, connecting an IssueVerified to a SourceChangeCreated through an issue is rather difficult. There are no explicit links between them, and inferring a link proves computationally complex as one must query all events of each type and manually inspect the issues fields. In contrast, with issues as first class entities, in a situation such as:

IssueDefined <--RESOLVED_ISSUE---- SourceChangeCreated
             <--SUCCESSFUL_ISSUE-- IssueVerified       <--CAUSE--\
             <--ISSUE------------- IssueStatusUpdated  ----------/

The link between SourceChangeCreated and IssueVerified through the same Issue is simpler to follow through explicit links.

Benefits

Introducing new event types for issues allows for the integration of issue management plugins, improving traceability. Providing a canonical representation of issues also improves the robustness of Eiffel as a protocol by avoiding consistency issues between event types. As is mentioned in Eiffel documentation, often the true value of events lies in their relation to other events. Moving issues out of data members allows contributors to leverage Eiffel's links to inspect relationships.

Possible Drawbacks

It can be argued that to add issue management events is to add bloat, as Eiffel's stated purpose is in the context of CI/CD. However, as previously mentioned, issues already exist in the current version of Eiffel, and the community has expressed interest in plugins for JIRA or similar issue management software.

Removing data.issues from SCC and IV does have a significant consequence in that in order for SCC and IV to reference an issue it must already exist inside of Eiffel, which requires that an actor exist in the system already producing Eiffel events from that issue tracker.

Metadata

Metadata

Assignees

No one assigned

    Labels

    protocolAll protocol changes

    Type

    No type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions