From 9b59eca88b587074306256cd6b361d2ce53f6dae Mon Sep 17 00:00:00 2001 From: sammiller Date: Sun, 20 Sep 2026 14:40:50 -0700 Subject: [PATCH 1/2] feat(policy): register current repository reconciliation and drift gates --- .github/workflows/pr-gate.yml | 28 +- README.md | 3 + docs/reconciliation-inventory.md | 13 + eng/policy/reconciliation/current.json | 896 ++++++ eng/policy/reconciliation/directories.json | 2874 ++++++++++++++++++++ eng/policy/reconciliation/historical.json | 1662 +++++++++++ eng/policy/reconciliation/native.json | 58 + eng/policy/reconciliation/source.json | 20 + eng/provenance/files.json | 8 + eng/reconciliation.py | 187 ++ eng/test_reconciliation.py | 96 + 11 files changed, 5843 insertions(+), 2 deletions(-) create mode 100644 docs/reconciliation-inventory.md create mode 100644 eng/policy/reconciliation/current.json create mode 100644 eng/policy/reconciliation/directories.json create mode 100644 eng/policy/reconciliation/historical.json create mode 100644 eng/policy/reconciliation/native.json create mode 100644 eng/policy/reconciliation/source.json create mode 100644 eng/reconciliation.py create mode 100644 eng/test_reconciliation.py diff --git a/.github/workflows/pr-gate.yml b/.github/workflows/pr-gate.yml index 1a63357..483e3b2 100644 --- a/.github/workflows/pr-gate.yml +++ b/.github/workflows/pr-gate.yml @@ -35,7 +35,7 @@ jobs: if ($LASTEXITCODE) { throw 'Invalid package version.' } "value=$version" >> $env:GITHUB_OUTPUT managed-packages: - needs: [allocate-version, native, secret-scan, repository-hooks, design-policy, licence-policy, provenance-policy, reference-policy, runtime-policy] + needs: [allocate-version, native, secret-scan, repository-hooks, design-policy, licence-policy, provenance-policy, reference-policy, runtime-policy, reconciliation-policy] uses: ./.github/workflows/package-validation.yml with: version: ${{ needs.allocate-version.outputs.version }} @@ -172,6 +172,30 @@ jobs: if-no-files-found: error retention-days: 30 + reconciliation-policy: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest] + runs-on: ${{ matrix.os }} + timeout-minutes: 15 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + fetch-depth: 0 + persist-credentials: false + - name: Reject incomplete inventory and linked source + run: python -m unittest discover -s eng -p test_reconciliation.py -v + - name: Verify historical and current immutable project trees + run: python eng/reconciliation.py + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + if: always() + with: + name: reconciliation-policy-${{ matrix.os }}-${{ github.run_id }}-${{ github.run_attempt }} + path: artifacts/evidence/reconciliation.json + if-no-files-found: error + retention-days: 30 + provenance-policy: strategy: fail-fast: false @@ -203,7 +227,7 @@ jobs: ci: if: always() - needs: [allocate-version, managed-packages, native, secret-scan, repository-hooks, design-policy, licence-policy, provenance-policy, reference-policy, runtime-policy] + needs: [allocate-version, managed-packages, native, secret-scan, repository-hooks, design-policy, licence-policy, provenance-policy, reference-policy, runtime-policy, reconciliation-policy] runs-on: ubuntu-latest env: CI_NEEDS: ${{ toJSON(needs) }} diff --git a/README.md b/README.md index 1e81aa1..08ae0f8 100644 --- a/README.md +++ b/README.md @@ -111,3 +111,6 @@ There are no Git submodules. Contracts publishes independently from its own revi [Runtime and source ownership](docs/runtime-ownership.md) records the current nine-owner policy, bounded runtime checks and retained bootstrap/scaffold dispositions. + +[Current repository reconciliation](docs/reconciliation-inventory.md) binds current projects, +historical dispositions and planned directory owners to exact source and candidate identities. diff --git a/docs/reconciliation-inventory.md b/docs/reconciliation-inventory.md new file mode 100644 index 0000000..12e1823 --- /dev/null +++ b/docs/reconciliation-inventory.md @@ -0,0 +1,13 @@ +# Current repository reconciliation + +The [WP01.00 Design profile](https://github.com/ArcForges/ArcForges-Design/blob/33bcddd9508ec60c0a2b0d7b53901ee7f50d0a70/docs/assurance/wp01-00-inventory-policy.md) governs `eng/policy/reconciliation/`. + +- `source.json` binds the Design authority, WP00 candidate receipt and historical tree. +- `current.json` records nine clean primary commits, their worktrees, 75 build projects and exact published candidate identities. Worktree observations are historical local state, not instructions to read adjacent sources during a build. +- `historical.json` gives all 166 ede43db C# projects an owner, target, reason and disposition, including already absent projects. Absence never means the feature is complete. +- `directories.json` assigns current and planned directories to one repository and scheduled producer. Keep can mean required future content; no empty placeholder is authorized. +- `native.json` keeps historical native admission decisions separate from project counts. + +Run `python -m unittest discover -s eng -p test_reconciliation.py -v`, then `python eng/reconciliation.py`. CI checks Windows and Linux before packing. The default run fetches eight immutable owner snapshots plus pinned Design, audits this DesktopPlatform checkout, and verifies all historical/current paths and recorded candidate identities. It does not build adjacent source or call a provider. A fresh read-only family audit accepts all nine `--repository Owner=absolute-root` arguments and an optional local `--design-root`; its report states actual commits, cleanliness and whether each snapshot is current. + +The WP00 receipt supplies the already verified public NuGet/npm/Maven/native/desktop/Web/Android/Cloud/AI evidence. The checker validates its exact hash and source identities, not current registry availability or new runtime behavior. Changes to the inventory require review against actual Git trees and the producing step; do not edit a count to hide a missing entry. The existing runtime, licence and provenance checks remain required. Full contract assignment, shared content review, native surface work, test-family mapping and physical moves remain WP01.01 through WP01.05. diff --git a/eng/policy/reconciliation/current.json b/eng/policy/reconciliation/current.json new file mode 100644 index 0000000..d9bf21e --- /dev/null +++ b/eng/policy/reconciliation/current.json @@ -0,0 +1,896 @@ +[ + { + "repository": "DesktopPlatform", + "origin": "https://github.com/ArcForges/DesktopPlatform.git", + "commit": "08c46ab9fe955c60c28e7106df519eb55bd8e3ba", + "tree": "6f200c915a94b65cfffe812407494002bae17846", + "clean": true, + "worktrees": [ + { + "path": "C:/MyFile/Projects/ArcForges/DesktopPlatform", + "commit": "08c46ab9fe955c60c28e7106df519eb55bd8e3ba", + "branch": "refs/heads/main", + "clean": true + }, + { + "path": "C:/MyFile/Projects/ArcForges/DesktopPlatform/.worktree/wp00-04-reference-baselines", + "commit": "d5a30d63e044a2b3edf487bf68714d642b6a7b99", + "branch": "refs/heads/codex/wp00-04-reference-baselines", + "clean": true + }, + { + "path": "C:/MyFile/Projects/ArcForges/DesktopPlatform/.worktree/wp00-05-runtime-ownership", + "commit": "08c46ab9fe955c60c28e7106df519eb55bd8e3ba", + "branch": "refs/heads/codex/wp00-05-runtime-ownership", + "clean": true + }, + { + "path": "C:/MyFile/Projects/ArcForges/DesktopPlatform/.worktree/wp01-00-reconciliation-inventory", + "commit": "08c46ab9fe955c60c28e7106df519eb55bd8e3ba", + "branch": "refs/heads/codex/wp01-00-reconciliation-inventory", + "clean": true + } + ], + "candidate": { + "version": "1.0.0-ci.15.1", + "manifestSha256": "24bd7bdf42b94678ff2689742b3f296bdaeb78cf5652f76d5154c7075fbaf20d", + "sourceCommit": "08c46ab9fe955c60c28e7106df519eb55bd8e3ba" + }, + "mainCi": "https://github.com/ArcForges/DesktopPlatform/actions/runs/35536843264", + "projects": [ + { + "path": "CMakeLists.txt", + "blob": "25e7846ac9304adad34abb1d784955820da5b66e", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "native/CMakeLists.txt", + "blob": "87000cb87754a69b5f62df1a30652c4212522b3a", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "native/arcgraphics-metal-abi/CMakeLists.txt", + "blob": "892ac82b793b6d2d8abacae3c44c49bf2879c40c", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "native/arcmedia-ffmpeg-abi/CMakeLists.txt", + "blob": "c38d3134451034092dc2ea0b31931ae853543814", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "native/arcmedia-ffmpeg-abi/windows/arcmedia_ffmpeg_abi.vcxproj", + "blob": "1193dea2c42d68fdef90a5e176a9cd6173486033", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "native/arcslate-color-abi/CMakeLists.txt", + "blob": "eff3fc8659b5e34a2af131d93602e50b297a9cdf", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "native/arcslate-color-abi/windows/arcslate_color_abi.vcxproj", + "blob": "86e16259126cd118adfd28f6f6bde26c8bda06a9", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "native/arcslate-image-abi/CMakeLists.txt", + "blob": "19fc63e8d6c563fb3ca86214dabd37be06507834", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "native/arcslate-image-abi/windows/arcslate_image_abi.vcxproj", + "blob": "ce5be307c92a5bb9a84581b49df47d0abe0ab47a", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "native/arcslate-otio-abi/CMakeLists.txt", + "blob": "966e3702b40213f530e8dff8bf91eccd58e74578", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "native/arcslate-otio-abi/windows/arcslate_otio_abi.vcxproj", + "blob": "5b7ce9e0feb944ef210bd812023f41bdbe0a4bb9", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/Build/ArcForges.Build.Policy/ArcForges.Build.Policy.csproj", + "blob": "26d6279f18250960eafcfd24876f215c7f151bee", + "disposition": "Keep", + "producer": "WP02", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/BuildingBlocks/ArcForges.Application.Abstractions/ArcForges.Application.Abstractions.csproj", + "blob": "1c053fa658f7bbb17153e840891ba744b891d81f", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/BuildingBlocks/ArcForges.Desktop.Experience/ArcForges.Desktop.Experience.csproj", + "blob": "3772961605c198c4e204dec02af39b607dd7a615", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/BuildingBlocks/ArcForges.Desktop.Graphics/ArcForges.Desktop.Graphics.csproj", + "blob": "5880b50b0f64f5a64b450350b1a13795278b3e6b", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/BuildingBlocks/ArcForges.Desktop.Preview/ArcForges.Desktop.Preview.csproj", + "blob": "19f944d4ff43ef37cc7559d5f4f16ae6581163d8", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/BuildingBlocks/ArcForges.Desktop.RichContent/ArcForges.Desktop.RichContent.csproj", + "blob": "44ca1edfc5e7063cd769ae4d51853e0e7ed35527", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/BuildingBlocks/ArcForges.Desktop.Text/ArcForges.Desktop.Text.csproj", + "blob": "87793aa3addd8366b664f4494520c9a97c7ca514", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/BuildingBlocks/ArcForges.Foundation/ArcForges.Foundation.csproj", + "blob": "41ed903c7e00ec2e3d93647912052a5a40bac9ba", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/BuildingBlocks/ArcForges.NativeInterop/ArcForges.NativeInterop.csproj", + "blob": "4296a8d469d84de3d133c0dd56385baf800dbf77", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/BuildingBlocks/ArcForges.Observability/ArcForges.Observability.csproj", + "blob": "2240e37c65a0756ab39187fd6cc6d463443e30fc", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/BuildingBlocks/ArcForges.Persistence.Sqlite/ArcForges.Persistence.Sqlite.csproj", + "blob": "6b4a9d54a67da08b17f2ae1d5842ac05d712d15d", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/BuildingBlocks/ArcForges.Security/ArcForges.Security.csproj", + "blob": "87fa93b3448a701333fc2a74219b8e320ba0d65d", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/DesktopHelpers/ArcForges.ContentSandbox/ArcForges.ContentSandbox.csproj", + "blob": "63f22e07804e1b9af3a7955fed864187a14366c4", + "disposition": "Keep", + "producer": "WP11", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/Native/ArcForges.Native.Abstractions/ArcForges.Native.Abstractions.csproj", + "blob": "32742a65b4e25d04b40e0dfb519ef3201359c6ba", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/Native/ArcForges.Native.Colour.Runtime.win-x64/ArcForges.Native.Colour.Runtime.win-x64.csproj", + "blob": "54f158a9af6c9337d8f5b9057f2a37871e7387d2", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/Native/ArcForges.Native.Colour/ArcForges.Native.Colour.csproj", + "blob": "79676a56736dd0ace226cf1f71c2d1f60b2ab4c4", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/Native/ArcForges.Native.Image.Runtime.win-x64/ArcForges.Native.Image.Runtime.win-x64.csproj", + "blob": "a1649f7e50bfd602b4bc8d755366a546687bbe55", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/Native/ArcForges.Native.Image/ArcForges.Native.Image.csproj", + "blob": "9132f77575e4d1940f4648f7f208d86cf6087bca", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/Native/ArcForges.Native.Media.Runtime.win-x64/ArcForges.Native.Media.Runtime.win-x64.csproj", + "blob": "6888263b03c3ebdaed94040dc35201f3b726c30c", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/Native/ArcForges.Native.Media/ArcForges.Native.Media.csproj", + "blob": "3cf66f75b2849777ccc027f4f15e0b48f09bf315", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/Native/ArcForges.Native.Otio.Runtime.win-x64/ArcForges.Native.Otio.Runtime.win-x64.csproj", + "blob": "d47a3be469d905ce5d01b956ee323d3b755b72f7", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/Native/ArcForges.Native.Otio/ArcForges.Native.Otio.csproj", + "blob": "56fa2f251ef41a4e68e09792b7b1d442432e8250", + "disposition": "Keep", + "producer": "WP13", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "tests/ArchitectureTests/ArcForges.Tests.ArchitectureTests.csproj", + "blob": "f1c0f3c9c1eed1a1e286ce1449f38bd16c2a3d6b", + "disposition": "Keep", + "producer": "WP01.04", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "tests/NativeAbiTests/ArcForges.Tests.NativeAbiTests.csproj", + "blob": "bfae1c5eb2425f36dc6bab237d5ebca5a6940efe", + "disposition": "Keep", + "producer": "WP01.04", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + } + ] + }, + { + "repository": "Contracts", + "origin": "https://github.com/ArcForges/Contracts.git", + "commit": "d716045854e2e401a1a536ba2ee5c62ad1c4e8ab", + "tree": "1511a6642483fd70b4de85f36d2649a24db55576", + "clean": true, + "worktrees": [ + { + "path": "C:/MyFile/Projects/ArcForges/Contracts", + "commit": "d716045854e2e401a1a536ba2ee5c62ad1c4e8ab", + "branch": "refs/heads/main", + "clean": true + }, + { + "path": "C:/MyFile/Projects/ArcForges/Contracts/.worktree/wp00-04-reference-naming", + "commit": "ee16cb255a50c17ac9561c45117a420b279fb46f", + "branch": "refs/heads/codex/wp00-04-reference-naming", + "clean": true + }, + { + "path": "C:/MyFile/Projects/ArcForges/Contracts/.worktree/wp00-05-runtime-ownership", + "commit": "6ff3f1b492f3caebfd38da5f9c3ece11184a604f", + "branch": "refs/heads/codex/wp00-05-runtime-ownership", + "clean": true + } + ], + "candidate": { + "version": "1.0.0-ci.58.1", + "manifestSha256": "64f3f76a0d6dc01cadda0c9ecac1a374079cdbb44921d77eecbf84a37deac097", + "sourceCommit": "d716045854e2e401a1a536ba2ee5c62ad1c4e8ab" + }, + "mainCi": "https://github.com/ArcForges/Contracts/actions/runs/35536018400", + "projects": [ + { + "path": "build.gradle.kts", + "blob": "b1a82b96c78d070abfaf3369104baace852b8b82", + "disposition": "Keep", + "producer": "WP03", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "eng/Codegen/Codegen.csproj", + "blob": "75f6a3c70813e3d1e4390af604138514e3e40fb7", + "disposition": "Keep", + "producer": "WP03", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "eng/central-signing/build.gradle.kts", + "blob": "968379e00d8fa143611fa0767a934520078f5153", + "disposition": "Keep", + "producer": "WP03", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "package.json", + "blob": "1aa386b7b7ae94eb6a7b71d18bf624366a259123", + "disposition": "Keep", + "producer": "WP03", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/public/dotnet/ArcForges.Contracts.PublicApi/ArcForges.Contracts.PublicApi.csproj", + "blob": "fa1b854b10eeb33bc0d4cc95c180d4ebc2dd53cd", + "disposition": "Keep", + "producer": "WP03", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/public/kotlin/contract-fixtures/build.gradle.kts", + "blob": "06a18cce968b2478df18631e279268041b5bce08", + "disposition": "Keep", + "producer": "WP03", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/public/kotlin/contracts-client/build.gradle.kts", + "blob": "d136458c085612cf798eb7e4f35ea0bdc9eefb00", + "disposition": "Keep", + "producer": "WP03", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/public/kotlin/contracts-connect-client/build.gradle.kts", + "blob": "aee1aa8ed040241c39f85c39ab2c01fd319cf96c", + "disposition": "Keep", + "producer": "WP03", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/public/kotlin/contracts-proto/build.gradle.kts", + "blob": "d670b7bceb9d9b7bf95e639279444f2d3dbd5109", + "disposition": "Keep", + "producer": "WP03", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/public/ts/api-client/package.json", + "blob": "28cc70e6e73cf160effd548fb4cefdf74dbb0739", + "disposition": "Keep", + "producer": "WP03", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/public/ts/proto/package.json", + "blob": "2fcdc953f86548729a05b0332d75b4c0f548f489", + "disposition": "Keep", + "producer": "WP03", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "tests/public/HelloClient/HelloClient.csproj", + "blob": "145766c682227d6dc8fc9fdc24872caccdef0253", + "disposition": "Keep", + "producer": "WP03", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "tests/public/HelloHost/HelloHost.csproj", + "blob": "fd7b7a19dc69ae6c96b167cd2241efd30c8b6a45", + "disposition": "Keep", + "producer": "WP03", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "tests/public/KotlinClient/build.gradle.kts", + "blob": "5cfe7a11c7fd8cfbdf550ad756e96b558279b8af", + "disposition": "Keep", + "producer": "WP03", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "tests/public/KotlinConnectClient/build.gradle.kts", + "blob": "fb292439baa02220936bb1ed0ee7ff36cd3fab4c", + "disposition": "Keep", + "producer": "WP03", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + } + ] + }, + { + "repository": "ArcNotes", + "origin": "https://github.com/ArcForges/ArcNotes.git", + "commit": "e40423a1b14ce8341de35748cc2a093c7c9b77a7", + "tree": "510cb6f84cfd36abf6c757b9ed7bcf0d427e137d", + "clean": true, + "worktrees": [ + { + "path": "C:/MyFile/Projects/ArcForges/ArcNotes", + "commit": "e40423a1b14ce8341de35748cc2a093c7c9b77a7", + "branch": "refs/heads/main", + "clean": true + }, + { + "path": "C:/MyFile/Projects/ArcForges/ArcNotes/.worktree/wp00-90-stage-acceptance", + "commit": "e40423a1b14ce8341de35748cc2a093c7c9b77a7", + "branch": "refs/heads/codex/wp00-90-stage-acceptance", + "clean": true + } + ], + "candidate": { + "version": "0.1.0-ci.8.1", + "verificationArchiveSha256": "a3c26c35d5ee9dfe6d62dfe82796cb92bbcb81db25d24f1c279a253c4186aaa0", + "sourceCommit": "e40423a1b14ce8341de35748cc2a093c7c9b77a7", + "nativeRuns": [ + { + "rid": "linux-x64", + "archiveSha256": "99b2f81a451ed99b195c8784830c57f71b27b06f0fccd1d064297268da5ca91b", + "smokeSha256": "0d12e7f6d4f98917a809b2e8d4ef3b4c0e871e3652a5eea46bf19a1d9f375f4f", + "observedCloudCommit": "2cf5a58633a7e09db05ebc1741f1cab83547a832" + }, + { + "rid": "osx-arm64", + "archiveSha256": "717772ee943bf9e74351d2dbfcff8beee36ddb271fd5a5ab7238b16d6afaea2c", + "smokeSha256": "62472b699f15a3f0043a8c8a2b964aaeaaefee827783ce07fb4ac1cbdb3b50ab", + "observedCloudCommit": "2cf5a58633a7e09db05ebc1741f1cab83547a832" + }, + { + "rid": "osx-x64", + "archiveSha256": "5948d3b86e884a23bba003862c55a095662c1487b3b1ed7fb5c4d7325a3b8d3f", + "smokeSha256": "121424c4b5cc5442a719bab53f96f6e8dacaabaf2ca56c737135f22ed189ca4d", + "observedCloudCommit": "2cf5a58633a7e09db05ebc1741f1cab83547a832" + }, + { + "rid": "win-arm64", + "archiveSha256": "d5cc73c8a55e0e6ccf49747ea85af7941a6ac10e86680fc1bec938e04399cdce", + "smokeSha256": "791e24409e15e7ca5f756b28f8a464fd0402e1a567afc678b3cde25b9331df12", + "observedCloudCommit": "2cf5a58633a7e09db05ebc1741f1cab83547a832" + }, + { + "rid": "win-x64", + "archiveSha256": "06fe56ddf2ed02f199b1a6c21ce09f7a0074f9ee305f62cbe374aa34fd6a794d", + "smokeSha256": "d43c08e7780eccd08fc7da25e20312c29730342002577a9911eb034eda32efbf", + "observedCloudCommit": "2cf5a58633a7e09db05ebc1741f1cab83547a832" + } + ] + }, + "mainCi": "https://github.com/ArcForges/ArcNotes/actions/runs/35425608146", + "projects": [ + { + "path": "eng/ArcForges.Repository/ArcForges.Repository.csproj", + "blob": "20a51da180a8b012de47ec9d6b7cf00c96dad2cd", + "disposition": "Keep", + "producer": "WP18", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/ArcForges.ArcNotes.Core/ArcForges.ArcNotes.Core.csproj", + "blob": "c0b0a7c802b9faf2601f0b8e1d273818b15f5e21", + "disposition": "Keep", + "producer": "WP18", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/ArcForges.ArcNotes/ArcForges.ArcNotes.csproj", + "blob": "47c6a559a45dd8023a4b8209dc83d31f4b1e5c70", + "disposition": "Keep", + "producer": "WP18", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "tests/ArcForges.ArcNotes.Tests/ArcForges.ArcNotes.Tests.csproj", + "blob": "fab08f5e2abe006bdb72f36e06d390dbdb1ff62c", + "disposition": "Keep", + "producer": "WP18", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + } + ] + }, + { + "repository": "ArcScope", + "origin": "https://github.com/ArcForges/ArcScope.git", + "commit": "d247dcff36fd1123a70e5e59967a9b2294a2eeac", + "tree": "91419a71287443588e3a180a6a2e7b7e9d8fe3e2", + "clean": true, + "worktrees": [ + { + "path": "C:/MyFile/Projects/ArcForges/ArcScope", + "commit": "d247dcff36fd1123a70e5e59967a9b2294a2eeac", + "branch": "refs/heads/main", + "clean": true + }, + { + "path": "C:/MyFile/Projects/ArcForges/ArcScope/.worktree/wp00-90-stage-acceptance", + "commit": "d247dcff36fd1123a70e5e59967a9b2294a2eeac", + "branch": "refs/heads/codex/wp00-90-stage-acceptance", + "clean": true + } + ], + "candidate": { + "version": "0.1.0-ci.8.1", + "verificationArchiveSha256": "b856d95171596d2434583af51804cee215f36cbe2506d8d2755901705ee5e864", + "sourceCommit": "d247dcff36fd1123a70e5e59967a9b2294a2eeac", + "nativeRuns": [ + { + "rid": "linux-x64", + "archiveSha256": "6b35f26f367dca8c21699c45440da0c593bbe6debea0fc1faeecd348b3c4972f", + "smokeSha256": "130b9a5d543e6b64af5b78c44ea7bec99adc7e90db29c972f3a4573a70a06487", + "observedCloudCommit": "2cf5a58633a7e09db05ebc1741f1cab83547a832" + }, + { + "rid": "osx-arm64", + "archiveSha256": "dc1605c99b60b179633ecb734592950322591246e95f59c0fb787379fc780a0d", + "smokeSha256": "b45c96f24e7877afe4541afc44415f792c8efdad8029ee76d278d01605d32504", + "observedCloudCommit": "2cf5a58633a7e09db05ebc1741f1cab83547a832" + }, + { + "rid": "osx-x64", + "archiveSha256": "8a03ff9ff492da0e646b7f92f3974b0e74e3ea380210f5ae9b4b224db47ee1ba", + "smokeSha256": "035441bbdf95b93cfdae8f3ba80eaa0f10185afc40f815f0df5bb16428ec218c", + "observedCloudCommit": "2cf5a58633a7e09db05ebc1741f1cab83547a832" + }, + { + "rid": "win-arm64", + "archiveSha256": "2b6c32a89cdd45ba51bd80cd6a4de8867090ee0e1d38d586a0d689d983d45c92", + "smokeSha256": "95009276d6ecd7e11a06a740d973e8c0a4a4fefdcc08bd5f1de8cd74486112f1", + "observedCloudCommit": "2cf5a58633a7e09db05ebc1741f1cab83547a832" + }, + { + "rid": "win-x64", + "archiveSha256": "edb4ea523bf87ac02bbd62f0bbcea28867ed207c0aedc6f4dc70bc7ed1ac0da7", + "smokeSha256": "97ffbdadbb52f9c5f5e5f6f00b20b44b27a85e6389f22e3d6585622d3c64c6e0", + "observedCloudCommit": "2cf5a58633a7e09db05ebc1741f1cab83547a832" + } + ] + }, + "mainCi": "https://github.com/ArcForges/ArcScope/actions/runs/35426873548", + "projects": [ + { + "path": "eng/ArcForges.Repository/ArcForges.Repository.csproj", + "blob": "20a51da180a8b012de47ec9d6b7cf00c96dad2cd", + "disposition": "Keep", + "producer": "WP33", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/ArcForges.ArcScope.Core/ArcForges.ArcScope.Core.csproj", + "blob": "c0b0a7c802b9faf2601f0b8e1d273818b15f5e21", + "disposition": "Keep", + "producer": "WP33", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/ArcForges.ArcScope/ArcForges.ArcScope.csproj", + "blob": "aee25802b5bde26ebb54a3547347ea6c363dbc8f", + "disposition": "Keep", + "producer": "WP33", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "tests/ArcForges.ArcScope.Tests/ArcForges.ArcScope.Tests.csproj", + "blob": "4a5675eb0a162e3d1429366361c11cbbc9769176", + "disposition": "Keep", + "producer": "WP33", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + } + ] + }, + { + "repository": "ArcSlate", + "origin": "https://github.com/ArcForges/ArcSlate.git", + "commit": "b0d255f54fb560a534cc493d5645ca4bc7b4bd0e", + "tree": "c0e546663f52f0ae4fef451ff4dd679d35ce7981", + "clean": true, + "worktrees": [ + { + "path": "C:/MyFile/Projects/ArcForges/ArcSlate", + "commit": "b0d255f54fb560a534cc493d5645ca4bc7b4bd0e", + "branch": "refs/heads/main", + "clean": true + }, + { + "path": "C:/MyFile/Projects/ArcForges/ArcSlate/.worktree/wp00-90-stage-acceptance", + "commit": "b0d255f54fb560a534cc493d5645ca4bc7b4bd0e", + "branch": "refs/heads/codex/wp00-90-stage-acceptance", + "clean": true + } + ], + "candidate": { + "version": "0.1.0-ci.8.1", + "verificationArchiveSha256": "a14db6d00e928b33abf8ea8e2d405f2d1030ef72855a08e34f99760844a4265e", + "sourceCommit": "b0d255f54fb560a534cc493d5645ca4bc7b4bd0e", + "nativeRuns": [ + { + "rid": "linux-x64", + "archiveSha256": "d23812de1598848b917d7d5c0c8863ca67f06e37a353bf80c8a33224667f55ff", + "smokeSha256": "b05877fd37e103de95d07db2c0a7b380e429cbdef53611d8e48bfe9d067d638b", + "observedCloudCommit": "2cf5a58633a7e09db05ebc1741f1cab83547a832" + }, + { + "rid": "osx-arm64", + "archiveSha256": "79463644d337d0bb0d482f2f39f610b3f851b9b1aa532f6133ab6af94c3a4995", + "smokeSha256": "28365b2ca9436bc55ebef0c12d9b14659f2f58e3bc33064b2ce5bc0c6ece3a06", + "observedCloudCommit": "2cf5a58633a7e09db05ebc1741f1cab83547a832" + }, + { + "rid": "osx-x64", + "archiveSha256": "31e4576de83018fcb43e18329776d71dd6d1680cee10c7ade068ac166c7632e4", + "smokeSha256": "6103b10b0b561b1accb692c24d91eff98609ab979b424e401ea5fcebd4935005", + "observedCloudCommit": "2cf5a58633a7e09db05ebc1741f1cab83547a832" + }, + { + "rid": "win-arm64", + "archiveSha256": "a016e5995a28767eba636d7fa33d260b5232ae31447fad5a261e15d0c25cf2c2", + "smokeSha256": "5c585ecb81d4ee15cb6c47b5353113040c48184b61553594ccba6bbf7e4ccc00", + "observedCloudCommit": "2cf5a58633a7e09db05ebc1741f1cab83547a832" + }, + { + "rid": "win-x64", + "archiveSha256": "873de67ab858650b68d98beca7aac14fdae52a6dcc838c04dec6e91d8430830d", + "smokeSha256": "d13799a7ebd6385f18004244e54888ef794aba3586ef50067e62b274c6e6c8dc", + "observedCloudCommit": "2cf5a58633a7e09db05ebc1741f1cab83547a832" + } + ] + }, + "mainCi": "https://github.com/ArcForges/ArcSlate/actions/runs/35427484761", + "projects": [ + { + "path": "eng/ArcForges.Repository/ArcForges.Repository.csproj", + "blob": "20a51da180a8b012de47ec9d6b7cf00c96dad2cd", + "disposition": "Keep", + "producer": "WP36", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/ArcForges.ArcSlate.Core/ArcForges.ArcSlate.Core.csproj", + "blob": "c0b0a7c802b9faf2601f0b8e1d273818b15f5e21", + "disposition": "Keep", + "producer": "WP36", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/ArcForges.ArcSlate/ArcForges.ArcSlate.csproj", + "blob": "1f2a2999800bc7845fac192ed0e6204f7c01f9a6", + "disposition": "Keep", + "producer": "WP36", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "tests/ArcForges.ArcSlate.Tests/ArcForges.ArcSlate.Tests.csproj", + "blob": "609d45bab405b7eb40a4e15061fa9e1a6e4ff969", + "disposition": "Keep", + "producer": "WP36", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + } + ] + }, + { + "repository": "Cloud", + "origin": "https://github.com/ArcForges/Cloud.git", + "commit": "4571ec8692235485712d4c4e3ef4886c162f2574", + "tree": "9c49531f1e1c89e67bdc9029029bd4ece89bdba6", + "clean": true, + "worktrees": [ + { + "path": "C:/MyFile/Projects/ArcForges/Cloud", + "commit": "4571ec8692235485712d4c4e3ef4886c162f2574", + "branch": "refs/heads/main", + "clean": true + }, + { + "path": "C:/MyFile/Projects/ArcForges/Cloud/.worktree/wp00-05-runtime-ownership", + "commit": "4571ec8692235485712d4c4e3ef4886c162f2574", + "branch": "refs/heads/codex/wp00-05-runtime-ownership", + "clean": true + } + ], + "candidate": { + "version": "0.1.0-ci.18.1", + "manifestSha256": "1023abce52924b7db060ac2c5e5fad53ef108dde863470b959f5c507fb7e612a", + "sourceCommit": "4571ec8692235485712d4c4e3ef4886c162f2574" + }, + "mainCi": "https://github.com/ArcForges/Cloud/actions/runs/35535883611", + "projects": [ + { + "path": "package.json", + "blob": "9dcc0a0322d85844860c4eaa4c94140c2c8bc256", + "disposition": "Keep", + "producer": "WP21", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "src/ArcForges.Cloud/ArcForges.Cloud.csproj", + "blob": "2960523c89be8d20dd2abaa6ff816e276614a2c5", + "disposition": "Keep", + "producer": "WP21", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "tests/ArcForges.Cloud.Consumer/ArcForges.Cloud.Consumer.csproj", + "blob": "bd7168f08439256710f60a26ea4f91296ea771fc", + "disposition": "Keep", + "producer": "WP21", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "tests/ArcForges.Cloud.Tests/ArcForges.Cloud.Tests.csproj", + "blob": "25bfa222199d806a951a8a0fe73dda22b04b6f10", + "disposition": "Keep", + "producer": "WP21", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "tests/kotlin-consumer/build.gradle.kts", + "blob": "14def5970080a2e185e5327af9148eea7fdec80b", + "disposition": "Keep", + "producer": "WP21", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + } + ] + }, + { + "repository": "AI", + "origin": "https://github.com/ArcForges/AI.git", + "commit": "944edfe88718fc5f72a42ea0bed1c495307c22df", + "tree": "7fbb95546504b0fbe6d71fd529e45371b08a800e", + "clean": true, + "worktrees": [ + { + "path": "C:/MyFile/Projects/ArcForges/AI", + "commit": "944edfe88718fc5f72a42ea0bed1c495307c22df", + "branch": "refs/heads/main", + "clean": true + }, + { + "path": "C:/MyFile/Projects/ArcForges/AI/.worktree/wp00-05-runtime-ownership", + "commit": "944edfe88718fc5f72a42ea0bed1c495307c22df", + "branch": "refs/heads/codex/wp00-05-runtime-ownership", + "clean": true + } + ], + "candidate": { + "version": "0.1.0-ci.26.1", + "manifestSha256": "a48dcfd9f35b5c1972d2079606073b742681103f81ca74e966d44218a47c26ef", + "sourceCommit": "944edfe88718fc5f72a42ea0bed1c495307c22df" + }, + "mainCi": "https://github.com/ArcForges/AI/actions/runs/35535890121", + "projects": [ + { + "path": "package.json", + "blob": "535eb62a0aba8fc50fd251948cda16e2d7da24ce", + "disposition": "Keep", + "producer": "WP52", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + } + ] + }, + { + "repository": "Web", + "origin": "https://github.com/ArcForges/Web.git", + "commit": "84939ca1fde0f0653d2cb4d8b8f9e5dd1057abb5", + "tree": "18370fe45c84efc957008f5954d4be089042aed3", + "clean": true, + "worktrees": [ + { + "path": "C:/MyFile/Projects/ArcForges/Web", + "commit": "84939ca1fde0f0653d2cb4d8b8f9e5dd1057abb5", + "branch": "refs/heads/main", + "clean": true + } + ], + "candidate": { + "version": "0.1.0-ci.22.1", + "sourceCommit": "84939ca1fde0f0653d2cb4d8b8f9e5dd1057abb5", + "manifestSha256": "17e520c4e9d9e45b6636f32bf03764cf80d113f15a2bc9185708a37780221974", + "archiveSha256": "ad36fbf27582f9571e92b22772172bbb14dfab9eeecce102adcc28de3d6d3d6f", + "verifiedMembers": 49 + }, + "mainCi": "https://github.com/ArcForges/Web/actions/runs/35437014881", + "projects": [ + { + "path": "ArcForges.Web.esproj", + "blob": "3349d5ca919aa5f4fbcce0f2ee84da7e5c246e16", + "disposition": "Keep", + "producer": "WP47", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "apps/site/package.json", + "blob": "c7dfdd8ce47cf34e385c6b76436f7b8c0abc8eb5", + "disposition": "Keep", + "producer": "WP47", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "package.json", + "blob": "41c715894ad6dd067af8087a22d24d393da85d3c", + "disposition": "Keep", + "producer": "WP47", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "packages/ui/package.json", + "blob": "758009ce025ea86a6fd5983a6ecaf1f273233e26", + "disposition": "Keep", + "producer": "WP47", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + } + ] + }, + { + "repository": "Mobile", + "origin": "https://github.com/ArcForges/Mobile.git", + "commit": "5031d837d2e7bf9dd1b681c837c942d2b74dc65e", + "tree": "bf4f170f365e5546b5ef2e26d26f575e6b390187", + "clean": true, + "worktrees": [ + { + "path": "C:/MyFile/Projects/ArcForges/Mobile", + "commit": "5031d837d2e7bf9dd1b681c837c942d2b74dc65e", + "branch": "refs/heads/main", + "clean": true + } + ], + "candidate": { + "version": "0.1.0-ci.14.1", + "sourceCommit": "5031d837d2e7bf9dd1b681c837c942d2b74dc65e", + "releaseReceiptSha256": "33f08579b7b4d854f6bab241a62d2be0ac6e1ed45c324194272334c35ad80216", + "signedApkSha256": "418c406dd4b1cd12b5cd9b489a863340e3c6ccb172d8aa8809ad0c14de4d4de9", + "signedAabSha256": "6780866e2b833e4eddc2c9632f63734a7ed82e6a50abb5af3f53fdd224ef14d5", + "versionCode": 1401, + "identity": "io.github.arcforges.mobile" + }, + "mainCi": "https://github.com/ArcForges/Mobile/actions/runs/35444269638", + "projects": [ + { + "path": "app/build.gradle.kts", + "blob": "e9c6106f0636c779b9029eb1843a49f67d80050a", + "disposition": "Keep", + "producer": "WP30", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "build.gradle.kts", + "blob": "daded22d08c0c4b003a7f28336236e579eca6653", + "disposition": "Keep", + "producer": "WP30", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + }, + { + "path": "shared/build.gradle.kts", + "blob": "50f73dd0ab90a1c44164caa86532e4a704442aa0", + "disposition": "Keep", + "producer": "WP30", + "reason": "Retain current owned build/probe compatibility; scheduled producer completes accepted behavior." + } + ] + } +] diff --git a/eng/policy/reconciliation/directories.json b/eng/policy/reconciliation/directories.json new file mode 100644 index 0000000..1de6891 --- /dev/null +++ b/eng/policy/reconciliation/directories.json @@ -0,0 +1,2874 @@ +[ + { + "owner": "AI", + "path": ".github/workflows", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "AI", + "path": "eng", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "AI", + "path": "fixtures", + "disposition": "Keep", + "present": false, + "producer": "WP52", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "AI", + "path": "src/context", + "disposition": "Keep", + "present": false, + "producer": "WP52", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "AI", + "path": "src/models", + "disposition": "Keep", + "present": false, + "producer": "WP52", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "AI", + "path": "src/objects", + "disposition": "Keep", + "present": false, + "producer": "WP52", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "AI", + "path": "src/ports", + "disposition": "Keep", + "present": false, + "producer": "WP52", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "AI", + "path": "src/streams", + "disposition": "Keep", + "present": false, + "producer": "WP52", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "AI", + "path": "src/workflows", + "disposition": "Keep", + "present": false, + "producer": "WP52", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "AI", + "path": "tests", + "disposition": "Keep", + "present": true, + "producer": "WP01.04", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": ".github/workflows", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": "eng", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": "eng/ArcForges.Repository", + "disposition": "Keep", + "present": true, + "producer": "WP18", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": "fixtures", + "disposition": "Keep", + "present": false, + "producer": "WP18", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": "src", + "disposition": "Keep", + "present": true, + "producer": "WP18", + "reason": "Owned target root for reviewed historical responsibility migration; no blanket source transfer." + }, + { + "owner": "ArcNotes", + "path": "src/ArcForges.ArcNotes", + "disposition": "Keep", + "present": true, + "producer": "WP18", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": "src/ArcForges.ArcNotes.Core", + "disposition": "Keep", + "present": true, + "producer": "WP18", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": "src/ArcNotes.Application", + "disposition": "Keep", + "present": false, + "producer": "WP18", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": "src/ArcNotes.AssistantIntegration", + "disposition": "Keep", + "present": false, + "producer": "WP18", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": "src/ArcNotes.Desktop", + "disposition": "Keep", + "present": false, + "producer": "WP18", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": "src/ArcNotes.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP18", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": "src/ArcNotes.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP18", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": "tests", + "disposition": "Keep", + "present": true, + "producer": "WP01.04", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": "tests/Acceptance", + "disposition": "Keep", + "present": false, + "producer": "WP18", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": "tests/Application", + "disposition": "Keep", + "present": false, + "producer": "WP18", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": "tests/ArcForges.ArcNotes.Tests", + "disposition": "Keep", + "present": true, + "producer": "WP18", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": "tests/Domain", + "disposition": "Keep", + "present": false, + "producer": "WP18", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcNotes", + "path": "tests/Integration", + "disposition": "Keep", + "present": false, + "producer": "WP18", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": ".github/workflows", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": "eng", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": "eng/ArcForges.Repository", + "disposition": "Keep", + "present": true, + "producer": "WP33", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": "fixtures", + "disposition": "Keep", + "present": false, + "producer": "WP33", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": "src", + "disposition": "Keep", + "present": true, + "producer": "WP33", + "reason": "Owned target root for reviewed historical responsibility migration; no blanket source transfer." + }, + { + "owner": "ArcScope", + "path": "src/ArcForges.ArcScope", + "disposition": "Keep", + "present": true, + "producer": "WP33", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": "src/ArcForges.ArcScope.Core", + "disposition": "Keep", + "present": true, + "producer": "WP33", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": "src/ArcScope.Application", + "disposition": "Keep", + "present": false, + "producer": "WP33", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": "src/ArcScope.AssistantIntegration", + "disposition": "Keep", + "present": false, + "producer": "WP33", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": "src/ArcScope.Desktop", + "disposition": "Keep", + "present": false, + "producer": "WP33", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": "src/ArcScope.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP33", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": "src/ArcScope.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP33", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": "tests", + "disposition": "Keep", + "present": true, + "producer": "WP01.04", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": "tests/Acceptance", + "disposition": "Keep", + "present": false, + "producer": "WP33", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": "tests/Application", + "disposition": "Keep", + "present": false, + "producer": "WP33", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": "tests/ArcForges.ArcScope.Tests", + "disposition": "Keep", + "present": true, + "producer": "WP33", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": "tests/Domain", + "disposition": "Keep", + "present": false, + "producer": "WP33", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcScope", + "path": "tests/Integration", + "disposition": "Keep", + "present": false, + "producer": "WP33", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": ".github/workflows", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": "eng", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": "eng/ArcForges.Repository", + "disposition": "Keep", + "present": true, + "producer": "WP36", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": "fixtures", + "disposition": "Keep", + "present": false, + "producer": "WP36", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": "src", + "disposition": "Keep", + "present": true, + "producer": "WP36", + "reason": "Owned target root for reviewed historical responsibility migration; no blanket source transfer." + }, + { + "owner": "ArcSlate", + "path": "src/ArcForges.ArcSlate", + "disposition": "Keep", + "present": true, + "producer": "WP36", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": "src/ArcForges.ArcSlate.Core", + "disposition": "Keep", + "present": true, + "producer": "WP36", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": "src/ArcSlate.Application", + "disposition": "Keep", + "present": false, + "producer": "WP36", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": "src/ArcSlate.AssistantIntegration", + "disposition": "Keep", + "present": false, + "producer": "WP36", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": "src/ArcSlate.Desktop", + "disposition": "Keep", + "present": false, + "producer": "WP36", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": "src/ArcSlate.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP36", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": "src/ArcSlate.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP36", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": "tests", + "disposition": "Keep", + "present": true, + "producer": "WP01.04", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": "tests/Acceptance", + "disposition": "Keep", + "present": false, + "producer": "WP36", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": "tests/Application", + "disposition": "Keep", + "present": false, + "producer": "WP36", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": "tests/ArcForges.ArcSlate.Tests", + "disposition": "Keep", + "present": true, + "producer": "WP36", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": "tests/Domain", + "disposition": "Keep", + "present": false, + "producer": "WP36", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "ArcSlate", + "path": "tests/Integration", + "disposition": "Keep", + "present": false, + "producer": "WP36", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": ".github/workflows", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "deploy", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "eng", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "fixtures", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/ArcForges.Cloud", + "disposition": "Keep", + "present": true, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Cloud.Host", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Cloud.Integrations", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Cloud.Storage.D1", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Agent", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Agent/Agent.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Agent/Agent.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Agent/Agent.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Audit", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Audit/Audit.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Audit/Audit.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Audit/Audit.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Chat", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Chat/Chat.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Chat/Chat.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Chat/Chat.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Commerce", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Commerce/Commerce.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Commerce/Commerce.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Commerce/Commerce.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Configuration", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Configuration/Configuration.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Configuration/Configuration.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Configuration/Configuration.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Devices", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Devices/Devices.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Devices/Devices.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Devices/Devices.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Entitlement", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Entitlement/Entitlement.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Entitlement/Entitlement.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Entitlement/Entitlement.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Identity", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Identity/Identity.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Identity/Identity.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Identity/Identity.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Notes", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Notes/Notes.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Notes/Notes.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Notes/Notes.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Notification", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Notification/Notification.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Notification/Notification.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Notification/Notification.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/PackageCatalog", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/PackageCatalog/PackageCatalog.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/PackageCatalog/PackageCatalog.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/PackageCatalog/PackageCatalog.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Policy", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Policy/Policy.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Policy/Policy.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Policy/Policy.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Resource", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Resource/Resource.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Resource/Resource.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Resource/Resource.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Scope", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Scope/Scope.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Scope/Scope.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Scope/Scope.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Search", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Search/Search.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Search/Search.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Search/Search.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Slate", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Slate/Slate.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Slate/Slate.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Slate/Slate.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Support", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Support/Support.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Support/Support.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Support/Support.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Sync", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Sync/Sync.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Sync/Sync.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Sync/Sync.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Task", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Task/Task.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Task/Task.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Task/Task.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/TrustSafety", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/TrustSafety/TrustSafety.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/TrustSafety/TrustSafety.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/TrustSafety/TrustSafety.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Workspace", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Workspace/Workspace.Application", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Workspace/Workspace.Domain", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "src/Modules/Workspace/Workspace.Infrastructure", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "storage/migrations", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "storage/plans", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "tests", + "disposition": "Keep", + "present": true, + "producer": "WP01.04", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "tests/ArcForges.Cloud.Consumer", + "disposition": "Keep", + "present": true, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "tests/ArcForges.Cloud.Tests", + "disposition": "Keep", + "present": true, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "tests/Bindings", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "tests/Integration", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "tests/Module", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "tests/Recovery", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "tests/Sql", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "tests/kotlin-consumer", + "disposition": "Keep", + "present": true, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "worker", + "disposition": "Keep", + "present": true, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "worker/src/bindings", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "worker/src/container", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "worker/src/events", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "worker/src/jobs", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Cloud", + "path": "worker/src/routing", + "disposition": "Keep", + "present": false, + "producer": "WP21", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": ".github/workflows", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "eng", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "eng/Codegen", + "disposition": "Keep", + "present": true, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "eng/central-signing", + "disposition": "Keep", + "present": true, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "fixtures", + "disposition": "Keep", + "present": true, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "internal/ai-http/v1", + "disposition": "Keep", + "present": false, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "internal/proto", + "disposition": "Keep", + "present": false, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "public/http/v1", + "disposition": "Keep", + "present": false, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "public/proto", + "disposition": "Keep", + "present": true, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "src", + "disposition": "Keep", + "present": true, + "producer": "WP03", + "reason": "Owned target root for reviewed historical responsibility migration; no blanket source transfer." + }, + { + "owner": "Contracts", + "path": "src/internal", + "disposition": "Keep", + "present": false, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "src/public/csharp", + "disposition": "Retire", + "present": false, + "producer": "WP03", + "reason": "Architecture 27 legacy C# directory spelling; current generated C# owner is src/public/dotnet. Preserve actual project/package identity." + }, + { + "owner": "Contracts", + "path": "src/public/dotnet", + "disposition": "Keep", + "present": true, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "src/public/dotnet/ArcForges.Contracts.PublicApi", + "disposition": "Keep", + "present": true, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "src/public/kotlin/contract-fixtures", + "disposition": "Keep", + "present": true, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "src/public/kotlin/contracts-client", + "disposition": "Retire", + "present": true, + "producer": "WP03", + "reason": "Retain bootstrap compatibility until first business release; retirement is scheduled, not already executed." + }, + { + "owner": "Contracts", + "path": "src/public/kotlin/contracts-connect-client", + "disposition": "Keep", + "present": true, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "src/public/kotlin/contracts-proto", + "disposition": "Keep", + "present": true, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "src/public/ts/api-client", + "disposition": "Keep", + "present": true, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "src/public/ts/proto", + "disposition": "Keep", + "present": true, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "tests", + "disposition": "Keep", + "present": true, + "producer": "WP01.04", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "tests/public/HelloClient", + "disposition": "Keep", + "present": true, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "tests/public/HelloHost", + "disposition": "Keep", + "present": true, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "tests/public/KotlinClient", + "disposition": "Keep", + "present": true, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Contracts", + "path": "tests/public/KotlinConnectClient", + "disposition": "Keep", + "present": true, + "producer": "WP03", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": ".github/workflows", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "artifacts", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "eng", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "eng/ArcForges.Build.Policy", + "disposition": "Move", + "present": false, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "fixtures", + "disposition": "Keep", + "present": false, + "producer": "WP01.02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "native", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "native-ide", + "disposition": "Keep", + "present": false, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "native/arcgraphics-metal-abi", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "native/arcmedia-ffmpeg-abi", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "native/arcmedia-ffmpeg-abi/windows", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "native/arcscope-mdf-abi", + "disposition": "Retire", + "present": false, + "producer": "WP01.05", + "reason": "Retired monorepo or excluded MDF path; do not restore as an integration dependency." + }, + { + "owner": "DesktopPlatform", + "path": "native/arcslate-color-abi", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "native/arcslate-color-abi/windows", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "native/arcslate-image-abi", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "native/arcslate-image-abi/windows", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "native/arcslate-otio-abi", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "native/arcslate-otio-abi/windows", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "samples/AssistantHost", + "disposition": "Keep", + "present": false, + "producer": "WP17", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/ArcChat", + "disposition": "Retire", + "present": false, + "producer": "WP01.05", + "reason": "Retired monorepo or excluded MDF path; do not restore as an integration dependency." + }, + { + "owner": "DesktopPlatform", + "path": "src/ArcNotes", + "disposition": "Retire", + "present": false, + "producer": "WP01.05", + "reason": "Retired monorepo or excluded MDF path; do not restore as an integration dependency." + }, + { + "owner": "DesktopPlatform", + "path": "src/ArcScope", + "disposition": "Retire", + "present": false, + "producer": "WP01.05", + "reason": "Retired monorepo or excluded MDF path; do not restore as an integration dependency." + }, + { + "owner": "DesktopPlatform", + "path": "src/ArcSlate", + "disposition": "Retire", + "present": false, + "producer": "WP01.05", + "reason": "Retired monorepo or excluded MDF path; do not restore as an integration dependency." + }, + { + "owner": "DesktopPlatform", + "path": "src/Assistant", + "disposition": "Keep", + "present": false, + "producer": "WP14", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Assistant/ArcForges.Assistant.Abstractions", + "disposition": "Keep", + "present": false, + "producer": "WP14", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Assistant/ArcForges.Assistant.Avalonia", + "disposition": "Keep", + "present": false, + "producer": "WP17", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Assistant/ArcForges.Assistant.Cloud", + "disposition": "Keep", + "present": false, + "producer": "WP17", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Assistant/ArcForges.Assistant.Core", + "disposition": "Keep", + "present": false, + "producer": "WP15", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Assistant/ArcForges.Assistant.Persistence.Sqlite", + "disposition": "Keep", + "present": false, + "producer": "WP15", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Build", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Build/ArcForges.Build.Policy", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks", + "disposition": "Keep", + "present": true, + "producer": "WP01.02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.Application.Abstractions", + "disposition": "Keep", + "present": true, + "producer": "WP04", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.Capabilities", + "disposition": "Keep", + "present": false, + "producer": "WP09", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.DesignSystem", + "disposition": "Keep", + "present": false, + "producer": "WP10", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.Desktop.Experience", + "disposition": "Keep", + "present": true, + "producer": "WP01.02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.Desktop.Graphics", + "disposition": "Keep", + "present": true, + "producer": "WP01.02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.Desktop.Preview", + "disposition": "Keep", + "present": true, + "producer": "WP01.02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.Desktop.RichContent", + "disposition": "Keep", + "present": true, + "producer": "WP01.02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.Desktop.Shell", + "disposition": "Keep", + "present": false, + "producer": "WP10", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.Desktop.Text", + "disposition": "Keep", + "present": true, + "producer": "WP01.02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.Execution", + "disposition": "Keep", + "present": false, + "producer": "WP16", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.Foundation", + "disposition": "Keep", + "present": true, + "producer": "WP04", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.LocalRpc", + "disposition": "Keep", + "present": false, + "producer": "WP08", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.NativeInterop", + "disposition": "Keep", + "present": true, + "producer": "WP01.02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.Observability", + "disposition": "Keep", + "present": true, + "producer": "WP12", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.Persistence.Postgres", + "disposition": "Retire", + "present": false, + "producer": "WP01.02", + "reason": "Historical target ownership; item-specific migration remains recorded in historical.json." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.Persistence.Sqlite", + "disposition": "Keep", + "present": true, + "producer": "WP07", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.Security", + "disposition": "Keep", + "present": true, + "producer": "WP11", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.Testing", + "disposition": "Retire", + "present": false, + "producer": "WP01.02", + "reason": "Historical target ownership; item-specific migration remains recorded in historical.json." + }, + { + "owner": "DesktopPlatform", + "path": "src/BuildingBlocks/ArcForges.Update", + "disposition": "Keep", + "present": false, + "producer": "WP53", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Cloud", + "disposition": "Retire", + "present": false, + "producer": "WP01.05", + "reason": "Retired monorepo or excluded MDF path; do not restore as an integration dependency." + }, + { + "owner": "DesktopPlatform", + "path": "src/Communication", + "disposition": "Keep", + "present": false, + "producer": "WP06", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Communication/ArcForges.Cloud.Client", + "disposition": "Keep", + "present": false, + "producer": "WP06", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Communication/ArcForges.Device.Runtime", + "disposition": "Keep", + "present": false, + "producer": "WP17", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Contracts", + "disposition": "Retire", + "present": false, + "producer": "WP01.05", + "reason": "Retired monorepo or excluded MDF path; do not restore as an integration dependency." + }, + { + "owner": "DesktopPlatform", + "path": "src/DesktopHelpers", + "disposition": "Keep", + "present": true, + "producer": "WP11", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/DesktopHelpers/ArcForges.ContentSandbox", + "disposition": "Keep", + "present": true, + "producer": "WP11", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/DesktopHelpers/ArcForges.ContentSandbox.Broker", + "disposition": "Keep", + "present": false, + "producer": "WP11", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/DesktopHelpers/ArcForges.ContentSandbox.Contracts", + "disposition": "Keep", + "present": false, + "producer": "WP11", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/DesktopHelpers/ArcForges.ContentSandbox.Runtime.linux-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP11", + "reason": "Helper runtime family; restricted fixture parser at WP11 and production composition at WP13." + }, + { + "owner": "DesktopPlatform", + "path": "src/DesktopHelpers/ArcForges.ContentSandbox.Runtime.linux-x64", + "disposition": "Keep", + "present": false, + "producer": "WP11", + "reason": "Helper runtime family; restricted fixture parser at WP11 and production composition at WP13." + }, + { + "owner": "DesktopPlatform", + "path": "src/DesktopHelpers/ArcForges.ContentSandbox.Runtime.osx-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP11", + "reason": "Helper runtime family; restricted fixture parser at WP11 and production composition at WP13." + }, + { + "owner": "DesktopPlatform", + "path": "src/DesktopHelpers/ArcForges.ContentSandbox.Runtime.osx-x64", + "disposition": "Keep", + "present": false, + "producer": "WP11", + "reason": "Helper runtime family; restricted fixture parser at WP11 and production composition at WP13." + }, + { + "owner": "DesktopPlatform", + "path": "src/DesktopHelpers/ArcForges.ContentSandbox.Runtime.win-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP11", + "reason": "Helper runtime family; restricted fixture parser at WP11 and production composition at WP13." + }, + { + "owner": "DesktopPlatform", + "path": "src/DesktopHelpers/ArcForges.ContentSandbox.Runtime.win-x64", + "disposition": "Keep", + "present": false, + "producer": "WP11", + "reason": "Helper runtime family; restricted fixture parser at WP11 and production composition at WP13." + }, + { + "owner": "DesktopPlatform", + "path": "src/Extensions", + "disposition": "Retire", + "present": false, + "producer": "WP01.05", + "reason": "Retired monorepo or excluded MDF path; do not restore as an integration dependency." + }, + { + "owner": "DesktopPlatform", + "path": "src/Mobile", + "disposition": "Retire", + "present": false, + "producer": "WP01.05", + "reason": "Retired monorepo or excluded MDF path; do not restore as an integration dependency." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Abstractions", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Colour", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Colour.Runtime.linux-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Colour.Runtime.linux-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Colour.Runtime.osx-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Colour.Runtime.osx-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Colour.Runtime.win-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Colour.Runtime.win-x64", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Graphics", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Graphics.Runtime.linux-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Graphics.Runtime.linux-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Graphics.Runtime.osx-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Graphics.Runtime.osx-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Graphics.Runtime.win-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Graphics.Runtime.win-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Image", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Image.Runtime.linux-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Image.Runtime.linux-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Image.Runtime.osx-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Image.Runtime.osx-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Image.Runtime.win-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Image.Runtime.win-x64", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Instruments", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Instruments.Runtime.linux-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Instruments.Runtime.linux-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Instruments.Runtime.osx-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Instruments.Runtime.osx-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Instruments.Runtime.win-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Instruments.Runtime.win-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Media", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Media.Runtime.linux-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Media.Runtime.linux-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Media.Runtime.osx-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Media.Runtime.osx-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Media.Runtime.win-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Media.Runtime.win-x64", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Otio", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Otio.Runtime.linux-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Otio.Runtime.linux-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Otio.Runtime.osx-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Otio.Runtime.osx-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Otio.Runtime.win-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Otio.Runtime.win-x64", + "disposition": "Keep", + "present": true, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Pdf", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Pdf.Runtime.linux-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Pdf.Runtime.linux-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Pdf.Runtime.osx-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Pdf.Runtime.osx-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Pdf.Runtime.win-arm64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/Native/ArcForges.Native.Pdf.Runtime.win-x64", + "disposition": "Keep", + "present": false, + "producer": "WP13", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "src/SDK", + "disposition": "Retire", + "present": false, + "producer": "WP01.05", + "reason": "Retired monorepo or excluded MDF path; do not restore as an integration dependency." + }, + { + "owner": "DesktopPlatform", + "path": "src/Web", + "disposition": "Retire", + "present": false, + "producer": "WP01.05", + "reason": "Retired monorepo or excluded MDF path; do not restore as an integration dependency." + }, + { + "owner": "DesktopPlatform", + "path": "tests", + "disposition": "Keep", + "present": true, + "producer": "WP01.04", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "tests/ArchitectureTests", + "disposition": "Keep", + "present": true, + "producer": "WP01.04", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "tests/Consumers", + "disposition": "Keep", + "present": false, + "producer": "WP05", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "tests/Contracts", + "disposition": "Keep", + "present": false, + "producer": "WP05", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "tests/Integration", + "disposition": "Keep", + "present": false, + "producer": "WP05", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "tests/Native", + "disposition": "Keep", + "present": false, + "producer": "WP05", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "tests/NativeAbiTests", + "disposition": "Keep", + "present": true, + "producer": "WP01.04", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "DesktopPlatform", + "path": "tests/Unit", + "disposition": "Keep", + "present": false, + "producer": "WP05", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": ".github/workflows", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "app", + "disposition": "Keep", + "present": true, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "core/contracts", + "disposition": "Keep", + "present": false, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "core/database", + "disposition": "Keep", + "present": false, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "core/designsystem", + "disposition": "Keep", + "present": false, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "core/model", + "disposition": "Keep", + "present": false, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "core/network", + "disposition": "Keep", + "present": false, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "core/security", + "disposition": "Keep", + "present": false, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "core/testing", + "disposition": "Keep", + "present": false, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "eng", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "feature/auth", + "disposition": "Keep", + "present": false, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "feature/chat", + "disposition": "Keep", + "present": false, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "feature/devices", + "disposition": "Keep", + "present": false, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "feature/home", + "disposition": "Keep", + "present": false, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "feature/library", + "disposition": "Keep", + "present": false, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "feature/settings", + "disposition": "Keep", + "present": false, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "feature/tasks", + "disposition": "Keep", + "present": false, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "fixtures", + "disposition": "Keep", + "present": false, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "shared", + "disposition": "Keep", + "present": true, + "producer": "WP30", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Mobile", + "path": "tests", + "disposition": "Keep", + "present": false, + "producer": "WP01.04", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Web", + "path": ".github/workflows", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Web", + "path": "apps", + "disposition": "Keep", + "present": true, + "producer": "WP47", + "reason": "Owned target root for reviewed historical responsibility migration; no blanket source transfer." + }, + { + "owner": "Web", + "path": "apps/account", + "disposition": "Keep", + "present": false, + "producer": "WP48", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Web", + "path": "apps/chat", + "disposition": "Keep", + "present": false, + "producer": "WP49", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Web", + "path": "apps/operations", + "disposition": "Keep", + "present": false, + "producer": "WP45", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Web", + "path": "apps/site", + "disposition": "Keep", + "present": true, + "producer": "WP47", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Web", + "path": "eng", + "disposition": "Keep", + "present": true, + "producer": "WP02", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Web", + "path": "fixtures", + "disposition": "Keep", + "present": false, + "producer": "WP47", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Web", + "path": "packages/auth", + "disposition": "Keep", + "present": false, + "producer": "WP47", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Web", + "path": "packages/client", + "disposition": "Keep", + "present": false, + "producer": "WP47", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Web", + "path": "packages/ui", + "disposition": "Keep", + "present": true, + "producer": "WP47", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + }, + { + "owner": "Web", + "path": "tests", + "disposition": "Keep", + "present": true, + "producer": "WP01.04", + "reason": "Required owned directory; implement substantive behavior only in its scheduled producer." + } +] diff --git a/eng/policy/reconciliation/historical.json b/eng/policy/reconciliation/historical.json new file mode 100644 index 0000000..94fc279 --- /dev/null +++ b/eng/policy/reconciliation/historical.json @@ -0,0 +1,1662 @@ +[ + { + "path": "src/ArcChat/ArcChat.Application/ArcChat.Application.csproj", + "blob": "f29b857ec98b871c28b64fbd061a0c370d0ca093", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "src/Assistant", + "disposition": "Move", + "producer": "WP14", + "reason": "Standalone application and hub are retired; embedded assistant features are produced by WP14-17." + }, + { + "path": "src/ArcChat/ArcChat.CloudClient/ArcChat.CloudClient.csproj", + "blob": "f9c332f3208d952cfabc605fab268f549c5a27b7", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "src/Communication", + "disposition": "Move", + "producer": "WP06", + "reason": "Standalone application and hub are retired; embedded assistant features are produced by WP14-17." + }, + { + "path": "src/ArcChat/ArcChat.Desktop/ArcChat.Desktop.csproj", + "blob": "d9e6dd9777aa83dd85560a7e7421066692f73163", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "src/Assistant", + "disposition": "Retire", + "producer": "WP14", + "reason": "Standalone application and hub are retired; embedded assistant features are produced by WP14-17." + }, + { + "path": "src/ArcChat/ArcChat.Domain/ArcChat.Domain.csproj", + "blob": "c28f2d2ab802ca320c2481694ebaac79f1eed9f7", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "src/Assistant", + "disposition": "Move", + "producer": "WP14", + "reason": "Standalone application and hub are retired; embedded assistant features are produced by WP14-17." + }, + { + "path": "src/ArcChat/ArcChat.Infrastructure/ArcChat.Infrastructure.csproj", + "blob": "bb7c9b730d794a169380933ff465d00e4d792edd", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "src/Assistant", + "disposition": "Move", + "producer": "WP14", + "reason": "Standalone application and hub are retired; embedded assistant features are produced by WP14-17." + }, + { + "path": "src/ArcChat/ArcChat.LocalHub/ArcChat.LocalHub.csproj", + "blob": "4bebec10b461450d981dcdd3db7bc131717c22f0", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "src/Assistant", + "disposition": "Retire", + "producer": "WP14", + "reason": "Standalone application and hub are retired; embedded assistant features are produced by WP14-17." + }, + { + "path": "src/ArcChat/ArcChat.LocalRpc/ArcChat.LocalRpc.csproj", + "blob": "b21c7f438a5536677ae9fab6e3be392a66ab2807", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "src/Assistant", + "disposition": "Move", + "producer": "WP14", + "reason": "Standalone application and hub are retired; embedded assistant features are produced by WP14-17." + }, + { + "path": "src/ArcChat/ArcChat.LocalTools/ArcChat.LocalTools.csproj", + "blob": "d8fc2ba7c46dd08ca7366ce4f6b779f93f6058f5", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "src/Assistant", + "disposition": "Move", + "producer": "WP14", + "reason": "Standalone application and hub are retired; embedded assistant features are produced by WP14-17." + }, + { + "path": "src/ArcChat/ArcChat.McpClient/ArcChat.McpClient.csproj", + "blob": "cc2142d9d37ee4937359e4b0e25cc3abd2506710", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "src/Assistant", + "disposition": "Move", + "producer": "WP14", + "reason": "Standalone application and hub are retired; embedded assistant features are produced by WP14-17." + }, + { + "path": "src/ArcChat/ArcChat.Presentation/ArcChat.Presentation.csproj", + "blob": "4cda5f842fdba4d9586ceded34b6187a7f0e96c5", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "src/Assistant", + "disposition": "Move", + "producer": "WP14", + "reason": "Standalone application and hub are retired; embedded assistant features are produced by WP14-17." + }, + { + "path": "src/ArcChat/ArcChat.Tests.Integration/ArcChat.Tests.Integration.csproj", + "blob": "d555b29bedb868bf29f3e65d70457fd8135a2362", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired standalone assistant test scaffold; reusable assistant suites belong to DesktopPlatform and are mapped in WP01.04." + }, + { + "path": "src/ArcChat/ArcChat.Tests.Ui/ArcChat.Tests.Ui.csproj", + "blob": "dba791b7e1779ea6b6ea71a33142a65c20cb9094", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired standalone assistant test scaffold; reusable assistant suites belong to DesktopPlatform and are mapped in WP01.04." + }, + { + "path": "src/ArcChat/ArcChat.Tests.Unit/ArcChat.Tests.Unit.csproj", + "blob": "b980b55caf66b022c12717da4ec2cb8c6163389b", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired standalone assistant test scaffold; reusable assistant suites belong to DesktopPlatform and are mapped in WP01.04." + }, + { + "path": "src/ArcNotes/ArcNotes.Application/ArcNotes.Application.csproj", + "blob": "1594374d0c4eea76e23c1be68437b0282c423db0", + "observedInDesktopPlatform": "absent", + "owner": "ArcNotes", + "target": "src", + "disposition": "Move", + "producer": "WP18", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcNotes/ArcNotes.CloudClient/ArcNotes.CloudClient.csproj", + "blob": "84415069f3e9b47592fa0b057d30f84523575c1a", + "observedInDesktopPlatform": "absent", + "owner": "ArcNotes", + "target": "src", + "disposition": "Move", + "producer": "WP18", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcNotes/ArcNotes.Database/ArcNotes.Database.csproj", + "blob": "a810242bfc4151d62d15f817377a4bc366e5ab49", + "observedInDesktopPlatform": "absent", + "owner": "ArcNotes", + "target": "src", + "disposition": "Move", + "producer": "WP18", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcNotes/ArcNotes.Desktop/ArcNotes.Desktop.csproj", + "blob": "0bea2813555d49635180cfba57a5fed4fab14a0f", + "observedInDesktopPlatform": "absent", + "owner": "ArcNotes", + "target": "src", + "disposition": "Move", + "producer": "WP18", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcNotes/ArcNotes.Domain/ArcNotes.Domain.csproj", + "blob": "9fafc6f9baf279767c1c75fb5bdfed054da39afc", + "observedInDesktopPlatform": "absent", + "owner": "ArcNotes", + "target": "src", + "disposition": "Move", + "producer": "WP18", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcNotes/ArcNotes.Edgeless/ArcNotes.Edgeless.csproj", + "blob": "07d97decf40748f582d719184652895cb3271017", + "observedInDesktopPlatform": "absent", + "owner": "ArcNotes", + "target": "src", + "disposition": "Retire", + "producer": "WP01.05", + "reason": "Explicitly excluded Notes feature; no future project or implementation hook." + }, + { + "path": "src/ArcNotes/ArcNotes.Editor/ArcNotes.Editor.csproj", + "blob": "3f3086fe707b81e0842f8c441959abc970e44705", + "observedInDesktopPlatform": "absent", + "owner": "ArcNotes", + "target": "src", + "disposition": "Move", + "producer": "WP18", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcNotes/ArcNotes.ImportExport/ArcNotes.ImportExport.csproj", + "blob": "f3804f9e3263a57a2e59bc6be82d2dfe62199157", + "observedInDesktopPlatform": "absent", + "owner": "ArcNotes", + "target": "src", + "disposition": "Move", + "producer": "WP18", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcNotes/ArcNotes.Infrastructure/ArcNotes.Infrastructure.csproj", + "blob": "27e2dea148a234bd4cbdeff5cb95bd44e909d5f3", + "observedInDesktopPlatform": "absent", + "owner": "ArcNotes", + "target": "src", + "disposition": "Move", + "producer": "WP18", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcNotes/ArcNotes.LocalRpc/ArcNotes.LocalRpc.csproj", + "blob": "ac4c86db7bfd8e6a17bdf2295cbb281ea0a59036", + "observedInDesktopPlatform": "absent", + "owner": "ArcNotes", + "target": "src", + "disposition": "Move", + "producer": "WP18", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcNotes/ArcNotes.Presentation/ArcNotes.Presentation.csproj", + "blob": "28f701a9407be2a4cb9e170298f671fa084e1b7b", + "observedInDesktopPlatform": "absent", + "owner": "ArcNotes", + "target": "src", + "disposition": "Move", + "producer": "WP18", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcNotes/ArcNotes.Search/ArcNotes.Search.csproj", + "blob": "4eee68f5e7fc0ca425b0b8a564c3192a13c5d57c", + "observedInDesktopPlatform": "absent", + "owner": "ArcNotes", + "target": "src", + "disposition": "Move", + "producer": "WP18", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcNotes/ArcNotes.Slides/ArcNotes.Slides.csproj", + "blob": "4a7a94c67478f8840344821caddc67d6f96f478f", + "observedInDesktopPlatform": "absent", + "owner": "ArcNotes", + "target": "src", + "disposition": "Retire", + "producer": "WP01.05", + "reason": "Explicitly excluded Notes feature; no future project or implementation hook." + }, + { + "path": "src/ArcNotes/ArcNotes.Tests.Integration/ArcNotes.Tests.Integration.csproj", + "blob": "da11be8f55a6db0ab50ebd55f285c25a297801da", + "observedInDesktopPlatform": "absent", + "owner": "ArcNotes", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcNotes/ArcNotes.Tests.Ui/ArcNotes.Tests.Ui.csproj", + "blob": "3007100064fd962f3c818f5d44f735d76e8bd1aa", + "observedInDesktopPlatform": "absent", + "owner": "ArcNotes", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcNotes/ArcNotes.Tests.Unit/ArcNotes.Tests.Unit.csproj", + "blob": "a7c95fa97f8ebf9c34f21d7f28f2092462a4759c", + "observedInDesktopPlatform": "absent", + "owner": "ArcNotes", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcScope/ArcScope.Acquisition/ArcScope.Acquisition.csproj", + "blob": "c2f3dc6d83deac39e8ed79d964541837b8812feb", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "src", + "disposition": "Move", + "producer": "WP33", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcScope/ArcScope.Analysis/ArcScope.Analysis.csproj", + "blob": "63f1a628eb26728412be3edb80483918dea8c630", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "src", + "disposition": "Move", + "producer": "WP33", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcScope/ArcScope.Application/ArcScope.Application.csproj", + "blob": "5efc54de7c2d464fd84b0c6f9e45c75a23243269", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "src", + "disposition": "Move", + "producer": "WP33", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcScope/ArcScope.CloudClient/ArcScope.CloudClient.csproj", + "blob": "d6892f350fe562a6c831207039a66ba132ef11b6", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "src", + "disposition": "Move", + "producer": "WP33", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcScope/ArcScope.Decoders/ArcScope.Decoders.csproj", + "blob": "cdc8b5ef6f62c0ae9c07027cd8a3242061988d4b", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "src", + "disposition": "Move", + "producer": "WP33", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcScope/ArcScope.Desktop/ArcScope.Desktop.csproj", + "blob": "b1dc359caeaba0093bb8d3af8d720c651076db13", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "src", + "disposition": "Move", + "producer": "WP33", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcScope/ArcScope.Domain/ArcScope.Domain.csproj", + "blob": "5f7b2495320b432a8ffd154294672a5017ea718f", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "src", + "disposition": "Move", + "producer": "WP33", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcScope/ArcScope.Infrastructure/ArcScope.Infrastructure.csproj", + "blob": "0731553bf40699ec3a048d9baae1fcd5f7758a90", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "src", + "disposition": "Move", + "producer": "WP33", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcScope/ArcScope.LocalRpc/ArcScope.LocalRpc.csproj", + "blob": "224113d3c033a1decf50ef7aabb455b10494da7f", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "src", + "disposition": "Move", + "producer": "WP33", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcScope/ArcScope.Native/ArcScope.Native.csproj", + "blob": "f26d2fb9a1f72b71c15d6561a9a90a71a839aac4", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "src/Native", + "disposition": "Move", + "producer": "WP01.03", + "reason": "Shared native mechanism wrappers belong to DesktopPlatform; product semantics stay in their product owner." + }, + { + "path": "src/ArcScope/ArcScope.Presentation/ArcScope.Presentation.csproj", + "blob": "ff9cf7fa608b4123bf537847b5f480b6d304f3ce", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "src", + "disposition": "Move", + "producer": "WP33", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcScope/ArcScope.Recording/ArcScope.Recording.csproj", + "blob": "6ba272867433e9791166ad571661a043892ee992", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "src", + "disposition": "Move", + "producer": "WP33", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcScope/ArcScope.Reporting/ArcScope.Reporting.csproj", + "blob": "af9e32cfa1c64c859ac85bba89972993e68d2384", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "src", + "disposition": "Move", + "producer": "WP33", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcScope/ArcScope.Tests.Integration/ArcScope.Tests.Integration.csproj", + "blob": "e2573282dad22f89ddc4a1e410d62f6442aa784e", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcScope/ArcScope.Tests.Ui/ArcScope.Tests.Ui.csproj", + "blob": "2aa2d8aa512ec88978f566d08e71a6689fbf2e7a", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcScope/ArcScope.Tests.Unit/ArcScope.Tests.Unit.csproj", + "blob": "53f5aa9f437b7884a31cf31e925e6fe0a2cab718", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcScope/ArcScope.Visualization/ArcScope.Visualization.csproj", + "blob": "93af698c9ede2d252a72c710e4996e2f4f17ce97", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "src", + "disposition": "Move", + "producer": "WP33", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.Application/ArcSlate.Application.csproj", + "blob": "9d73f3f19739e5828e9b6782d8fc1311754017bf", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "src", + "disposition": "Move", + "producer": "WP36", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.Audio/ArcSlate.Audio.csproj", + "blob": "0fadcb203665976df818726972d87e6ac1f74c98", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "src", + "disposition": "Move", + "producer": "WP36", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.CloudClient/ArcSlate.CloudClient.csproj", + "blob": "0e3d72ec2cebeb28989f6e7e7ead47c69d348a0e", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "src", + "disposition": "Move", + "producer": "WP36", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.Color/ArcSlate.Color.csproj", + "blob": "d1722a38b88d9a6d01d143d53fea53a8d8e94baa", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "src", + "disposition": "Move", + "producer": "WP36", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.Desktop/ArcSlate.Desktop.csproj", + "blob": "8e3a57876eb0b68af90b59d92aad834ea09c6028", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "src", + "disposition": "Move", + "producer": "WP36", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.Domain/ArcSlate.Domain.csproj", + "blob": "5444fd9e99baa6b009d95a9c74cfc4820615387a", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "src", + "disposition": "Move", + "producer": "WP36", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.ImportExport/ArcSlate.ImportExport.csproj", + "blob": "dc0a95fe907192a51134ab745750efcb117882b0", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "src", + "disposition": "Move", + "producer": "WP36", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.Infrastructure/ArcSlate.Infrastructure.csproj", + "blob": "54c015a104ad1fa895fb132169db86b263d561bc", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "src", + "disposition": "Move", + "producer": "WP36", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.LocalRpc/ArcSlate.LocalRpc.csproj", + "blob": "6878c197a0e98dc86121aab6bca59c7b2204e962", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "src", + "disposition": "Move", + "producer": "WP36", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.Media/ArcSlate.Media.csproj", + "blob": "3ee4147b6358400a4ff6e5e180b3f2745796639b", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "src", + "disposition": "Move", + "producer": "WP36", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.Native/ArcSlate.Native.csproj", + "blob": "13ac817ab2213c95f434526c12c5a73c0d6a8047", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "src/Native", + "disposition": "Move", + "producer": "WP01.03", + "reason": "Shared native mechanism wrappers belong to DesktopPlatform; product semantics stay in their product owner." + }, + { + "path": "src/ArcSlate/ArcSlate.Playback/ArcSlate.Playback.csproj", + "blob": "528cda26be2dfc481f57a9a814aea5193566498c", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "src", + "disposition": "Move", + "producer": "WP36", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.Presentation/ArcSlate.Presentation.csproj", + "blob": "146813e76b1b1ad7050909a2c420a5e55b63280e", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "src", + "disposition": "Move", + "producer": "WP36", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.Processing/ArcSlate.Processing.csproj", + "blob": "ff7079c218b4566875f827447d77777f9b3062ed", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "src", + "disposition": "Move", + "producer": "WP36", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.Rendering/ArcSlate.Rendering.csproj", + "blob": "2ea566c1727d4a441ce6fc5d084da84ce8d41c3e", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "src", + "disposition": "Move", + "producer": "WP36", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.Subtitles/ArcSlate.Subtitles.csproj", + "blob": "9b46e2cfc69d50966ff8b4db9b1ea3705462bc09", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "src", + "disposition": "Move", + "producer": "WP36", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.Tests.Integration/ArcSlate.Tests.Integration.csproj", + "blob": "6b212839b1e36e269bb3a1aeaefeb8700dcbb5b3", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.Tests.Ui/ArcSlate.Tests.Ui.csproj", + "blob": "824aa7dd670498da7dab7f5f7e6464474c8473e6", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.Tests.Unit/ArcSlate.Tests.Unit.csproj", + "blob": "ee418de5ff38f3b7ff6ed193ec06949a6add48a9", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/ArcSlate/ArcSlate.Timeline/ArcSlate.Timeline.csproj", + "blob": "37c5a126eea38aedb105d4146e579f6ac7401b1c", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "src", + "disposition": "Move", + "producer": "WP36", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/BuildingBlocks/ArcForges.Application.Abstractions/ArcForges.Application.Abstractions.csproj", + "blob": "8b0781f20d56c03e1bc82334d4c6f8bdc94b48d8", + "observedInDesktopPlatform": "changed", + "owner": "DesktopPlatform", + "target": "src/BuildingBlocks/ArcForges.Application.Abstractions", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retained mechanism scaffold; content review belongs to WP01.02." + }, + { + "path": "src/BuildingBlocks/ArcForges.Desktop.Experience/ArcForges.Desktop.Experience.csproj", + "blob": "914d408b6045313fcf254dc183effb18b8bd1322", + "observedInDesktopPlatform": "changed", + "owner": "DesktopPlatform", + "target": "src/BuildingBlocks/ArcForges.Desktop.Experience", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retained mechanism scaffold; content review belongs to WP01.02." + }, + { + "path": "src/BuildingBlocks/ArcForges.Desktop.Graphics/ArcForges.Desktop.Graphics.csproj", + "blob": "8f01de18e9ce63f23505e15bfb5bc88b1b0f024f", + "observedInDesktopPlatform": "changed", + "owner": "DesktopPlatform", + "target": "src/BuildingBlocks/ArcForges.Desktop.Graphics", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retained mechanism scaffold; content review belongs to WP01.02." + }, + { + "path": "src/BuildingBlocks/ArcForges.Desktop.Preview/ArcForges.Desktop.Preview.csproj", + "blob": "74a6364c6955696b2369059e935923800869dd7e", + "observedInDesktopPlatform": "changed", + "owner": "DesktopPlatform", + "target": "src/BuildingBlocks/ArcForges.Desktop.Preview", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retained mechanism scaffold; content review belongs to WP01.02." + }, + { + "path": "src/BuildingBlocks/ArcForges.Desktop.RichContent/ArcForges.Desktop.RichContent.csproj", + "blob": "213210d9d66ae855cbae9c945e586f04574b5bbc", + "observedInDesktopPlatform": "changed", + "owner": "DesktopPlatform", + "target": "src/BuildingBlocks/ArcForges.Desktop.RichContent", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retained mechanism scaffold; content review belongs to WP01.02." + }, + { + "path": "src/BuildingBlocks/ArcForges.Desktop.Text/ArcForges.Desktop.Text.csproj", + "blob": "0c462381d0c3ad2939039804512e869c769316d4", + "observedInDesktopPlatform": "changed", + "owner": "DesktopPlatform", + "target": "src/BuildingBlocks/ArcForges.Desktop.Text", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retained mechanism scaffold; content review belongs to WP01.02." + }, + { + "path": "src/BuildingBlocks/ArcForges.Foundation/ArcForges.Foundation.csproj", + "blob": "77f3358a521d80fe2e438aa1befae057375af2f9", + "observedInDesktopPlatform": "changed", + "owner": "DesktopPlatform", + "target": "src/BuildingBlocks/ArcForges.Foundation", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retained mechanism scaffold; content review belongs to WP01.02." + }, + { + "path": "src/BuildingBlocks/ArcForges.NativeInterop/ArcForges.NativeInterop.csproj", + "blob": "852d2d837499236acbad6bc0e064224ded7b6f12", + "observedInDesktopPlatform": "changed", + "owner": "DesktopPlatform", + "target": "src/BuildingBlocks/ArcForges.NativeInterop", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retained mechanism scaffold; content review belongs to WP01.02." + }, + { + "path": "src/BuildingBlocks/ArcForges.Observability/ArcForges.Observability.csproj", + "blob": "7df665343f7430b491799cd85ba925ab083b773c", + "observedInDesktopPlatform": "changed", + "owner": "DesktopPlatform", + "target": "src/BuildingBlocks/ArcForges.Observability", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retained mechanism scaffold; content review belongs to WP01.02." + }, + { + "path": "src/BuildingBlocks/ArcForges.Persistence.Postgres/ArcForges.Persistence.Postgres.csproj", + "blob": "e233980799890ace4d234aab5476721a08cdaf23", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "src/BuildingBlocks/ArcForges.Persistence.Postgres", + "disposition": "Retire", + "producer": "WP01.02", + "reason": "Obsolete shared scaffold is absent; current platform mechanisms and provider-owned storage replace it." + }, + { + "path": "src/BuildingBlocks/ArcForges.Persistence.Sqlite/ArcForges.Persistence.Sqlite.csproj", + "blob": "5fd701fe816a1d0309c481cb441e813465f24108", + "observedInDesktopPlatform": "changed", + "owner": "DesktopPlatform", + "target": "src/BuildingBlocks/ArcForges.Persistence.Sqlite", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retained mechanism scaffold; content review belongs to WP01.02." + }, + { + "path": "src/BuildingBlocks/ArcForges.Security/ArcForges.Security.csproj", + "blob": "6c91ab473e95229a27bf13e8dadedda7ec77cab0", + "observedInDesktopPlatform": "changed", + "owner": "DesktopPlatform", + "target": "src/BuildingBlocks/ArcForges.Security", + "disposition": "Keep", + "producer": "WP01.02", + "reason": "Retained mechanism scaffold; content review belongs to WP01.02." + }, + { + "path": "src/BuildingBlocks/ArcForges.Testing/ArcForges.Testing.csproj", + "blob": "e55252ac1416e7b8d11c49e4bb5d9e95356d12e1", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "src/BuildingBlocks/ArcForges.Testing", + "disposition": "Retire", + "producer": "WP01.02", + "reason": "Obsolete shared scaffold is absent; current platform mechanisms and provider-owned storage replace it." + }, + { + "path": "src/Cloud/ArcForges.Cloud.AgentRuntime/ArcForges.Cloud.AgentRuntime.csproj", + "blob": "1c6873ae684a91e517146509f8e099a2ebd8019a", + "observedInDesktopPlatform": "absent", + "owner": "AI", + "target": "src/workflows", + "disposition": "Move", + "producer": "WP52", + "reason": "Sole Harness lives in AI Workflow; old in-host loop is retired." + }, + { + "path": "src/Cloud/ArcForges.Cloud.AppHost/ArcForges.Cloud.AppHost.csproj", + "blob": "eeea33a4724bde96d3177fbf012f97435cbd3139", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "deploy", + "disposition": "Retire", + "producer": "WP21", + "reason": "Retired development/Aspire service defaults do not define the Cloudflare production host." + }, + { + "path": "src/Cloud/ArcForges.Cloud.BackgroundJobs/ArcForges.Cloud.BackgroundJobs.csproj", + "blob": "f20d134686a261addf169f994062f16743ea091a", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "worker", + "disposition": "Move", + "producer": "WP24", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Host/ArcForges.Cloud.Host.csproj", + "blob": "8415fbda0fef23bda95deadd8153a903adfdb3cd", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Cloud.Host", + "disposition": "Move", + "producer": "WP21", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Infrastructure/ArcForges.Cloud.Infrastructure.csproj", + "blob": "9ec7dc8b4967f98e8f90eaeadcb081a18c5ad84f", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Cloud.Storage.D1", + "disposition": "Move", + "producer": "WP21", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Migrations/ArcForges.Cloud.Migrations.csproj", + "blob": "508fcc68b196307eabd132bb57f7bb45c571b8e2", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Cloud.Storage.D1", + "disposition": "Move", + "producer": "WP21", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.AI/ArcForges.Cloud.Modules.AI.csproj", + "blob": "edc4601174f690e2a66a6d3f1ac2e5f9dbae3d48", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/Agent", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.Agent/ArcForges.Cloud.Modules.Agent.csproj", + "blob": "35241321672203958e1097cca1240b45e6ab0783", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/Agent", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.Billing/ArcForges.Cloud.Modules.Billing.csproj", + "blob": "38f9f039e95748dbd6928efbc53dc627718e8a4c", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/Commerce", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.Catalog/ArcForges.Cloud.Modules.Catalog.csproj", + "blob": "86ca3913a7117ab87f940081f63cee906a1faeb2", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/PackageCatalog", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.Chat/ArcForges.Cloud.Modules.Chat.csproj", + "blob": "222118ebb2eaf1dae24e51c021a3ad34969f12a2", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/Chat", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.Configuration/ArcForges.Cloud.Modules.Configuration.csproj", + "blob": "75d138b01da252396a23ea4144d08bf215e56358", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/Configuration", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.Entitlement/ArcForges.Cloud.Modules.Entitlement.csproj", + "blob": "29b6eddc9d0745e318a3cdf0a54f9dee6965e65a", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/Entitlement", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.Identity/ArcForges.Cloud.Modules.Identity.csproj", + "blob": "1fda0c2d2d3907b944a1c82cdcde35d132853ff8", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/Identity", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.Notes/ArcForges.Cloud.Modules.Notes.csproj", + "blob": "aa5732b6135255d692e8e695fdf078eba8f8ab13", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/Notes", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.Notification/ArcForges.Cloud.Modules.Notification.csproj", + "blob": "5a4adb6d7bd18f482ec94c8208e5fbd3bfea8369", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/Notification", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.Operations/ArcForges.Cloud.Modules.Operations.csproj", + "blob": "884b3cb978fcc683c3d7d8d9d71df06a6fb2aca6", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/Audit", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.Policy/ArcForges.Cloud.Modules.Policy.csproj", + "blob": "187ef1f4ed95d5914df72d44c5864ed9160b0221", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/Policy", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.Resource/ArcForges.Cloud.Modules.Resource.csproj", + "blob": "8c956cff633c1c9b03b043286648fe894fb20299", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/Resource", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.Scope/ArcForges.Cloud.Modules.Scope.csproj", + "blob": "1353e5d37e83e7bda8ed8e46875c0519995cbd1c", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/Scope", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.Search/ArcForges.Cloud.Modules.Search.csproj", + "blob": "7f171e80c36937bb973b09c09fdfac70a6a16172", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/Search", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.Slate/ArcForges.Cloud.Modules.Slate.csproj", + "blob": "16b8e36194fde6bf7889647ac36aa82edb0faff1", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/Slate", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Modules.Sync/ArcForges.Cloud.Modules.Sync.csproj", + "blob": "20dd2ad440e3b82f2c72b1038d8bdddb7814329b", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/Sync", + "disposition": "Move", + "producer": "WP21", + "reason": "Historical module scaffold maps to current Cloud domain owner; responsibility splits follow the 21-owner schema map at WP21." + }, + { + "path": "src/Cloud/ArcForges.Cloud.PublicApi/ArcForges.Cloud.PublicApi.csproj", + "blob": "2e809169b20851423013a278785da7c9cbc6ae14", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Cloud.Host", + "disposition": "Move", + "producer": "WP21", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Realtime/ArcForges.Cloud.Realtime.csproj", + "blob": "d75c18726a1b08faad6e62bf3d5b8341a94ecdb2", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "worker", + "disposition": "Move", + "producer": "WP24", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/Cloud/ArcForges.Cloud.Tests/ArcForges.Cloud.Tests.csproj", + "blob": "3f01c538ee1089a62888e1d4f979fcf185140e11", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Old scaffold no longer present; retain accepted responsibilities in independently built owner without copying the retired project." + }, + { + "path": "src/Cloud/ArcForges.ServiceDefaults/ArcForges.ServiceDefaults.csproj", + "blob": "c6d57064c2fbf346cbe9393fd1d96c53a8a6695d", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "deploy", + "disposition": "Retire", + "producer": "WP21", + "reason": "Retired development/Aspire service defaults do not define the Cloudflare production host." + }, + { + "path": "src/Contracts/ArcForges.Contracts.Agent/ArcForges.Contracts.Agent.csproj", + "blob": "db2c0f7ed66fee2f03113a76e156ba27be5acdd8", + "observedInDesktopPlatform": "absent", + "owner": "Contracts", + "target": "internal/proto", + "disposition": "Move", + "producer": "WP01.01", + "reason": "Authored proto and generated clients replace old authored DTO project; individual type visibility is assigned in WP01.01 and generated in WP03." + }, + { + "path": "src/Contracts/ArcForges.Contracts.Foundation/ArcForges.Contracts.Foundation.csproj", + "blob": "8f146b6db22a275345b2e91fc90a498f88afaa3b", + "observedInDesktopPlatform": "absent", + "owner": "Contracts", + "target": "public/proto", + "disposition": "Move", + "producer": "WP01.01", + "reason": "Authored proto and generated clients replace old authored DTO project; individual type visibility is assigned in WP01.01 and generated in WP03." + }, + { + "path": "src/Contracts/ArcForges.Contracts.LocalRpc/ArcForges.Contracts.LocalRpc.csproj", + "blob": "d7a036e1e0532c0d2cc7d2e6ed9f360cf580cb03", + "observedInDesktopPlatform": "absent", + "owner": "Contracts", + "target": "internal/proto", + "disposition": "Move", + "producer": "WP01.01", + "reason": "Authored proto and generated clients replace old authored DTO project; individual type visibility is assigned in WP01.01 and generated in WP03." + }, + { + "path": "src/Contracts/ArcForges.Contracts.PublicApi/ArcForges.Contracts.PublicApi.csproj", + "blob": "e9290580066877e4a7145d79d411c82ba182f75b", + "observedInDesktopPlatform": "absent", + "owner": "Contracts", + "target": "public/proto", + "disposition": "Move", + "producer": "WP01.01", + "reason": "Authored proto and generated clients replace old authored DTO project; individual type visibility is assigned in WP01.01 and generated in WP03." + }, + { + "path": "src/Contracts/ArcForges.Contracts.Realtime/ArcForges.Contracts.Realtime.csproj", + "blob": "ec0e16e42e8e1eede16a75f8d58d4d6a2c4a93fa", + "observedInDesktopPlatform": "absent", + "owner": "Contracts", + "target": "public/proto", + "disposition": "Move", + "producer": "WP01.01", + "reason": "Authored proto and generated clients replace old authored DTO project; individual type visibility is assigned in WP01.01 and generated in WP03." + }, + { + "path": "src/Contracts/ArcForges.Contracts.Serialization/ArcForges.Contracts.Serialization.csproj", + "blob": "5c9a8a562ef3829bcae44792feb03fb0bdba943d", + "observedInDesktopPlatform": "absent", + "owner": "Contracts", + "target": "internal/proto", + "disposition": "Move", + "producer": "WP01.01", + "reason": "Authored proto and generated clients replace old authored DTO project; individual type visibility is assigned in WP01.01 and generated in WP03." + }, + { + "path": "src/Contracts/ArcForges.Contracts.Sync/ArcForges.Contracts.Sync.csproj", + "blob": "33117bde996b0cec91e6b7859d1ff7151bac6c8d", + "observedInDesktopPlatform": "absent", + "owner": "Contracts", + "target": "public/proto", + "disposition": "Move", + "producer": "WP01.01", + "reason": "Authored proto and generated clients replace old authored DTO project; individual type visibility is assigned in WP01.01 and generated in WP03." + }, + { + "path": "src/DesktopHelpers/ArcForges.ContentSandbox/ArcForges.ContentSandbox.csproj", + "blob": "fd44b01605cd1382e6565b47e352756033ba7068", + "observedInDesktopPlatform": "changed", + "owner": "DesktopPlatform", + "target": "src/DesktopHelpers/ArcForges.ContentSandbox", + "disposition": "Keep", + "producer": "WP11", + "reason": "Retain ContentSandbox host scaffold; restricted parser implementation and signed runtime remain WP11/13." + }, + { + "path": "src/Extensions/ArcForges.Extensions.Contracts/ArcForges.Extensions.Contracts.csproj", + "blob": "97775d9cdbe7267f4d66d72d2f0ae6b27e5d2f9c", + "observedInDesktopPlatform": "absent", + "owner": "Contracts", + "target": "public/proto", + "disposition": "Move", + "producer": "WP03", + "reason": "Shared extension execution belongs to platform sandbox mechanisms; business catalog remains Cloud." + }, + { + "path": "src/Extensions/ArcForges.Extensions.Packaging/ArcForges.Extensions.Packaging.csproj", + "blob": "4a4270edb4535c2da423b9cddac753cee3bea942", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "src/DesktopHelpers", + "disposition": "Move", + "producer": "WP41", + "reason": "Shared extension execution belongs to platform sandbox mechanisms; business catalog remains Cloud." + }, + { + "path": "src/Extensions/ArcForges.Extensions.Registry/ArcForges.Extensions.Registry.csproj", + "blob": "db9e896dca6fe5afecb5a5f3a3d31e4f2a62311b", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "src/Modules/PackageCatalog", + "disposition": "Move", + "producer": "WP41", + "reason": "Authoritative catalog is Cloud PackageCatalog, not a shared desktop registry." + }, + { + "path": "src/Extensions/ArcForges.Extensions.Runtime/ArcForges.Extensions.Runtime.csproj", + "blob": "ecc31c20fee8e12757ff7d237cbd380545b4d0ea", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "src/DesktopHelpers", + "disposition": "Move", + "producer": "WP41", + "reason": "Shared extension execution belongs to platform sandbox mechanisms; business catalog remains Cloud." + }, + { + "path": "src/Mobile/ArcChat.Mobile.Application/ArcChat.Mobile.Application.csproj", + "blob": "403d5afb9c5e94a62318746c2e8033ac6769f79d", + "observedInDesktopPlatform": "absent", + "owner": "Mobile", + "target": "app", + "disposition": "Move", + "producer": "WP30", + "reason": "Kotlin/Compose replaces historical .NET scaffolds; preserve current signed prerelease identity until WP30 migration." + }, + { + "path": "src/Mobile/ArcChat.Mobile.CloudClient/ArcChat.Mobile.CloudClient.csproj", + "blob": "308fa72f8e422d4ea434c8f4b670d14b3456997e", + "observedInDesktopPlatform": "absent", + "owner": "Mobile", + "target": "app", + "disposition": "Move", + "producer": "WP30", + "reason": "Kotlin/Compose replaces historical .NET scaffolds; preserve current signed prerelease identity until WP30 migration." + }, + { + "path": "src/Mobile/ArcChat.Mobile.ContractTests/ArcChat.Mobile.ContractTests.csproj", + "blob": "7918bebe776f1e85b428098ad190ad3f750a47a9", + "observedInDesktopPlatform": "absent", + "owner": "Mobile", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Historical .NET Mobile tests are replaced by owned Kotlin/Android tests; family mapping belongs to WP01.04." + }, + { + "path": "src/Mobile/ArcChat.Mobile.Contracts/ArcChat.Mobile.Contracts.csproj", + "blob": "7f6ab16d2d1e8ac378e7e8e21c29da421050d617", + "observedInDesktopPlatform": "absent", + "owner": "Contracts", + "target": "public/proto", + "disposition": "Move", + "producer": "WP01.01", + "reason": "Authored public wire definitions belong to Contracts; Android consumes generated Maven artifacts, not copied DTO implementations." + }, + { + "path": "src/Mobile/ArcChat.Mobile.Domain/ArcChat.Mobile.Domain.csproj", + "blob": "0ec8a59a3db94390fb51c2878ccf8dd4683bb617", + "observedInDesktopPlatform": "absent", + "owner": "Mobile", + "target": "app", + "disposition": "Move", + "producer": "WP30", + "reason": "Kotlin/Compose replaces historical .NET scaffolds; preserve current signed prerelease identity until WP30 migration." + }, + { + "path": "src/Mobile/ArcChat.Mobile.Persistence/ArcChat.Mobile.Persistence.csproj", + "blob": "efe5be5af54b4debc4112d25106b23b21e9f2dfa", + "observedInDesktopPlatform": "absent", + "owner": "Mobile", + "target": "app", + "disposition": "Move", + "producer": "WP30", + "reason": "Kotlin/Compose replaces historical .NET scaffolds; preserve current signed prerelease identity until WP30 migration." + }, + { + "path": "src/Mobile/ArcChat.Mobile.Presentation/ArcChat.Mobile.Presentation.csproj", + "blob": "fc290388281227b9bc07892e8b017505999de691", + "observedInDesktopPlatform": "absent", + "owner": "Mobile", + "target": "app", + "disposition": "Move", + "producer": "WP30", + "reason": "Kotlin/Compose replaces historical .NET scaffolds; preserve current signed prerelease identity until WP30 migration." + }, + { + "path": "src/Mobile/ArcChat.Mobile.Realtime/ArcChat.Mobile.Realtime.csproj", + "blob": "fe09671901379068614cbea007ee9f3b5d9d7635", + "observedInDesktopPlatform": "absent", + "owner": "Mobile", + "target": "app", + "disposition": "Move", + "producer": "WP30", + "reason": "Kotlin/Compose replaces historical .NET scaffolds; preserve current signed prerelease identity until WP30 migration." + }, + { + "path": "src/Mobile/ArcChat.Mobile.Tests/ArcChat.Mobile.Tests.csproj", + "blob": "c9f6b736a9b0ee959fa35b73b3d8a211d2235af5", + "observedInDesktopPlatform": "absent", + "owner": "Mobile", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Historical .NET Mobile tests are replaced by owned Kotlin/Android tests; family mapping belongs to WP01.04." + }, + { + "path": "src/Mobile/ArcChat.Mobile.UiTests/ArcChat.Mobile.UiTests.csproj", + "blob": "2f407ed979a9b724a4c5439aef0e120bf64fe1c8", + "observedInDesktopPlatform": "absent", + "owner": "Mobile", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Historical .NET Mobile tests are replaced by owned Kotlin/Android tests; family mapping belongs to WP01.04." + }, + { + "path": "src/Mobile/ArcChat.Mobile/ArcChat.Mobile.csproj", + "blob": "25da18b2d13d503c0c3240bb01d4812dded58af6", + "observedInDesktopPlatform": "absent", + "owner": "Mobile", + "target": "app", + "disposition": "Move", + "producer": "WP30", + "reason": "Kotlin/Compose replaces historical .NET scaffolds; preserve current signed prerelease identity until WP30 migration." + }, + { + "path": "src/SDK/ArcForges.Cli/ArcForges.Cli.csproj", + "blob": "73c2fb818190c2eb92cc755dd90041f7c9464bbb", + "observedInDesktopPlatform": "absent", + "owner": "Contracts", + "target": "src", + "disposition": "Move", + "producer": "WP03", + "reason": "Public SDK/CLI remains owned by Contracts; old authored DTO tooling is not a current build dependency." + }, + { + "path": "src/SDK/ArcForges.SDK.Foundation/ArcForges.SDK.Foundation.csproj", + "blob": "adb5a4b7dd4ee27fc552a9591fb7009ab9ccd364", + "observedInDesktopPlatform": "absent", + "owner": "Contracts", + "target": "src", + "disposition": "Move", + "producer": "WP03", + "reason": "Public SDK/CLI remains owned by Contracts; old authored DTO tooling is not a current build dependency." + }, + { + "path": "src/SDK/ArcForges.SDK.SourceGenerators/ArcForges.SDK.SourceGenerators.csproj", + "blob": "b0c041286a2116871ff31536c8128d25f4bcccb3", + "observedInDesktopPlatform": "absent", + "owner": "Contracts", + "target": "src", + "disposition": "Move", + "producer": "WP03", + "reason": "Public SDK/CLI remains owned by Contracts; old authored DTO tooling is not a current build dependency." + }, + { + "path": "src/SDK/ArcForges.SDK.Testing/ArcForges.SDK.Testing.csproj", + "blob": "16c1dfa9f97b576e5c595ac4cf1a96d857fc4ad6", + "observedInDesktopPlatform": "absent", + "owner": "Contracts", + "target": "src", + "disposition": "Move", + "producer": "WP03", + "reason": "Public SDK/CLI remains owned by Contracts; old authored DTO tooling is not a current build dependency." + }, + { + "path": "src/Web/ArcForges.Web.App/ArcForges.Web.App.csproj", + "blob": "9e8fa82d34c9ffd3899544b4fc8901d23461882e", + "observedInDesktopPlatform": "absent", + "owner": "Web", + "target": "apps", + "disposition": "Move", + "producer": "WP47", + "reason": "React/TypeScript replaces historical .NET browser and site generation scaffolds." + }, + { + "path": "src/Web/ArcForges.Web.Application/ArcForges.Web.Application.csproj", + "blob": "cc3b571764c41c481a96ef8e7781ee093ddffef4", + "observedInDesktopPlatform": "absent", + "owner": "Web", + "target": "apps", + "disposition": "Move", + "producer": "WP47", + "reason": "React/TypeScript replaces historical .NET browser and site generation scaffolds." + }, + { + "path": "src/Web/ArcForges.Web.Components/ArcForges.Web.Components.csproj", + "blob": "38ff35a3f980dd98a013f8ec79de97109de8b9ed", + "observedInDesktopPlatform": "absent", + "owner": "Web", + "target": "apps", + "disposition": "Move", + "producer": "WP47", + "reason": "React/TypeScript replaces historical .NET browser and site generation scaffolds." + }, + { + "path": "src/Web/ArcForges.Web.Infrastructure/ArcForges.Web.Infrastructure.csproj", + "blob": "c9fc90e1760290dd7b8da52f4c0bd8337b9be4c3", + "observedInDesktopPlatform": "absent", + "owner": "Web", + "target": "apps", + "disposition": "Move", + "producer": "WP47", + "reason": "React/TypeScript replaces historical .NET browser and site generation scaffolds." + }, + { + "path": "src/Web/ArcForges.Web.SiteGenerator/ArcForges.Web.SiteGenerator.csproj", + "blob": "3aa431501b954090bd40a16c5356ff2921397826", + "observedInDesktopPlatform": "absent", + "owner": "Web", + "target": "apps", + "disposition": "Move", + "producer": "WP47", + "reason": "React/TypeScript replaces historical .NET browser and site generation scaffolds." + }, + { + "path": "tests/AndroidUiTests/ArcForges.Tests.AndroidUiTests.csproj", + "blob": "e2cc1d9125b087d3481d2803dc781c3984525aa7", + "observedInDesktopPlatform": "absent", + "owner": "Mobile", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/ArcScopePipelineTests/ArcForges.Tests.ArcScopePipelineTests.csproj", + "blob": "1b54f25696730dc456ee5647f5c3b87da843324d", + "observedInDesktopPlatform": "absent", + "owner": "ArcScope", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/ArcSlateMediaTests/ArcForges.Tests.ArcSlateMediaTests.csproj", + "blob": "d4bf1d9eb0ecb0c08b989562b4645487ed4189d7", + "observedInDesktopPlatform": "absent", + "owner": "ArcSlate", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/ArchitectureTests/ArcForges.Tests.ArchitectureTests.csproj", + "blob": "8de7cdd620e937a69ff6fa2c7389e2a40aaebfc8", + "observedInDesktopPlatform": "changed", + "owner": "DesktopPlatform", + "target": "tests/ArchitectureTests", + "disposition": "Keep", + "producer": "WP01.04", + "reason": "Current shared verification project retained; family completeness reviewed in WP01.04." + }, + { + "path": "tests/CloudIntegrationTests/ArcForges.Tests.CloudIntegrationTests.csproj", + "blob": "60683fb53ad1c5783929d20acbbaf2de0e54e541", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/ContractCompatibilityTests/ArcForges.Tests.ContractCompatibilityTests.csproj", + "blob": "6b309c5ce360bc3ae30401b175312add24179838", + "observedInDesktopPlatform": "absent", + "owner": "Contracts", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/ContractSchemaTests/ArcForges.Tests.ContractSchemaTests.csproj", + "blob": "574f04858632c12b44d23dc72ee81b185ef2c1d7", + "observedInDesktopPlatform": "absent", + "owner": "Contracts", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/DesktopExperienceGallery/ArcForges.Tests.DesktopExperienceGallery.csproj", + "blob": "0e3f1f1be3398bf6448bd0c76f0df34a02be816d", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/DesktopExperienceTests/ArcForges.Tests.DesktopExperienceTests.csproj", + "blob": "0ea35b132f8bc2454849d16c10ef8743ca415d42", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/DesktopUiTests/ArcForges.Tests.DesktopUiTests.csproj", + "blob": "c60de98f394095dd50be43d152ef466f9d6e285a", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/EndToEndTests/ArcForges.Tests.EndToEndTests.csproj", + "blob": "7926e4a418ac58f15bda193c1439bafc63f6b0ea", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Historical shared test orchestration scaffold remains a policy reference; concrete product E2E suites belong to their respective owners under WP01.04." + }, + { + "path": "tests/GraphicsInteropTests/ArcForges.Tests.GraphicsInteropTests.csproj", + "blob": "108b5000f433e7fa81b7e51abc169e7d7fcdecc7", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/LocalRpcAotTests/ArcForges.Tests.LocalRpcAotTests.csproj", + "blob": "d09fa2d5a9c87cc816079ae6630eb4d11d059e0d", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/McpAotTests/ArcForges.Tests.McpAotTests.csproj", + "blob": "df08cd469310ab8611cbff034598b0f1e0f1a2bf", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/MobileContractTests/ArcForges.Tests.MobileContractTests.csproj", + "blob": "73b9ba97be9ba2ed28140666c44ebebb6a02520c", + "observedInDesktopPlatform": "absent", + "owner": "Mobile", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/NativeAbiTests/ArcForges.Tests.NativeAbiTests.csproj", + "blob": "e74c139d7b00e3df37deae1fcca34dd42f9dc3cb", + "observedInDesktopPlatform": "changed", + "owner": "DesktopPlatform", + "target": "tests/NativeAbiTests", + "disposition": "Keep", + "producer": "WP01.04", + "reason": "Current shared verification project retained; family completeness reviewed in WP01.04." + }, + { + "path": "tests/NativeContentTests/ArcForges.Tests.NativeContentTests.csproj", + "blob": "35a018b78c22acff1f4c8f4f7a96f836890e7225", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/PersistenceRecoveryTests/ArcForges.Tests.PersistenceRecoveryTests.csproj", + "blob": "28f40d42cda965dfd33dceddf3218dd8792096e0", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/PublicApiContractTests/ArcForges.Tests.PublicApiContractTests.csproj", + "blob": "d861397fc7b14c200e05b5c0c91214364f732a7e", + "observedInDesktopPlatform": "absent", + "owner": "Contracts", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/RealtimeReconnectTests/ArcForges.Tests.RealtimeReconnectTests.csproj", + "blob": "4c593a4a77e99f8d8db951c124925a4159c3af04", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/ReleaseArtifactTests/ArcForges.Tests.ReleaseArtifactTests.csproj", + "blob": "e56a285b0bca3528f0a8fa8b98ea8c9cc2e99447", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/RemoteToolBridgeTests/ArcForges.Tests.RemoteToolBridgeTests.csproj", + "blob": "e06e774e751a9206458c6664d1c738f26a3840b7", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/SyncConflictTests/ArcForges.Tests.SyncConflictTests.csproj", + "blob": "acc850352c72a7eefe69f1245a131ba36cd77abe", + "observedInDesktopPlatform": "absent", + "owner": "Cloud", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/VirtualizationTests/ArcForges.Tests.VirtualizationTests.csproj", + "blob": "2d6ee918d763e6b1db33c72ae79ca46c6d8392cf", + "observedInDesktopPlatform": "absent", + "owner": "DesktopPlatform", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/Web/ArcForges.Web.BrowserTests/ArcForges.Web.BrowserTests.csproj", + "blob": "0f384de272aea8d2e922c7781bbc1c06edfdf75d", + "observedInDesktopPlatform": "absent", + "owner": "Web", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/Web/ArcForges.Web.ComponentTests/ArcForges.Web.ComponentTests.csproj", + "blob": "f8bd464f7c2f773321f695f57942fb33e2ea7aff", + "observedInDesktopPlatform": "absent", + "owner": "Web", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/Web/ArcForges.Web.ContractTests/ArcForges.Web.ContractTests.csproj", + "blob": "25b59f657f3a228d042a6a47a1cc384fb039fa3f", + "observedInDesktopPlatform": "absent", + "owner": "Web", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + }, + { + "path": "tests/Web/ArcForges.Web.UnitTests/ArcForges.Web.UnitTests.csproj", + "blob": "04b2f9dc4e6db57576dec3f3441d809a592d7af9", + "observedInDesktopPlatform": "absent", + "owner": "Web", + "target": "tests", + "disposition": "Move", + "producer": "WP01.04", + "reason": "Retired monorepo test path; owner-specific replacement retains applicable scenarios, with family coverage assigned in WP01.04." + } +] diff --git a/eng/policy/reconciliation/native.json b/eng/policy/reconciliation/native.json new file mode 100644 index 0000000..defeaef --- /dev/null +++ b/eng/policy/reconciliation/native.json @@ -0,0 +1,58 @@ +[ + { + "path": "native/arcgraphics-metal-abi", + "owner": "DesktopPlatform", + "disposition": "Keep", + "producer": "WP01.03", + "present": true, + "reason": "Retain approved foundation/probes; complete surface and admission proof belong to WP01.03/WP13." + }, + { + "path": "native/arcmedia-ffmpeg-abi", + "owner": "DesktopPlatform", + "disposition": "Keep", + "producer": "WP01.03", + "present": true, + "reason": "Retain approved foundation/probes; complete surface and admission proof belong to WP01.03/WP13." + }, + { + "path": "native/arcscope-mdf-abi", + "owner": "DesktopPlatform", + "disposition": "Retire", + "producer": "WP01.03", + "present": false, + "reason": "MDF excluded from V1." + }, + { + "path": "native/arcslate-color-abi", + "owner": "DesktopPlatform", + "disposition": "Keep", + "producer": "WP01.03", + "present": true, + "reason": "Retain approved foundation/probes; complete surface and admission proof belong to WP01.03/WP13." + }, + { + "path": "native/arcslate-image-abi", + "owner": "DesktopPlatform", + "disposition": "Keep", + "producer": "WP01.03", + "present": true, + "reason": "Retain approved foundation/probes; complete surface and admission proof belong to WP01.03/WP13." + }, + { + "path": "native/arcslate-otio-abi", + "owner": "DesktopPlatform", + "disposition": "Keep", + "producer": "WP01.03", + "present": true, + "reason": "Retain approved foundation/probes; complete surface and admission proof belong to WP01.03/WP13." + }, + { + "path": "native/shared", + "owner": "DesktopPlatform", + "disposition": "Keep", + "producer": "WP01.03", + "present": true, + "reason": "Retain approved foundation/probes; complete surface and admission proof belong to WP01.03/WP13." + } +] diff --git a/eng/policy/reconciliation/source.json b/eng/policy/reconciliation/source.json new file mode 100644 index 0000000..993abca --- /dev/null +++ b/eng/policy/reconciliation/source.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "substep": "WP01.00", + "observedOn": "2026-09-20", + "historicalCommit": "ede43db5b2237104dd0008b99398090c54a2cf94", + "designCommit": "33bcddd9508ec60c0a2b0d7b53901ee7f50d0a70", + "designFiles": { + "docs/assurance/wp01-00-inventory-policy.md": "ab6ed192920a34fb3da8a4b2a46f0717d1037cef7b8c92934917563a92b7f47a", + "docs/assurance/wp00-stage-acceptance.json": "69e06cd1248f61b5da2509184430ffc8c1f96d5c8550dd790f87e432393cc340", + "docs/architecture/27-platform-projects-and-application-assistants.md": "48532d4ecc59d986292075afae4ea4fea52a6106c94833e5e5ce4ae43594c4a5", + "docs/architecture/01-solution-and-project-layout.md": "ff8241d91e460ba35ae55e92b5b55cba0968b1a1fd788f7a5dc2242e52815658" + }, + "counts": { + "owners": 9, + "projects": 75, + "historical": 166, + "directories": 359, + "native": 7 + } +} diff --git a/eng/provenance/files.json b/eng/provenance/files.json index 98480b0..843c673 100644 --- a/eng/provenance/files.json +++ b/eng/provenance/files.json @@ -42,6 +42,7 @@ "docs/native-package-release.md", "docs/platform-bootstrap.md", "docs/provenance.md", + "docs/reconciliation-inventory.md", "docs/reference-baselines.md", "docs/runtime-ownership.md", "eng/build/desktop-aot.props", @@ -64,6 +65,11 @@ "eng/packaging/packages.py", "eng/packaging/test_packages.py", "eng/policy/licence-boundary.json", + "eng/policy/reconciliation/current.json", + "eng/policy/reconciliation/directories.json", + "eng/policy/reconciliation/historical.json", + "eng/policy/reconciliation/native.json", + "eng/policy/reconciliation/source.json", "eng/policy/reference-baselines.json", "eng/policy/reuse-policy.json", "eng/policy/runtime-ownership.json", @@ -189,10 +195,12 @@ "eng/provenance/records/otio-python-optional-patch-r1.json", "eng/provenance/reference-inputs.json", "eng/provenance/template.json", + "eng/reconciliation.py", "eng/reference_baselines.py", "eng/runtime_ownership.py", "eng/test_design_policy.py", "eng/test_licence_boundary.py", + "eng/test_reconciliation.py", "eng/test_reference_baselines.py", "eng/test_runtime_ownership.py", "global.json", diff --git a/eng/reconciliation.py b/eng/reconciliation.py new file mode 100644 index 0000000..9b44b90 --- /dev/null +++ b/eng/reconciliation.py @@ -0,0 +1,187 @@ +# SPDX-License-Identifier: AGPL-3.0-only +"""Read-only WP01.00 current/historical project and directory reconciliation.""" +from __future__ import annotations + +import argparse +from datetime import datetime, timezone +import hashlib +import json +from pathlib import Path +import re +import subprocess +import sys +import tempfile + +import licence_boundary as inventory +import runtime_ownership as runtime + +ROOT = Path(__file__).resolve().parents[1] +STORE = 'eng/policy/reconciliation/' +OWNERS = set(inventory.OWNERS) +ACTIONS = {'Keep', 'Move', 'Retire'} + + +def require(value, message): + if not value: + raise ValueError(message) + + +def read(name): + return json.loads(inventory.read(ROOT, STORE + name + '.json'), object_pairs_hook=inventory.unique) + + +def tree(root, ref): + result = {} + for line in inventory.git(root, 'ls-tree', '-r', ref).splitlines(): + metadata, name = line.split('\t', 1) + mode, kind, blob = metadata.split() + require(mode not in {'160000', '120000'}, 'linked source/submodule: ' + name) + require(kind == 'blob', 'unexpected tree entry') + result[name] = blob + return result + + +def decisions(rows, fields, key): + seen = set() + for row in rows: + runtime.fields(row, fields) + identity = tuple(row[k] for k in key) + require(identity not in seen, 'duplicate item: ' + repr(identity)) + seen.add(identity) + runtime.path(row['path']) + require(row['disposition'] in ACTIONS, 'invalid disposition') + require(isinstance(row['producer'], str) and re.fullmatch(r'WP\d{2}(?:\.\d{2})?', row['producer']), 'missing producer') + require(isinstance(row['reason'], str) and row['reason'].strip(), 'missing reason') + if 'owner' in row: + require(row['owner'] in OWNERS, 'unknown owner') + return seen + + +def validate(source, current, historical, directories, native): + runtime.fields(source, 'schemaVersion substep observedOn historicalCommit designCommit designFiles counts') + require(source['schemaVersion'] == 1 and source['substep'] == 'WP01.00', 'invalid source schema') + runtime.digest(source['historicalCommit']); runtime.digest(source['designCommit']) + require(source['historicalCommit'] == 'ede43db5b2237104dd0008b99398090c54a2cf94', 'historical baseline changed') + require(set(source['designFiles']) == {'docs/assurance/wp01-00-inventory-policy.md', 'docs/assurance/wp00-stage-acceptance.json', 'docs/architecture/27-platform-projects-and-application-assistants.md', 'docs/architecture/01-solution-and-project-layout.md'}, 'incomplete authority') + for digest in source['designFiles'].values(): runtime.digest(digest, 64) + require(len(current) == 9 and {r['repository'] for r in current} == OWNERS, 'missing or duplicate owner') + for row in current: + runtime.fields(row, 'repository origin commit tree clean worktrees candidate mainCi projects') + require(row['origin'] == 'https://github.com/ArcForges/' + row['repository'] + '.git', 'wrong origin') + runtime.digest(row['commit']); runtime.digest(row['tree']) + require(row['clean'] is True, 'unclean recorded primary') + require(row['candidate']['sourceCommit'] == row['commit'], 'candidate source mismatch') + require(row['mainCi'].startswith('https://github.com/ArcForges/' + row['repository'] + '/actions/runs/'), 'wrong CI owner') + require(row['worktrees'], 'missing worktree observations') + for worktree in row['worktrees']: + runtime.fields(worktree, 'path commit branch clean') + runtime.digest(worktree['commit']) + require(type(worktree['clean']) is bool and worktree['path'] and worktree['branch'], 'invalid worktree observation') + decisions(row['projects'], 'path blob disposition producer reason', ['path']) + for project in row['projects']: runtime.digest(project['blob']) + decisions(historical, 'path blob observedInDesktopPlatform owner target disposition producer reason', ['path']) + for row in historical: + runtime.digest(row['blob']); runtime.path(row['target']) + require(row['observedInDesktopPlatform'] in {'absent', 'changed', 'unchanged'}, 'invalid historical observation') + keys = decisions(directories, 'owner path disposition present producer reason', ['owner', 'path']) + for row in directories: require(type(row['present']) is bool, 'invalid presence') + for row in historical: require((row['owner'], row['target']) in keys, 'unassigned historical target') + for row in current: + for project in row['projects']: + parent = Path(project['path']).parent.as_posix() + require(parent == '.' or (row['repository'], parent) in keys, 'unassigned current project directory') + decisions(native, 'path owner disposition producer present reason', ['path']) + require({r['path'] for r in native} == {'native/' + n for n in ['arcgraphics-metal-abi', 'arcmedia-ffmpeg-abi', 'arcscope-mdf-abi', 'arcslate-color-abi', 'arcslate-image-abi', 'arcslate-otio-abi', 'shared']}, 'incomplete historical native inventory') + require(all(r['owner'] == 'DesktopPlatform' for r in native), 'native producer outside platform') + require(len(historical) == 166, 'incomplete historical project inventory') + require(source['counts'] == {'owners':len(current), 'projects':sum(len(r['projects']) for r in current), 'historical':len(historical), 'directories':len(directories), 'native':len(native)}, 'inventory count drift') + + +def check_projects(root, row, files, pinned): + require(inventory.git(root, 'remote', 'get-url', 'origin') == row['origin'], 'origin drift') + expected = {r['path']: r['blob'] for r in row['projects']} + actual = {p:b for p,b in files.items() if inventory.kind(p)} + require(set(actual) == set(expected), 'current project set drift: ' + row['repository']) + require(not pinned or actual == expected, 'pinned project blob drift') + # The established checker rejects escaped project references, local npm/Gradle imports and gitlinks. + audited = inventory.audit(root, row['repository']) + require({p['path'] for p in audited['projects']} == set(expected), 'working project inventory drift') + return audited + + +def check_history(files, historical, platform_files): + actual = {p:b for p,b in files.items() if p.endswith('.csproj')} + require(actual == {r['path']:r['blob'] for r in historical}, 'historical project/blob drift') + for row in historical: + observed = 'absent' if row['path'] not in platform_files else 'unchanged' if platform_files[row['path']] == row['blob'] else 'changed' + require(row['observedInDesktopPlatform'] == observed, 'historical disposition observation drift: ' + row['path']) + + +def check_directories(directories, trees): + for row in directories: + present = any(p.startswith(row['path'] + '/') for p in trees[row['owner']]) + require(row['present'] == present, 'directory presence drift: ' + row['owner'] + '/' + row['path']) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--repository', action='append', help='Owner=absolute-root; all nine, read-only, fresh observation') + parser.add_argument('--design-root', type=Path) + parser.add_argument('--report', type=Path, default=ROOT/'artifacts/evidence/reconciliation.json') + args = parser.parse_args() + report = {'substep':'WP01.00', 'checkedAt':datetime.now(timezone.utc).isoformat(), 'mode':'fresh-family' if args.repository else 'immutable-snapshots-with-current-platform', 'repositories':[], 'limitations':'Inventory/policy only; candidate identities refer to the bound WP00 receipt, not a new provider/device/product run.'} + try: + source, current, historical, directories, native = [read(n) for n in ['source','current','historical','directories','native']] + validate(source, current, historical, directories, native) + with tempfile.TemporaryDirectory(prefix='arcforges-reconciliation-') as temp: + parent = Path(temp) + design = args.design_root.resolve() if args.design_root else runtime.checkout(parent, 'ArcForges-Design', source['designCommit']) + bodies = {} + for path, digest in source['designFiles'].items(): + body = subprocess.check_output(['git','-C',str(design),'show',source['designCommit']+':'+path]).replace(b'\r\n',b'\n') + require(hashlib.sha256(body).hexdigest() == digest, 'authority drift: ' + path) + bodies[path] = body + receipt = json.loads(bodies['docs/assurance/wp00-stage-acceptance.json']) + expected_receipts = {r['owner']:r for r in receipt['owners']} + roots = {} + if args.repository: + for entry in args.repository: + owner, sep, location = entry.partition('=') + require(sep and owner in OWNERS and owner not in roots and Path(location).is_absolute(), 'invalid repository selection') + roots[owner] = Path(location).resolve() + require(set(roots) == OWNERS and len({str(p) for p in roots.values()}) == 9, 'fresh audit requires nine independent roots') + else: + for row in current: + n = row['repository'] + roots[n] = ROOT if n == 'DesktopPlatform' else runtime.checkout(parent, n, row['commit']) + before = {n:(inventory.git(p,'rev-parse','HEAD'),inventory.git(p,'status','--porcelain')) for n,p in roots.items()} + pinned_trees = {} + actual_trees = {} + for row in current: + n = row['repository']; root = roots[n] + require(row['candidate'] == expected_receipts[n]['candidate'] and row['mainCi'] == expected_receipts[n]['mainCi'], 'published receipt mismatch') + require(inventory.git(root,'rev-parse',row['commit']+'^{tree}') == row['tree'], 'snapshot tree identity mismatch') + pinned_trees[n] = tree(root, row['commit']) + require({p:b for p,b in pinned_trees[n].items() if inventory.kind(p)} == {p['path']:p['blob'] for p in row['projects']}, 'recorded project blob mismatch') + files = tree(root, 'HEAD') + actual_trees[n] = files + audit = check_projects(root, row, files, pinned=True) + report['repositories'].append({'repository':n,'commit':before[n][0],'clean':not bool(before[n][1]),'snapshotCommit':row['commit'],'snapshotIsHead':before[n][0]==row['commit'],'projects':len(audit['projects']),'result':'passed'}) + check_history(tree(roots['DesktopPlatform'], source['historicalCommit']), historical, pinned_trees['DesktopPlatform']) + check_directories(directories, pinned_trees) + check_directories(native, pinned_trees) + check_directories(directories, actual_trees) + check_directories(native, actual_trees) + require(before == {n:(inventory.git(p,'rev-parse','HEAD'),inventory.git(p,'status','--porcelain')) for n,p in roots.items()}, 'source changed during audit') + report.update(result='passed',counts=source['counts'],historicalCommit=source['historicalCommit'],designCommit=source['designCommit']) + code = 0 + except (ValueError,OSError,KeyError,TypeError,subprocess.CalledProcessError) as error: + report.update(result='failed',error=str(error)); code=1 + args.report.parent.mkdir(parents=True,exist_ok=True) + args.report.write_text(json.dumps(report,indent=2)+'\n',encoding='utf-8') + print(json.dumps({k:report[k] for k in ['result','counts','error'] if k in report})) + return code + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/eng/test_reconciliation.py b/eng/test_reconciliation.py new file mode 100644 index 0000000..b690ea7 --- /dev/null +++ b/eng/test_reconciliation.py @@ -0,0 +1,96 @@ +# SPDX-License-Identifier: AGPL-3.0-only +"""Independent actual Git fixtures for inventory omissions and source escapes.""" +import copy +import json +from pathlib import Path +import subprocess +import tempfile +import unittest + +import reconciliation as policy + + +class ReconciliationTests(unittest.TestCase): + def setUp(self): + self.temp = tempfile.TemporaryDirectory() + self.addCleanup(self.temp.cleanup) + self.root = Path(self.temp.name) + self.git('init','-q') + self.git('config','user.email','fixture@example.invalid') + self.git('config','user.name','Fixture') + self.git('remote','add','origin','https://github.com/ArcForges/DesktopPlatform.git') + + def git(self,*args): + return subprocess.check_output(['git','-C',str(self.root),*args],text=True).strip() + + def commit(self, files): + for name,body in files.items(): + p=self.root/name;p.parent.mkdir(parents=True,exist_ok=True);p.write_text(body,encoding='utf-8') + self.git('add','.');self.git('commit','-qm','fixture') + return self.git('rev-parse','HEAD') + + def test_registry_rejects_omission_duplicate_owner_target_and_unsafe_path(self): + original=[policy.read(n) for n in ['source','current','historical','directories','native']] + policy.validate(*original) + for kind in ['owner','project','history','directory','native','duplicate','target','path','producer','candidate','origin']: + with self.subTest(kind=kind): + values=copy.deepcopy(original);source,current,history,directories,native=values + if kind=='owner':current.pop() + elif kind=='project':current[0]['projects'].pop() + elif kind=='history':history.pop() + elif kind=='directory':directories.pop() + elif kind=='native':native.pop() + elif kind=='duplicate':directories.append(directories[0]) + elif kind=='target':history[0]['target']='unregistered/path' + elif kind=='path':directories[0]['path']='../outside' + elif kind=='producer':history[0]['producer']='' + elif kind=='candidate':current[0]['candidate']['sourceCommit']='0'*40 + elif kind=='origin':current[0]['origin']='https://example.invalid/source' + with self.assertRaises(ValueError):policy.validate(*values) + + def test_historical_missing_extra_and_modified_blob(self): + old=self.commit({'src/A/A.csproj':'','readme.md':'fixture'}) + files=policy.tree(self.root,old) + history=[{'path':'src/A/A.csproj','blob':files['src/A/A.csproj'],'observedInDesktopPlatform':'unchanged'}] + policy.check_history(files,history,files) + changed=self.commit({'src/A/A.csproj':'','src/B/B.csproj':''}) + with self.assertRaisesRegex(ValueError,'historical project/blob drift'):policy.check_history(policy.tree(self.root,changed),history,files) + with self.assertRaises(ValueError):policy.check_history({},history,files) + with self.assertRaisesRegex(ValueError,'observation drift'):policy.check_history(files,history,{}) + + def test_submodule_and_symlink_git_modes_are_rejected(self): + commit=self.commit({'readme.md':'fixture'}) + blob=self.git('hash-object','readme.md') + for mode,object_id in [('160000',commit),('120000',blob)]: + with self.subTest(mode=mode): + self.git('update-index','--add','--cacheinfo',mode,object_id,'linked') + self.git('commit','-qm','linked fixture') + with self.assertRaisesRegex(ValueError,'linked source/submodule'):policy.tree(self.root,'HEAD') + self.git('update-index','--force-remove','linked') + + def test_current_extra_missing_and_changed_project(self): + self.commit({'src/A/A.csproj':''}) + files=policy.tree(self.root,'HEAD') + row={'repository':'DesktopPlatform','origin':'https://github.com/ArcForges/DesktopPlatform.git','projects':[{'path':'src/A/A.csproj','blob':files['src/A/A.csproj']}]} + for changed in [{},{**files,'src/B/B.csproj':'0'*40},{'src/A/A.csproj':'0'*40}]: + with self.subTest(changed=changed),self.assertRaises(ValueError):policy.check_projects(self.root,row,changed,True) + + def test_present_absent_and_foreign_directory(self): + self.commit({'src/A/A.csproj':''}) + trees={'DesktopPlatform':policy.tree(self.root,'HEAD'),'Contracts':{}} + rows=[{'owner':'DesktopPlatform','path':'src/A','present':True},{'owner':'Contracts','path':'public/proto','present':False}] + policy.check_directories(rows,trees) + for change in [dict(rows[0],present=False),dict(rows[0],owner='Contracts'),dict(rows[1],present=True)]: + with self.subTest(change=change),self.assertRaises(ValueError):policy.check_directories([change],trees) + + def test_reference_escape_is_rejected_by_owned_checker(self): + project='src/A/A.csproj' + self.commit({project:'AGPL-3.0-onlyAGPL', + 'eng/policy/licence-boundary.json':json.dumps({'schemaVersion':1,'repository':'DesktopPlatform','spdxLicense':'AGPL-3.0-only','licenceBoundary':'AGPL','projects':[{'path':project,'kind':'msbuild'}]})}) + files=policy.tree(self.root,'HEAD') + row={'repository':'DesktopPlatform','origin':'https://github.com/ArcForges/DesktopPlatform.git','projects':[{'path':project,'blob':files[project]}]} + with self.assertRaisesRegex(ValueError,'escapes repository'):policy.check_projects(self.root,row,files,True) + + +if __name__ == '__main__': + unittest.main() From 94d48e8b441d6d1cb9164b34eb543a25c10c1522 Mon Sep 17 00:00:00 2001 From: sammiller Date: Sun, 20 Sep 2026 14:42:55 -0700 Subject: [PATCH 2/2] fix(policy): accept equivalent GitHub checkout origin URLs --- eng/reconciliation.py | 2 +- eng/test_reconciliation.py | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/eng/reconciliation.py b/eng/reconciliation.py index 9b44b90..806ff7d 100644 --- a/eng/reconciliation.py +++ b/eng/reconciliation.py @@ -98,7 +98,7 @@ def validate(source, current, historical, directories, native): def check_projects(root, row, files, pinned): - require(inventory.git(root, 'remote', 'get-url', 'origin') == row['origin'], 'origin drift') + require(inventory.git(root, 'remote', 'get-url', 'origin').removesuffix('.git') == row['origin'].removesuffix('.git'), 'origin drift') expected = {r['path']: r['blob'] for r in row['projects']} actual = {p:b for p,b in files.items() if inventory.kind(p)} require(set(actual) == set(expected), 'current project set drift: ' + row['repository']) diff --git a/eng/test_reconciliation.py b/eng/test_reconciliation.py index b690ea7..e83b161 100644 --- a/eng/test_reconciliation.py +++ b/eng/test_reconciliation.py @@ -89,7 +89,11 @@ def test_reference_escape_is_rejected_by_owned_checker(self): 'eng/policy/licence-boundary.json':json.dumps({'schemaVersion':1,'repository':'DesktopPlatform','spdxLicense':'AGPL-3.0-only','licenceBoundary':'AGPL','projects':[{'path':project,'kind':'msbuild'}]})}) files=policy.tree(self.root,'HEAD') row={'repository':'DesktopPlatform','origin':'https://github.com/ArcForges/DesktopPlatform.git','projects':[{'path':project,'blob':files[project]}]} - with self.assertRaisesRegex(ValueError,'escapes repository'):policy.check_projects(self.root,row,files,True) + for origin in [row['origin'],row['origin'].removesuffix('.git')]: + self.git('remote','set-url','origin',origin) + with self.assertRaisesRegex(ValueError,'escapes repository'):policy.check_projects(self.root,row,files,True) + self.git('remote','set-url','origin','https://github.com/Other/DesktopPlatform.git') + with self.assertRaisesRegex(ValueError,'origin drift'):policy.check_projects(self.root,row,files,True) if __name__ == '__main__':