-
Notifications
You must be signed in to change notification settings - Fork 61
Description
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
- Has the same
type
,tracker
,id
, anduri
fields from EiffelSourceChangeCreatedEvent, as well as an optionaltitle
or summary.
- Has the same
- 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
Labels
Type
Projects
Status