35 lines
1.9 KiB
Markdown
35 lines
1.9 KiB
Markdown
## ADDED Requirements
|
|
|
|
### Requirement: Bounded GitLab discovery transport retries
|
|
The system SHALL retry idempotent GitLab project discovery requests after transient transport failures using a source-configured bounded attempt count and delay.
|
|
|
|
#### Scenario: Transient timeout succeeds on retry
|
|
- **WHEN** a GitLab project discovery request times out and a later attempt within the configured budget succeeds
|
|
- **THEN** discovery continues using the successful response without restarting the source
|
|
|
|
#### Scenario: Retry budget is bounded
|
|
- **WHEN** every GitLab project discovery attempt fails transiently
|
|
- **THEN** the request stops after the configured attempt count and does not retry indefinitely
|
|
|
|
### Requirement: Exhausted discovery is a nonfatal source cycle
|
|
The system SHALL record an exhausted GitLab discovery transport failure as a failed cycle without terminating the supervised source child.
|
|
|
|
#### Scenario: Discovery attempts are exhausted
|
|
- **WHEN** GitLab project discovery exhausts its transport attempt budget
|
|
- **THEN** the cycle is finished as failed and the configured source loop remains alive
|
|
|
|
#### Scenario: Query position is retained
|
|
- **WHEN** a GitLab discovery cycle fails from an exhausted transport error
|
|
- **THEN** the current query is not advanced and is eligible for the next cycle
|
|
|
|
### Requirement: Discovery failure isolation
|
|
The system SHALL keep transport-only GitLab discovery failures separate from authentication, rate-limit, scanner, and non-GitLab source policy.
|
|
|
|
#### Scenario: Token remains healthy after transport failure
|
|
- **WHEN** GitLab discovery fails only because of a network transport error
|
|
- **THEN** the active token is not marked invalid or rate limited
|
|
|
|
#### Scenario: Other source behavior is unchanged
|
|
- **WHEN** a non-GitLab source encounters an API request failure
|
|
- **THEN** this GitLab-only cycle handling does not alter its existing behavior
|