fix(control-center): align Growth with shared social release schedule - #412
Merged
i-xtsu-sixyou-ken-mei merged 13 commits intoSep 8, 2026
Merged
Conversation
i-xtsu-sixyou-ken-mei
deleted the
fix/control-center-growth-publishing-context
branch
September 8, 2026 00:41
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Intent
Make the Growth tab describe the social publishing contract that actually runs in production, and improve the visual scan path for language/platform identity.
The current page incorrectly derives a single “best shared slot” from per-platform strategy evidence and can render copy such as
09:30 JST · strongest shared slot across 1 platform, even though the production release contract is article-level and currently publishes up to three cohorts per JST day.Context
The canonical social release policy is
apps/podcast-pipeline/src/social/policy.ts:SOCIAL_RELEASE_DAILY_CAP = 3SOCIAL_RELEASE_SLOTS = 09:30 / 12:00 / 16:00 JSTGrowthView.tsxwas instead miningSocialDecision.publishSlotsJst, which is strategy/performance evidence, not the scheduler contract. That semantic mismatch made Growth look like the system only had one publishing time.The Growth tab also duplicated the active social publish queue already represented in the Pipeline tab through
GrowthDistributionBoard.tsx.Scope
09:30 · 12:00 · 16:00 JST.emoji + local SVG logo + label) across Growth playbooks, audience pulse, latest episode, evidence, and collection status.GrowthDistributionBoard.tsxand its Growth-tab rendering/test because Pipeline is the operational queue surface.SOCIAL_RELEASE_SLOTSandSOCIAL_RELEASE_DAILY_CAP.Out of scope
Product contract / invariants
Affected invariant:
apps/podcast-pipeline/src/social/policy.ts,apps/podcast-pipeline/src/social/AGENTS.md, andscripts/check-social-release-contract.mjsarticle-level shared-slot release contract.Why:
The UI was out of sync with the existing invariant. This PR makes it descriptive of the canonical scheduler rather than allowing strategy telemetry to imply a separate publishing policy.
Acceptance criteria
Publishing nowdistribution block.Implementation
GrowthViewnow owns a small display constant for the current slot strings andcheck-social-release-contract.mjsparses both that constant andSOCIAL_RELEASE_SLOTS, comparing them in CI. This lets the client remain package-isolated while still preventing silent contract drift.Platform marks are served locally from
apps/control-center/public/platform-iconsrather than a runtime CDN dependency.platform.tscentralizes emoji, label, and icon-path lookup.The duplicate
GrowthDistributionBoardcomponent and its dedicated test case are removed; Pipeline remains the queue/operational publishing surface.Contract alignment
AGENTS.mdremains accurate.Validation
apps/podcast-pipeline/src/social/policy.tsand the social README contract — PASS.scripts/check-social-release-contract.mjsupdated to compare Growth slots with canonical policy — added, pending CI execution.Validation gaps
No local shell/runtime is available through the GitHub connector, so package type-check, Vitest, Prettier, and the contract script are delegated to PR CI. I will inspect actionable CI failures on this PR.
Known unrelated failures
None known.
Reviewer notes
The key review boundary is semantic: schedule/timing in Growth must come from the release contract, while strategy/performance evidence should only influence content/language recommendations. The PR intentionally does not redesign the scheduler.