diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 45b06ca..58c1c5b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,11 +72,13 @@ jobs: run: dotnet .\artifacts\tests\isolated-out\LabelingApplication.Tests.dll --release-package-contract - name: Upload versioned win-x64 release + if: github.event_name != 'pull_request' uses: actions/upload-artifact@v4 with: name: openvisionlab-labeling-studio-0.1.0-win-x64 path: artifacts/publish/Release/win-x64/0.1.0 if-no-files-found: error + retention-days: 1 - name: Whitespace check shell: pwsh diff --git a/docs/CI_COMPLETE_REGRESSION_GATE_20260801.md b/docs/CI_COMPLETE_REGRESSION_GATE_20260801.md index 857d3d3..27282fb 100644 --- a/docs/CI_COMPLETE_REGRESSION_GATE_20260801.md +++ b/docs/CI_COMPLETE_REGRESSION_GATE_20260801.md @@ -20,7 +20,11 @@ hosted GitHub Actions run has passed before the change is committed and pushed. - concurrency: one invocation in the CI job; - timeout: 15 minutes; - order: build and documentation checks, complete regression, release publish, - package verification, artifact upload; + package verification, then artifact upload for `main` pushes and manual + dispatches only; +- Artifact retention: pull-request validation deliberately skips the package + upload; `main`/manual package artifacts expire after one day. Package build + and hash-contract verification still run for every trigger. - CI environment storage: use the hosted runner's isolated available storage; the workstation-only D-drive routing rule does not block CI. diff --git a/docs/CURRENT_PRODUCT_STATUS.md b/docs/CURRENT_PRODUCT_STATUS.md index 40342a5..8b9e11e 100644 --- a/docs/CURRENT_PRODUCT_STATUS.md +++ b/docs/CURRENT_PRODUCT_STATUS.md @@ -1,6 +1,6 @@ # Current Product Status -Last updated: 2026-08-19 KST +Last updated: 2026-08-21 KST This document is the single current source of truth for product identity, verified maturity, the active development priority, and the boundary between @@ -105,7 +105,7 @@ operability. | PatchCore anomaly pilot, heatmap review, same-split comparison, error worklist, and exact-content leakage preflight | Complete for the bounded local workflow | Normal-only learning, image decision, raw score/threshold, review-only localization, matching-fingerprint comparison, bounded image-level outcome review, and pre-worker split/class exact-leakage blocking are implemented; field quality and location accuracy require approved external evidence | | Workstation theme policy | Complete | The theme selector is hidden and legacy/internal light-theme requests resolve to the supported dark palette; do not reopen multi-theme work without an explicit product-direction change | | Headless product CLI | Complete for the first read-only environment command | `--environment-self-test --json` emits structured status and bounded exit codes without WPF or durable writes; batch inference/training/archive/label operations are not CLI contracts | -| CI build/docs/full-regression/release-artifact gates | Complete for the repository workflow contract | The complete suite runs once with a 15-minute timeout; hosted GitHub success requires a pushed run | +| CI build/docs/full-regression/release-artifact gates | Complete for the repository workflow contract | The complete suite runs once with a 15-minute timeout; all triggers build and verify the package, while Artifact upload is limited to `main`/manual runs with one-day retention; hosted GitHub success requires a pushed run | | Independent production accuracy, long-run stability, and takt time | Blocked by external evidence | Requires approved, provenance-confirmed field data and intended hardware/runtime | ## 5. Protected Completed Areas diff --git a/tests/LabelingApplication.Tests/Program.cs b/tests/LabelingApplication.Tests/Program.cs index fe479d2..2cf8ccd 100644 --- a/tests/LabelingApplication.Tests/Program.cs +++ b/tests/LabelingApplication.Tests/Program.cs @@ -25787,6 +25787,8 @@ private static void TestPriorityWorkflowDocuments() AssertTrue(ciWorkflow.Contains("timeout-minutes: 15", StringComparison.Ordinal), "CI complete regression should have a bounded timeout"); AssertTrue(ciWorkflow.Contains("--release-package-contract", StringComparison.Ordinal), "CI workflow should run the release package contract"); AssertTrue(ciWorkflow.Contains("actions/upload-artifact@v4", StringComparison.Ordinal), "CI workflow should upload the verified release package"); + AssertTrue(ciWorkflow.Contains("if: github.event_name != 'pull_request'", StringComparison.Ordinal), "CI should not retain release package artifacts for pull request validation"); + AssertTrue(ciWorkflow.Contains("retention-days: 1", StringComparison.Ordinal), "CI release package artifacts should have one-day retention"); AssertTrue(appProject.Contains("dll\\OpenVisionLab.Core.dll", StringComparison.Ordinal), "app project should reference OpenVisionLab.Core by checked-in SDK DLL"); AssertTrue(appProject.Contains("dll\\OpenVisionLab.Vision2D.dll", StringComparison.Ordinal), "app project should reference OpenVisionLab.Vision2D by checked-in SDK DLL"); AssertTrue(!appProject.Contains("OpenCvSharp.Blob", StringComparison.Ordinal), "app project should not reference the unused SDK Blob dependency");