Skip to content

fix: the surface manifest never survived publish — images now carry it, portals adopt the CI bake at boot (#1699) - #1705

Merged
rbuergi merged 1 commit into
mainfrom
fix/1699-manifest-in-container-publish
Aug 17, 2026
Merged

rbuergi merged 1 commit into
mainfrom
fix/1699-manifest-in-container-publish

Conversation

@rbuergi

@rbuergi rbuergi commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Fixes #1699 — the missing piece between the CI bake publication and minutes-level portal startup.

Defect

_MeshWeaverAddSurfaceManifestToPublish hooked BeforeTargets="CopyFilesToPublishDirectory", but
the copying is performed by that target's dependencies (_ComputeResolvedFilesToPublishTypes
splits @(ResolvedFileToPublish) into the Always/PreserveNewest lists, then
_CopyResolvedFilesToPublish* copy them) — and a BeforeTargets hook on the orchestrator runs
after its dependencies. Traced in a detailed publish log (copy targets at 157345/158114, the
hook at 158126): the item was added after every copy, on every publish shape. So every shipped
image lacked meshweaver-surface.manifest
, portals resolved g<sha> while the CI bake is
s<hash>-keyed, SeedPublishedRoot never matched, and each pod recompiled all shipped content
at boot.

Fix + proof

AfterTargets="ComputeFilesToPublish" (the documented publish extension point — after the list
is computed, before it is split; PublishContainer consumes the same list). Verified locally:

plain publish → /tmp/pub/meshweaver-surface.manifest        ✓ (3346 bytes)
-t:PublishContainer → docker run … ls /app/meshweaver-surface.manifest  ✓ same bytes, correct hashes

With this, the first post-merge release ships manifest-bearing images: portal + mw-plugin-test
resolve the same s<hash> as the Build-and-Test bake artifact and the (now-sealing, #1702)
publication — pods seed the published bundles at boot and compile only what CI did not bake.
Startup becomes minutes, and stays warm across internal-only merges by construction.

Related: #1700, #1702 (merged), task #74 (satellite publications — consistent on the same key).

🤖 Generated with Claude Code

Copilot AI lite review requested due to automatic review settings August 17, 2026 05:22

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes a publishing pipeline gap where meshweaver-surface.manifest was generated during build but not included in published outputs (including container images), preventing portals from adopting CI-baked content at startup.

Changes:

  • Adjusts the MSBuild target hook so meshweaver-surface.manifest is added to @(ResolvedFileToPublish) early enough to be copied into publish outputs (and thus into shipped images).
  • Adds a “What’s New” entry documenting the startup improvement from adopting CI-compiled bundles at boot.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
Directory.Build.props Moves the publish hook to AfterTargets="ComputeFilesToPublish" so the surface manifest is actually included in published outputs/images.
src/MeshWeaver.Documentation/Data/WhatsNew/2026-08-17-startup-in-minutes-not-hours.md Documents the user-visible effect (startup time reduction) from images carrying the manifest and boot adopting the published bake.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@github-actions

github-actions Bot commented Aug 17, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 0)

920 tests   919 ✅  11m 12s ⏱️
 10 suites    1 💤
 10 files      0 ❌

Results for commit c016dd9.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Aug 17, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 5)

1 371 tests   1 370 ✅  6m 0s ⏱️
   11 suites      1 💤
   11 files        0 ❌

Results for commit c016dd9.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Aug 17, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 4)

1 607 tests   1 601 ✅  7m 22s ⏱️
   11 suites      6 💤
   11 files        0 ❌

Results for commit c016dd9.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Aug 17, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 3)

   11 files     11 suites   5m 7s ⏱️
2 198 tests 2 007 ✅ 191 💤 0 ❌
2 571 runs  2 380 ✅ 191 💤 0 ❌

Results for commit c016dd9.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Aug 17, 2026 •

Copy link
Copy Markdown
Contributor

Test Results (shard 2)

2 375 tests   2 371 ✅  6m 52s ⏱️
   11 suites      4 💤
   11 files        0 ❌

Results for commit c016dd9.

♻️ This comment has been updated with latest results.

…ComputeFilesToPublish, not before the copy orchestrator

_MeshWeaverAddSurfaceManifestToPublish hooked BeforeTargets="CopyFilesToPublishDirectory" — but
the actual copying is done by that target's DEPENDENCIES (_ComputeResolvedFilesToPublishTypes
splits @(ResolvedFileToPublish), then _CopyResolvedFilesToPublish* copy the split lists), and a
BeforeTargets hook on the orchestrator runs AFTER its dependencies. Traced in a detailed publish
log: the copy targets ran at lines 157345/158114, the hook at 158126 — the item was added once
everything had been copied, on EVERY publish shape (plain -o and -t:PublishContainer alike).

Consequence (#1699): every shipped image lacked meshweaver-surface.manifest, portals resolved the
commit identity g<sha> while the CI bake publishes under the surface identity s<hash>, and
SeedPublishedRoot never found a directory to adopt — every pod recompiled all shipped content at
boot, making startup scale with the full content rebuild instead of minutes.

Fix: AfterTargets="ComputeFilesToPublish" — the documented publish extension point, after the
list is computed and before it is split; PublishContainer consumes the same list. Verified: the
manifest now lands in a plain publish AND inside a locally published container image
(/app/meshweaver-surface.manifest, correct per-assembly surface hashes).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@rbuergi
rbuergi force-pushed the fix/1699-manifest-in-container-publish branch from 6141dce to c016dd9 Compare August 17, 2026 05:39
@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 1)

2 240 tests   2 137 ✅  7m 45s ⏱️
   11 suites    103 💤
   11 files        0 ❌

Results for commit c016dd9.

@github-actions

github-actions Bot commented Aug 17, 2026 •

Copy link
Copy Markdown
Contributor

Test Results

    65 files      65 suites   44m 20s ⏱️
10 711 tests 10 405 ✅ 306 💤 0 ❌
11 084 runs  10 778 ✅ 306 💤 0 ❌

Results for commit c016dd9.

♻️ This comment has been updated with latest results.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

#1660 WS3: container images ship WITHOUT meshweaver-surface.manifest — portals resolve g<sha>, so the s-keyed CI bake publication is never adopted

2 participants