From c0e362c0285d267f8af4087d07943822311f60e1 Mon Sep 17 00:00:00 2001 From: sechmachine <97589681+sechmachine727@users.noreply.github.com> Date: Sun, 9 Aug 2026 23:57:17 +0700 Subject: [PATCH] ci(gateway): preserve thirty-day artifact retention --- .gitea/workflows/verify.yml | 3 ++- .../changes/truthful-fixed-frame-qualification/design.md | 2 ++ .../changes/truthful-fixed-frame-qualification/proposal.md | 2 ++ .../specs/gateway-qualification/spec.md | 7 +++++++ .../changes/truthful-fixed-frame-qualification/tasks.md | 2 ++ 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/verify.yml b/.gitea/workflows/verify.yml index a82d159..4ae3b9f 100644 --- a/.gitea/workflows/verify.yml +++ b/.gitea/workflows/verify.yml @@ -41,6 +41,7 @@ jobs: name: verse-gateway-linux-${{ gitea.sha }} path: dist/* if-no-files-found: error - retention-days: 30 + # Gitea 1.27 floors the positive upload delay; request 31 days to retain at least 30 elapsed days. + retention-days: 31 - name: Verify clean checkout run: git diff --exit-code diff --git a/openspec/changes/truthful-fixed-frame-qualification/design.md b/openspec/changes/truthful-fixed-frame-qualification/design.md index c6e83cc..085c0c4 100644 --- a/openspec/changes/truthful-fixed-frame-qualification/design.md +++ b/openspec/changes/truthful-fixed-frame-qualification/design.md @@ -20,6 +20,8 @@ Private Linux run 127/job 481 at exact source `122080ab342d20585d9a45db0017337b9 Qualification v9 observes every raw public QUIC datagram immediately after the independent client's `ReceiveDatagram` returns and before the existing decoder/reassembler. Capacity convergence and rolling five-second maxima use those monotonic receive times and encoded lengths. Their target bytes per second and five-second cap derive from `qualificationMediaPacerKbps(profile, reduction) * 1000 / 8`. Complete logical-payload observations remain separate and continue to own payload integrity, loss, reorder, latency, throughput, and queue assertions. The first public delivery at or after a step anchors the four consecutive 250 ms windows so an arbitrary control-plane timestamp cannot split the first observed datagram pair. The delivery-after-step boundary, 90%-105% window bounds, ten-second convergence ceiling, and rolling-five-second 105% gate are unchanged. +Private Linux run 128/job 482 was the single push-triggered attempt at exact source `22433e5c45c179e9d487b59e5d80f1dcf3b285ce`. Linux `make verify`, the sustained gate, strict OpenSpec, deterministic artifact generation, upload, and the clean-checkout step passed. Artifact 28's binaries and SPDX matched the frozen hashes and source metadata. The retained log `/private/tmp/versevdi-gitea-run-128-job-482.log` has SHA-256 `6f5852dce815ba87a55d61aae34cb2fce17a1a62c5ee50e18c0034259ad0a029`. The workflow requested 30 retention days, but Gitea 1.27 floored the positive request delay and the API recorded `2026-08-09T23:18:18+07:00` through `2026-09-07T23:18:18+07:00`, exactly 2,505,600 seconds or 29 elapsed days. The run was not retried. It is passing Linux execution and artifact-byte evidence but retention-nonconforming, so it neither satisfies the private Linux artifact gate nor authorizes normative Section 7. The local 31-day request compensates for verified platform rounding without changing the acceptance threshold; a separately authorized future run must prove an API interval of at least 2,592,000 seconds. + The ingress repair follows reviewed behavior rather than copying implementation source: - Apollo `adc5c5a0bd80831ce495434bb16aee2cd4175fb8`, GPL-3.0, `src/stream.cpp:1463-1474,1573-1627`, supplies the 80%-of-1-Gbps raw-block pacing, 64-KiB/64-packet batch cap, and cross-frame send schedule used by the fixture. diff --git a/openspec/changes/truthful-fixed-frame-qualification/proposal.md b/openspec/changes/truthful-fixed-frame-qualification/proposal.md index f6adfdb..e0ce032 100644 --- a/openspec/changes/truthful-fixed-frame-qualification/proposal.md +++ b/openspec/changes/truthful-fixed-frame-qualification/proposal.md @@ -10,6 +10,8 @@ The consumed v8 Section 7 attempt at `55afea72` subsequently failed after accumu Private Linux run 127/job 481 at exact source `122080ab342d20585d9a45db0017337b9ece570a` then failed `TestQualificationLossAndSteppedThroughputBounds`: the 25% capacity step reported the 11-second convergence sentinel and 5,207,475 bytes in the measured five-second window. The run produced no artifact and was not retried. Its retained log is `/private/tmp/versevdi-gitea-run-127-job-481.log`, SHA-256 `2b368413d4b0e954c64ba6f6dcefb1e165166d773b6d8f84ee372bc2c92ff5f1`; `122080ab` is superseded as a final source candidate. +Private Linux run 128/job 482 was the single push-triggered attempt at exact source `22433e5c45c179e9d487b59e5d80f1dcf3b285ce`. Linux `make verify`, the sustained gate, strict OpenSpec, deterministic artifact generation, upload, and the clean-checkout step passed. Artifact 28's binaries and SPDX matched the frozen hashes and source metadata. The retained log `/private/tmp/versevdi-gitea-run-128-job-482.log` has SHA-256 `6f5852dce815ba87a55d61aae34cb2fce17a1a62c5ee50e18c0034259ad0a029`. The workflow requested 30 retention days, but Gitea 1.27 floored the positive request delay and its API scheduled exactly 29 elapsed days. The run was not retried: it is passing Linux execution and artifact-byte evidence but retention-nonconforming, so it does not satisfy the private Linux artifact gate or authorize normative Section 7. The local 31-day request preserves the at-least-30-elapsed-day requirement; a separately authorized future run must prove `expires_at - created_at >= 2,592,000` seconds. + ## What Changes - Generate deterministic variable-size encoded frame units at the named frame rates and target bitrates, including bounded keyframes. diff --git a/openspec/changes/truthful-fixed-frame-qualification/specs/gateway-qualification/spec.md b/openspec/changes/truthful-fixed-frame-qualification/specs/gateway-qualification/spec.md index 3f0ef57..5015156 100644 --- a/openspec/changes/truthful-fixed-frame-qualification/specs/gateway-qualification/spec.md +++ b/openspec/changes/truthful-fixed-frame-qualification/specs/gateway-qualification/spec.md @@ -38,3 +38,10 @@ Capacity-step convergence and rolling-cap evidence SHALL use the monotonic recei #### Scenario: Capacity measurement crosses a short transition phase - **WHEN** a constrained 1080p flow carries nonzero bounded debt through the approximately 1.572-second 25% phase before the 50% transition - **THEN** convergence and rolling-cap checks use the observed 1,200-byte and 25-byte public datagrams against the configured wire targets, while the separately retained completed-payload observations cannot substitute for transport delivery timing + +### Requirement: Retained private Linux candidate artifact +A retained private Linux candidate artifact SHALL have API metadata whose `expires_at - created_at` interval is at least 30 elapsed days (2,592,000 seconds). Workflow intent, cleanup lag, and a local copy SHALL NOT substitute for the recorded API interval. A shorter interval SHALL fail the artifact-retention gate even when execution and artifact bytes pass. The workflow request MAY exceed 30 calendar days only to compensate for verified platform rounding; the acceptance threshold remains at least 30 elapsed days. + +#### Scenario: Platform rounding shortens retention +- **WHEN** a private Linux candidate run passes execution and artifact-byte checks but its artifact API metadata records less than 2,592,000 seconds between creation and expiry +- **THEN** the artifact-retention gate remains failed until a separately authorized candidate run records an interval of at least 2,592,000 seconds diff --git a/openspec/changes/truthful-fixed-frame-qualification/tasks.md b/openspec/changes/truthful-fixed-frame-qualification/tasks.md index ae4d208..3e910ed 100644 --- a/openspec/changes/truthful-fixed-frame-qualification/tasks.md +++ b/openspec/changes/truthful-fixed-frame-qualification/tasks.md @@ -43,3 +43,5 @@ - [x] 8.1 Preserve run 127/job 481 at `122080ab` as failed evidence with its exact log hash, no artifact, and no retry - [x] 8.2 Record raw independent-client QUIC datagram lengths/times and derive v9 capacity convergence and caps from configured wire rate while keeping logical payload observations separate +- [x] 8.3 Preserve run 128/job 482 as passing Linux execution and artifact-byte evidence but retention-nonconforming, with no retry +- [ ] 8.4 Freeze the 31-day-request descendant and prove a future private artifact records at least 30 elapsed days before tasks 5.4, 5.5, 6.3, or 7.4 can close