You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Protected develop@942d164ceb7af497bb28a95f842db96429d1bdc4 documents EtlJobAcceptedResponse.statusUrl as a relative status-monitor resource URL, but the record constructor currently enforces only non-null. It accepts blank strings and arbitrary absolute/external URLs, so the immutable API model can represent states that violate its own RFC 9110-facing contract even though the current controller constructs a safe relative path.
This is a bounded internal API-integrity defect rather than a claim of an externally exploitable redirect in the current controller.
Required TDD repair
Add focused deterministic tests at the EtlJobAcceptedResponse constructor boundary that first prove protected source accepts invalid blank/absolute URLs.
Narrowly reject blank values and require an origin-relative status path. Preserve the valid /api/etl/jobs/{uuid} representation and existing null semantics unless the focused contract requires a more specific exception.
Keep the change path-disjoint from the active durable-failure lifecycle writer (fix(etl): bind durable job failure metadata to lifecycle #271), which currently owns EtlJobModelTest/snapshot/status-response work. Prefer a dedicated focused test class rather than racing that file.
Run focused and applicable full hosted validation, including non-vacuous exact coverage on the exact head.
Treat checks/reviews from predecessor or concurrent heads as non-transferable.
Acceptance
Blank/whitespace-only statusUrl is rejected.
Absolute or authority-bearing URLs are rejected.
A valid origin-relative /api/etl/jobs/{uuid} URL is preserved byte-for-byte.
Public Javadoc states the enforced invariant.
Exact-head required CI/security/coverage gates pass before review/merge.
Defect
Protected
develop@942d164ceb7af497bb28a95f842db96429d1bdc4documentsEtlJobAcceptedResponse.statusUrlas a relative status-monitor resource URL, but the record constructor currently enforces only non-null. It accepts blank strings and arbitrary absolute/external URLs, so the immutable API model can represent states that violate its own RFC 9110-facing contract even though the current controller constructs a safe relative path.This is a bounded internal API-integrity defect rather than a claim of an externally exploitable redirect in the current controller.
Required TDD repair
EtlJobAcceptedResponseconstructor boundary that first prove protected source accepts invalid blank/absolute URLs./api/etl/jobs/{uuid}representation and existing null semantics unless the focused contract requires a more specific exception.EtlJobModelTest/snapshot/status-response work. Prefer a dedicated focused test class rather than racing that file.Acceptance
statusUrlis rejected./api/etl/jobs/{uuid}URL is preserved byte-for-byte.