Repository navigation
move(sidecars): the service images and deployment targets leave core for MeshWeaver.Deploy (delete half) - #7307
Conversation
…for MeshWeaver.Deploy (delete half)
Core keeps what produces or seals its image set or proves it sound. The service images an instance
may run beside its portal (ocr, ollama, whisper, s1-extract, with their *-image.yml lanes), the
generated deployment targets (compose, compose-ha, aca, marketplace, .env.example) and the AKS
bring-up docs (deploy/aks/{README,SELF-UPDATE,INSTANCE-LIFECYCLE}.md) now live in
Systemorph/MeshWeaver.Deploy at the same paths.
- release-channels.json: the four service-line writers name MeshWeaver.Deploy ("repo"), so the line
tags stay protected; self-test pins it.
- acr-retention/instances.json: core carries no overlay file any more, so its `repositories` entry
goes with the charts; lock-pinned-digests --self-test ARM 35 pins "declared iff the tree carries
an overlay", both directions.
- check-chart-freeze.py: every moved path is frozen delete-only (19 self-test cases).
- Docs repointed; CarvingProjectsOutOfCore records the verdict per directory and the sidecar move.
Stays: deploy/base-images, deploy/core-tests, deploy/{node,python,pandas}-gate,
deploy/CHANGE-PROPAGATION.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Test Results 25 files ±0 25 suites ±0 56m 39s ⏱️ + 1m 43s Results for commit 91f28c9. ± Comparison against base commit 65c16ce. This pull request removes 59 and adds 22 tests. Note that renamed tests count towards both.♻️ This comment has been updated with latest results. |
# Conflicts: # clients/voice-gateway/Dockerfile # clients/voice-gateway/README.md # src/MeshWeaver.Documentation/Data/Architecture/DockerHubInCi.md # src/MeshWeaver.Documentation/Data/Architecture/VoiceModelDistribution.md
There was a problem hiding this comment.
🔵 Needs a closer look
The deletion requires human verification of cross-repository prerequisites because Deploy’s Ollama publication was skipped and the Memex#860 consumer-repoint change was unavailable for review.
No open issues 🎉
What changed in this PR
This is the delete half of moving deployment-only sidecars and generated deployment targets from core to MeshWeaver.Deploy. Core retains the recipes and tooling needed to build, seal, and validate its own image set.
Changes:
- Removes sidecar build contexts, charts, and deployment templates now owned by MeshWeaver.Deploy.
- Updates release-channel ownership, retention checks, and delete-only guards while preserving service-tag protection.
- Repoints documentation and comments to the new repository without changing runtime APIs.
| File | Description |
|---|---|
test/MeshWeaver.Documentation.Test/MigrationWorkloadModelGuard.cs |
Repoints a documentation reference in a comment only. |
src/MeshWeaver.Documentation/Data/Architecture/VoiceModelDistribution.md |
Names Deploy as the Whisper build and ignore-rule owner. |
src/MeshWeaver.Documentation/Data/Architecture/RepositoryDependencyDirection.md |
Explains external release-channel writer declarations. |
src/MeshWeaver.Documentation/Data/Architecture/ReleaseEditions.md |
Attributes service-image publishing to Deploy. |
src/MeshWeaver.Documentation/Data/Architecture/OnboardingNewEnvironment.md |
Links to the relocated AKS guide. |
src/MeshWeaver.Documentation/Data/Architecture/OcrService.md |
Repoints OCR build, workflow, and chart references. |
src/MeshWeaver.Documentation/Data/Architecture/MemexCloudDeployment.md |
Links to Deploy’s AKS instructions. |
src/MeshWeaver.Documentation/Data/Architecture/LocalModelService.md |
Repoints Ollama build and chart ownership. |
src/MeshWeaver.Documentation/Data/Architecture/InstanceIdentityAndSetup.md |
Identifies Deploy as the Compose topology owner. |
src/MeshWeaver.Documentation/Data/Architecture/DocumentIngestionEndVision.md |
Updates local-service ownership in the implementation plan. |
src/MeshWeaver.Documentation/Data/Architecture/DockerHubInCi.md |
Distinguishes core and relocated image build contexts. |
src/MeshWeaver.Documentation/Data/Architecture/DeploymentAKS.md |
Repoints AKS documentation references. |
src/MeshWeaver.Documentation/Data/Architecture/CentralizedSpeech.md |
Names Deploy as the Whisper container owner. |
src/MeshWeaver.Documentation/Data/AI/ModelProviderSetup.md |
Repoints the deployment environment-template reference. |
scripts/check-chart-freeze.py |
Freezes moved paths against reintroduction and adds cases. |
Readme.md |
Links production recipes and sidecars to Deploy. |
deploy/whisper/README.md |
Removes relocated Whisper instructions. |
deploy/whisper/helm/values.yaml |
Removes relocated Whisper chart defaults. |
deploy/whisper/helm/templates/service.yaml |
Removes relocated Whisper Service template. |
deploy/whisper/helm/templates/NOTES.txt |
Removes relocated Whisper installation notes. |
deploy/whisper/helm/templates/deployment.yaml |
Removes relocated Whisper Deployment template. |
deploy/whisper/helm/templates/_helpers.tpl |
Removes relocated Whisper chart helpers. |
deploy/whisper/helm/Chart.yaml |
Removes relocated Whisper chart metadata. |
deploy/whisper/helm/.helmignore |
Removes relocated Whisper packaging exclusions. |
deploy/whisper/docker-compose.yml |
Removes relocated Whisper Compose recipe. |
deploy/s1-extract/requirements.txt |
Removes relocated extractor dependency pins. |
deploy/s1-extract/README.md |
Removes relocated extractor instructions. |
deploy/s1-extract/helm/values.yaml |
Removes relocated extractor chart defaults. |
deploy/s1-extract/helm/templates/serviceaccount.yaml |
Removes relocated extractor authentication resources. |
deploy/s1-extract/helm/templates/service.yaml |
Removes relocated extractor Service template. |
deploy/s1-extract/helm/templates/networkpolicy.yaml |
Removes relocated extractor network policy. |
deploy/s1-extract/helm/templates/deployment.yaml |
Removes relocated extractor Deployment template. |
deploy/s1-extract/helm/templates/_helpers.tpl |
Removes relocated extractor chart helpers. |
deploy/s1-extract/helm/Chart.yaml |
Removes relocated extractor chart metadata. |
deploy/s1-extract/helm/.helmignore |
Removes relocated extractor packaging exclusions. |
deploy/s1-extract/export_model.py |
Removes relocated model-export tooling. |
deploy/s1-extract/Dockerfile |
Removes relocated extractor image recipe. |
deploy/s1-extract/app/test_server.py |
Removes relocated extractor service tests. |
deploy/s1-extract/app/smoke_model.py |
Removes relocated model-loading smoke test. |
deploy/s1-extract/app/auth.py |
Removes relocated TokenReview authentication implementation. |
deploy/ollama/README.md |
Removes relocated Ollama instructions. |
deploy/ollama/helm/values.yaml |
Removes relocated Ollama chart defaults. |
deploy/ollama/helm/templates/tests/smoke.yaml |
Removes relocated in-cluster smoke-test template. |
deploy/ollama/helm/templates/service.yaml |
Removes relocated Ollama Service template. |
deploy/ollama/helm/templates/networkpolicy.yaml |
Removes relocated Ollama network policy. |
deploy/ollama/helm/templates/deployment.yaml |
Removes relocated Ollama Deployment template. |
deploy/ollama/helm/templates/_helpers.tpl |
Removes relocated Ollama chart helpers. |
deploy/ollama/helm/Chart.yaml |
Removes relocated Ollama chart metadata. |
deploy/ollama/Dockerfile |
Removes relocated Ollama image recipe. |
deploy/ollama/app/entrypoint.sh |
Removes relocated startup and model-preload script. |
deploy/ollama/app/bake.sh |
Removes relocated model-baking script. |
deploy/ocr/helm/values.yaml |
Removes relocated OCR chart defaults. |
deploy/ocr/helm/templates/service.yaml |
Removes relocated OCR Service template. |
deploy/ocr/helm/templates/networkpolicy.yaml |
Removes relocated OCR network policy. |
deploy/ocr/helm/templates/deployment.yaml |
Removes relocated OCR Deployment template. |
deploy/ocr/helm/templates/_helpers.tpl |
Removes relocated OCR chart helpers. |
deploy/ocr/helm/Chart.yaml |
Removes relocated OCR chart metadata. |
deploy/ocr/fixtures/make_fixtures.py |
Removes relocated OCR fixture generator. |
deploy/ocr/Dockerfile |
Removes relocated OCR image recipe. |
deploy/marketplace/README.md |
Removes relocated Marketplace packaging instructions. |
deploy/marketplace/createUiDefinition.json |
Removes relocated Marketplace wizard definition. |
deploy/compose/docker-compose.yaml |
Removes relocated single-node Compose topology. |
deploy/compose-ha/docker-compose.yaml |
Removes relocated high-availability Compose topology. |
deploy/aca/memex-postgres/memex-postgres.bicep |
Removes relocated Postgres Container Apps template. |
deploy/aca/memex-portal/memex-portal.bicep |
Removes relocated portal Container Apps template. |
deploy/aca/memex-migration/memex-migration.bicep |
Removes relocated migration Container Apps template. |
deploy/aca/memex-aca-acr/memex-aca-acr.bicep |
Removes relocated Azure registry template. |
deploy/aca/main.bicep |
Removes relocated Azure deployment entry point. |
deploy/.env.example |
Removes relocated environment template. |
.gitignore |
Removes moved-path rules and clarifies retained recipes. |
.github/workflows/main-cd.yml |
Repoints AKS references in comments only. |
.github/scripts/release-channels.py |
Adds assertions for moved writers and protected tags. |
.github/scripts/lock-pinned-digests.py |
Checks core roster membership against overlay presence. |
.github/release-channels.json |
Declares Deploy as the four service-image writers’ home. |
.github/acr-retention/instances.json |
Removes core’s overlay entry and updates Deploy’s scope. |
.dockerignore |
Removes the obsolete Compose data exclusion. |
Review effort: Balanced
Delete half of moving the deployment sidecars out of core (core slimming). Core keeps what produces or seals its image set, or proves the set sound. Everything else under
deploy/that only a deployment consumes now lives in the public MeshWeaver.Deploy, at the same paths.DRAFT on purpose. Release it only after the add half has merged and has published, and after the estate's vendored-chart check has been repointed (see "What blocks releasing this draft").
Pairs-with: Systemorph/MeshWeaver.Deploy#32
Pairs-with: Systemorph/MeshWeaver.Deploy#36
Pairs-with: Systemorph/Memex#860
(The pair gate only reads
src/. This change removes YAML, Dockerfiles, Python, Bicep and docs, so the pairing is declared by hand. No publicsrc/type or member is removed.)Verdict per directory
deploy/ocr,deploy/ollama,deploy/whisper,deploy/s1-extract+{ocr,ollama,whisper,s1-extract}-image.ymlApplyChartbinds the immutable tag. #7184 putdeploy/ocrin core only to sit besidewhisper/s1-extract("built the waydeploy/whisperanddeploy/s1-extractare"); it gave no core reason.deploy/compose,deploy/compose-ha,deploy/aca,deploy/marketplace,deploy/.env.exampleMemex.Deploy.AppHost(aspire publish -o deploy/…), and nothing in core reads them.deploy/aks/README.md,SELF-UPDATE.md,INSTANCE-LIFECYCLE.md../helmand../aca, which only resolve in Deploy.deploy/base-images(+base-image-acr.yml)portal-aiis the base image thatmain-cd.ymlbuilds the product FROM.dotnet-test.ymlholds CI's fonts and Playwright version to that Dockerfile.deploy/core-testsmw-core-tests.main-cd.ymlpacks and pushes it,dotnet-test.ymlself-testscore-tests.py, and.github/build-stages.jsonruns it.deploy/{node,python,pandas}-gateclients/python,clients/typescript) plus the one canonicalmesh.proto. Moving them would make another repository check core out at a ref just to build core's bytes. No workflow builds them.deploy/CHANGE-PROPAGATION.mdDirectory.Build.propscites it. It belongs in the doc tree rather than indeploy/; that is a follow-up, not a move.What changes here so nothing goes unguarded
release-channels.json. The four service-line writers (s1-extract-line,whisper-line,ocr-line,ollama-line) now carry"repo": "Systemorph/MeshWeaver.Deploy", the chore(operator): the hosting operator leaves core for MeshWeaver.Plugins (delete half) #7119 shape.checktherefore does not look for the deleted workflows, and the pruners still protect the line tags. The self-test gains two expectations: all four writers name Deploy, andtesseract-5.5and0.33.2-qwen3.6-bge-m3are still protected.acr-retention/instances.json. Core's fourdeploy/*/helm/values.yamlwere the only files in this tree that match the overlay path filter. With them gone, the nightly--discoverrun would go red on core's ownrepositoriesentry ("declares … and no repository … carries a deployment overlay"), so the entry is removed. The Deploy entry's reason now names the service charts.lock-pinned-digests.py --self-testARM 35 now asserts that this repository is declared exactly when its own tree carries an overlay file. Negative control: plantingdeploy/negctl/values.yamlturns the self-test red (exit 1) with that message.scripts/check-chart-freeze.py. Every moved path is now frozen delete-only, so a second publisher of those image names cannot grow back here. The self-test has 19 cases:deploy/is not frozen.CarvingProjectsOutOfCore→ "Files" gets one row per verdict above, plus a new "The service images — the sidecar move" section on identity, tags, retention, the estate check and the freeze.RepositoryDependencyDirection→ "What is NOT an inverted edge" now covers a"repo"writer binding.OcrService,LocalModelService,CentralizedSpeech,VoiceModelDistribution(current-state sentences only; the dated history stays as evidence);DocumentIngestionEndVision,DockerHubInCi,ReleaseEditions,DeploymentAKS,OnboardingNewEnvironment,MemexCloudDeployment;InstanceIdentityAndSetup,ModelProviderSetup,Readme.md. Itsdeploy/helmanddeploy/akslinks had been dead since move(deploy): the deployment reference leaves core for the public MeshWeaver.Deploy #7127.main-cd.yml,clients/voice-gatewayandMigrationWorkloadModelGuardare repointed too..gitignore/.dockerignore. The rules fordeploy/.env.example, the compose data anddeploy/whisper/models/move to Deploy's.gitignore.Images and consumers
<line>-<sha7>names a MeshWeaver.Deploy commit.dependents-verify-on-their-side,PlatformReleaseNotifyGuardgreen).Vendored charts match corejob. It checks out core'smainand compares its whisper, s1-extract and ollama copies, so it would fail closed here. Memex#860 repoints it at Deploy.src/MeshWeaver.Ocr(README,OcrOptionsdoc comment),src/Memex.LocalMesh/Program.cs,src/Memex.Deploy.AppHost/Program.cs("committed in the platform repository") andHosting/*.md. Those are a follow-up for Plugins.Merge with main (#7306, resolved by intent)
#7306 moved
clients/voice-gatewayto MeshWeaver.Plugins.clients/voice-gateway/{Dockerfile,README.md}wins, so the comment repoints this PR made there are dropped.DockerHubInCiandVoiceModelDistributionnow name both moves: the voice gateway in Plugins, and the service images and.gitignorerule in Deploy.Verified locally (head
91f28c95d7, merged withorigin/main)(The figures below were re-run on that merge; see the update in the PR history.)
MeshWeaver.Documentation.Test. Built with-c Release -warnaserror: 0 warnings, 0 errors. Run via the trx: 878 total, 878 passed, 0 failed. This includesDocumentationLinkIntegrityTest,PlatformReleaseNotifyGuardandMigrationWorkloadModelGuard.release-channels.py.--self-testpassed with 0 failures;check .reports 13 labels, all consistent.lock-pinned-digests.py.--self-testexits 0, the planted-overlay negative control exits 1, and--check-registry-retention .exits 0.check-chart-freeze.py.--self-testholds 19/19, and--base origin/mainreports no frozen path added or modified.check-workflow-timeouts: 111 jobs, 0 violations;check-workflow-yaml-keys: 50 files, 0 violations;check-pr-secret-preflight: 0 violations;check-workflow-permission-pairing: 12 pairs, 0 violations;check-workflow-shell: 0 live findings;test-cd-steps.py: exit 0.What blocks releasing this draft
e4cfec672. Its first main runs proved three lanes, ocr, whisper and s1-extract: each pushed its immutable tag as Deploy's identity, andconverge-lineread the registry tag list and moved the line in round 1 (runs 40493629433, 40493629244, 40493629555).ollama:<line>-<sha7>and the line converges onto it.Not verified
--discoverwas not run here. Only the offline ARM 35 assertion covers the removal of the roster entry.ApplyChartapprovals or estate overlays need nothing new. They pin immutable tags that already exist, and none were enumerated live.🤖 Generated with Claude Code