Repository navigation
Land PROD-2552, PROD-2773, PROD-2782 on main (stacked PRs merged into their base branches) - #238
Merged
Merged
Conversation
…s source PROD-2552: verify comparison library (mapping index, neutral form, checks, report) - mapping-index: Map-backed bidirectional indices over every mapping type, read-only - canonicalize: neutral comparison form (target IDs, linked refs, asset URL translation and host aliasing, null/empty/CRLF/case/numeric normalization); shares no code with the push transforms - checks: mapping integrity, models/containers/templates, content (fields, counts, list order), page fields and zones (section-ID or exact-name pairing, never positional), sitemap (parent, sibling order, missing) - verify-report: findings, tallies, exit codes, console table, JSON report - writeJsonSummary accepts any report object PROD-2552: add `agility verify` command Status guard (bounded 10-minute wait in preview and fetch mode, re-pull once if an update lands during the pull), full pull of both instances, per-locale checks, console + JSON report. Exit 0 pass, 1 differences, 2 could not verify. Accepts only existing flags via a dedicated verifyArgs set; never writes to an instance or to the mapping files. Also satisfies PROD-2549. PROD-2552: document the verify command in the README The required-field check (validate-required-fields.ts) is PROD-2542's (#234); this branch builds on it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…her the source nor the target PROD-2773: warn about asset URLs into a CDN container owned by neither instance Content synced before the PROD-915 fix kept the upstream instance's CDN URLs, so a source can reference a third instance's container (e.g. cdn-usa2.aglty.io/ upstream-qa/...). The asset mapping cannot map those, so they passed through silently: image/file fields arrived empty on the target and rich-text links kept pointing at the other instance. The content pusher now scans each locale's syncable items (also in --preflight and for unchanged items) and reports every foreign CDN URL once per run, with the items/fields/locales using it. Reporting only: payloads, counts, success and exit codes are unchanged. - foreign-cdn-detector: pure URL extraction (aglty.io, azurewebsites origin, cdn*.agilitycms.com, learned custom edge hosts; JSON-escaped, &, query and percent-encoded variants) and container-ownership check. Source/target containers come from asset mappings and pulled assets; nothing is reported while either side's container is unknown. - foreign-cdn-report: per-run dedupe and rendering; attachment-field URLs are called out separately from text occurrences. - Surfaces: logger warning on first sighting, end-of-run "Foreign CDN references: N URLs in M items" block, additive --jsonSummary warnings (code "foreignCdnReference", url, container, references), and a preflight warnings section that does not affect totals or the exit code. Preflight totals now include PROD-2542's "invalid" count; the push test expects it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…puts it in staging A page's zones are shared by all of its locales. When a save in one locale adds, removes or reorders components, the server cuts a new page version and gives every other language a staging row on it (ClearPageContent / ReorderPageContent), so the page drops to Staging in its other locales. --autoPublish only republished pages the run saved in that locale, so the other locale stayed in Staging, and the PROD-2628 refresh then recorded its new version as in sync, so later runs skipped it as up to date. refreshOtherLocaleVersions already re-reads the page in each other locale of the run after a save. It now records the page for republishing in that locale when it was Published on the target when pulled, is Staging now, and is Published on the source (a page left in staging on the source stays in staging). executeAutoPublish adds those pages to that locale's publish list (pages/both), de-duplicated, and updates their mappings as usual. A page whose own save in that locale fails is never republished, whichever order the saves ran in. Without auto-publish of pages, the run lists them as non-blocking "staging" warnings in the console and --jsonSummary. Locales not in the run are not checked: there is no pulled state for them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
DerekAgility
approved these changes
Oct 14, 2026
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.
Why
#235, #236 and #237 were stacked: each one's base was the branch of the PR before it. Each was merged into that base branch instead of
main, so only #234 (PROD-2542) reachedmain.This PR lands the three already-reviewed commits on
main, unchanged:agility verify(PROD-2552: addagility verifyto compare a synced target against its source #235)Please merge with "Rebase and merge" so the three commits stay separate on
main.Verification
main(47ffa7e, which is PROD-2542: validate content against the target model before sending it; harden batch result alignment #234's squash). They applied with no conflicts.tscclean, eslint 0 errors).Next: version bump to 1.1.2-beta.0 in a separate PR, then tag
v1.1.2-beta.0.🤖 Generated with Claude Code