Skip to content

feat: conclude manifest-sync experiment - #624

Open
srtaalej wants to merge 2 commits into
mainfrom
release-manifest-sync
Open

feat: conclude manifest-sync experiment#624
srtaalej wants to merge 2 commits into
mainfrom
release-manifest-sync

Conversation

@srtaalej

Copy link
Copy Markdown
Contributor

Summary

  • Removes the manifest-sync experiment flag and enables two-way manifest sync by default
  • Unhides slack manifest sync command
  • Replaces the old confirm prompt flow in shouldUpdateManifest with a call to manifest.Sync
  • Updates experiment docs

Test plan

  • make lint passes
  • make test passes
  • Manual test: slack manifest sync works without --experiment manifest-sync
  • Manual test: slack deploy triggers sync on manifest mismatch

@codecov

codecovBot commented Aug 5, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 72.23%. Comparing base (b2ad402) to head (15c26f0).

Additional details and impacted files
@@ Coverage Diff @@## main #624 +/- ##
==========================================
- Coverage 72.24% 72.23% -0.02% 
==========================================
Files 238 238 Lines 20072 20021 -51 ==========================================
- Hits 14502 14463 -39 + Misses 4299 4291 -8 + Partials 1271 1267 -4 

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@srtaalejsrtaalej self-assigned this Aug 5, 2026
@srtaalejsrtaalej added enhancement M-T: A feature request for new functionality experiment Experimental feature accessed behind the --experiment flag or toggle semver:minor Use on pull requests to describe the release version increment labels Aug 5, 2026
@srtaalejsrtaalej added this to the Next Release milestone Aug 5, 2026
@srtaalej
srtaalej marked this pull request as ready for review August 5, 2026 20:10
@srtaalej
srtaalej requested review from a team as code ownersAugust 5, 2026 20:10

@zimegzimeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@srtaalej Thanks for getting this started. I'm requesting changes now because we still have a few edges to polish before this seems stable IMHO:

  • Recommending a CLI-managed manifest.json file as the source of truth. We should remove get-manifest from our own hook implementations as part of this. I'm not meaning to deprecate it altogether, but change our preferred default. A frustrating experience appears often otherwise when remote changes aren't saved to file because of a custom hook implementation.
 ! No manifest.json found in project root — merged manifest was not written locally
  • Missing flags in commands calling manifest sync. The "run" command shows this and makes me want to revisit the option of #617 while still in experiment to use perhaps:
--manifest-source=project|remote

But "local" might be a more common term at the moment. Here's the error for reference:

$ lack run --app=A0BP2KFNZSQ | cat
App Manifest
Found 1 difference(s) between project and app settings
features.app_home.messages_tab_enabled
Project: false
App settings: true
Check /Users/eden.zimbelman/.slack/logs/slack-debug-20260808.log for error logs
The app manifest was not updated (app_manifest_update_error)
Suggestion
Run `lack manifest sync` interactively to resolve manifest differences, or pass --force to push the project manifest to app settings or --force-remote to pull app settings to project
$ lack run --app=A0BP2KFNZSQ --force-remote | cat
Check /Users/eden.zimbelman/.slack/logs/slack-debug-20260808.log for error logs
unknown flag: --force-remote

Comment on lines +548 to +555
originalSyncFunc := manifestSyncFunc
manifestSyncFunc = func(_ context.Context, _ *shared.ClientFactory, _ types.App, _ types.SlackAuth) (*manifestpkg.SyncResult, error) {
if tc.mockManifestSyncError != nil {
return nil, tc.mockManifestSyncError
}
return &manifestpkg.SyncResult{}, nil
}
t.Cleanup(func() { manifestSyncFunc = originalSyncFunc })

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

🧪 thought: Significant logic is mocked with this pattern and I think we should avoid it to instead keep the manifestpkg.Sync function call inlined. Confidence in installations is meaningful to keep high!

🔬 ramble: I've opened an adjacent WIP PR #626 to collapse Install and InstallLocalApp functions into one because most logic is identical. I hope it improves the testing ergonomics here.

@zimegzimeg added the changelog Use on updates to be included in the release notes label Aug 8, 2026
@zimeg

zimeg commented Aug 8, 2026

Copy link
Copy Markdown
Member

🗣️ Changelog for once it's stable.

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

Labels

changelogUse on updates to be included in the release notesenhancementM-T: A feature request for new functionalityexperimentExperimental feature accessed behind the --experiment flag or togglesemver:minorUse on pull requests to describe the release version increment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@srtaalej@zimeg