5.0 KiB
ADDED Requirements
Requirement: Discovery preserves remote content recency
The system SHALL preserve a normalized remote content-update timestamp for GitHub, GitLab, and HuggingFace discovery records and SHALL keep DockerHub digest-based identity behavior unchanged.
Scenario: Source-specific remote timestamp is retained
- WHEN GitHub supplies
pushed_at, GitLab supplieslast_activity_at, or HuggingFace supplieslastModified - THEN the queue observation stores the valid UTC timestamp with the target identity
Scenario: Missing or malformed remote timestamp
- WHEN a discovery result has no valid remote content-update timestamp
- THEN the target remains eligible for normal new-target admission but MUST NOT trigger an updated-target rescan
Scenario: DockerHub discovery
- WHEN DockerHub resolves an image tag
- THEN the existing digest identity and refresh behavior remain authoritative without updated-target promotion
Requirement: Only changed completed targets are promoted
The system SHALL promote a known target only when it is completed, its observed remote timestamp is strictly newer than the remote timestamp covered by its latest scan, and its configured cooldown has elapsed.
Scenario: Completed target changed after its covered revision
- WHEN discovery observes a newer valid remote timestamp for a completed target after cooldown
- THEN the target becomes pending for one normal fenced scan
Scenario: Unchanged target is rediscovered
- WHEN discovery observes the same or an older remote timestamp
- THEN the completed target remains unchanged and unclaimable
Scenario: Legacy completed target is first observed
- WHEN a completed target has no claimed remote timestamp
- THEN it is promoted only if the observed remote timestamp is strictly newer than its last completion time
Scenario: Non-completed target is rediscovered
- WHEN the target is failed, pending, deferred, in progress, unresolved, leased, claimed, or reserved
- THEN updated-target discovery MUST NOT alter its lifecycle or authority fields
Scenario: Update arrives during a scan
- WHEN discovery records a newer remote timestamp after the active claim captured its scan timestamp
- THEN completion preserves the newer observation and permits one bounded follow-up scan after cooldown
Requirement: Updated-target admission is bounded
The system SHALL enforce a source-configured hard maximum of updated-target promotions per discovery cycle and a per-target cooldown.
Scenario: Eligible changes exceed the cycle budget
- WHEN more completed changed targets are eligible than the configured maximum
- THEN at most the configured maximum are promoted and the remainder stay eligible for later cycles
Scenario: Cooldown has not elapsed
- WHEN a changed completed target was scanned within the configured cooldown
- THEN it remains completed until a later eligible cycle
Scenario: Concurrent discovery cycles
- WHEN multiple workers observe the same changed target concurrently
- THEN transactional row fencing permits at most one promotion for the covered revision
Requirement: Updated discovery remains capable of seeing changed known targets
The system SHALL NOT use identity-only known-page stopping for a source while updated-target rescans are enabled and SHALL keep discovery bounded by explicit page and result limits.
Scenario: Known identities appear on an early page
- WHEN an early discovery page contains only known target identities
- THEN discovery continues within its configured hard page limit so later changed targets can be observed
Scenario: HuggingFace Space was created long ago and recently updated
- WHEN a known Space has a recent
lastModifiedvalue - THEN update-sorted HuggingFace discovery can observe it independently of creation time
Requirement: Claims record the covered remote revision
The system SHALL atomically snapshot the newest observed remote timestamp when a target is claimed.
Scenario: Revision-aware target is claimed
- WHEN a pending target receives a valid lease and reservation
- THEN its scan-covered timestamp equals the newest remote timestamp observed before that claim
Scenario: Claim fails before authority is committed
- WHEN capacity or fencing prevents the claim
- THEN the scan-covered timestamp MUST NOT advance
Requirement: Updated-target activity is separately observable
The system SHALL report updated-target promotions separately from newly discovered target admissions in durable cycle metrics, source logs, and dashboard summaries.
Scenario: Cycle admits new and updated targets
- WHEN a discovery cycle inserts new identities and promotes changed completed identities
- THEN
queued_new_countandqueued_updated_countrecord the respective counts without overlap
Scenario: No changed targets are promoted
- WHEN a cycle observes only unchanged or ineligible known targets
- THEN
queued_updated_countis zero