@typeroll/mcp-server 0.45.77 → 0.45.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/bundled-content.js +29 -8
  2. package/dist/server.js +1 -1
  3. package/dist/tools/deploy.js +2 -1
  4. package/dist/tools/domain.js +3 -3
  5. package/dist/tools/media.js +1 -1
  6. package/dist/tools/migration.js +4 -2
  7. package/dist/tools/pages.js +1 -1
  8. package/dist/tools/preview.js +1 -1
  9. package/dist/tools/settings.js +9 -2
  10. package/dist/tools/working-copy.js +1 -1
  11. package/dist/version.js +1 -1
  12. package/dist/workspace.js +7 -6
  13. package/package.json +2 -2
  14. package/skills/tr-brand.md +43 -7
  15. package/skills/tr-header-footer.md +95 -41
  16. package/skills/tr-migrate-wp.md +77 -6
  17. package/skills/tr-migration-evidence.md +3 -1
  18. package/skills/tr-new-site.md +42 -8
  19. package/skills/tr-starter-design.md +36 -0
  20. package/workspace-templates/qa/checklist.md +52 -0
  21. package/workspace-templates/qa/typeroll-platform-feedback.md +11 -0
  22. package/workspace-templates/scripts/README.md +111 -0
  23. package/workspace-templates/scripts/typeroll/browser.cjs +50 -0
  24. package/workspace-templates/scripts/typeroll/call.py +12 -0
  25. package/workspace-templates/scripts/typeroll/capture_text.cjs +17 -0
  26. package/workspace-templates/scripts/typeroll/card-stacking-check.cjs +27 -0
  27. package/workspace-templates/scripts/typeroll/check_assets.py +72 -0
  28. package/workspace-templates/scripts/typeroll/check_unsaved.py +13 -0
  29. package/workspace-templates/scripts/typeroll/check_url_parity.py +74 -0
  30. package/workspace-templates/scripts/typeroll/color_tokens.py +81 -0
  31. package/workspace-templates/scripts/typeroll/compare_text.py +59 -0
  32. package/workspace-templates/scripts/typeroll/contact_sheet.py +20 -0
  33. package/workspace-templates/scripts/typeroll/layout_trace.cjs +33 -0
  34. package/workspace-templates/scripts/typeroll/prepare_image.py +64 -0
  35. package/workspace-templates/scripts/typeroll/shoot_hosted.cjs +26 -0
  36. package/workspace-templates/scripts/typeroll/shootframe.cjs +16 -0
  37. package/workspace-templates/scripts/typeroll/sweep_blocks.example.py +23 -0
  38. package/workspace-templates/scripts/typeroll/trlib.py +212 -0
  39. package/workspace-templates/workflows/design.md +65 -0
  40. package/workspace-templates/workflows/migration.md +94 -0
  41. package/workspace-templates/workflows/new-site.md +7 -0
  42. package/workspace-templates/workflows/source-media.md +50 -0
@@ -33,3 +33,97 @@ Track import, block reconstruction, separate text/design review, candidate
33
33
  publication and domain cutover as separate milestones. Import completion is not
34
34
  launch approval. All four text/design combinations use the same block hierarchy
35
35
  and URL continuity contract. Planning choices are not migration API fields.
36
+
37
+ ## Repeatable reconstruction and acceptance
38
+
39
+ Read workflows/design.md and scripts/README.md. First check whether public
40
+ WordPress REST + HTML covers the source; use tr-migrate-wp's access decision
41
+ table before asking for a helper plugin. Inventory both Pages and posts plus
42
+ internal links and known old slugs. A sitemap alone is not complete.
43
+
44
+ Discard HTML comments before extracting text, resolve relative links against
45
+ the source, and keep an explicit old URL map. Do not redirect deleted content
46
+ to the home page merely to get a 200. Preserve/renew text and design separately.
47
+ Use capture_text.cjs + compare_text.py for preserved text with explicit selectors.
48
+
49
+ Before every authorized test deployment run check_unsaved.py (Pages and partials).
50
+ Deploy saved content to the agreed protected test host, then run check_url_parity.py,
51
+ check_assets.py and shoot_hosted.cjs. Check whole-card targets with
52
+ card-stacking-check.cjs and inspect actual desktop/mobile screenshots. Record a
53
+ QA round and platform findings. Review on the owner's phone when possible.
54
+ Domain preparation/cutover and production indexing follow their own explicit
55
+ approval scope and the platform's current guided flow; do not bypass readiness.
56
+ Do not request a second approval for a step the owner has already authorized.
57
+
58
+
59
+ ## Native controls and publication checks
60
+
61
+ On Core 0.2.103 / MCP 0.45.79 or later, discover the actual block schemas first.
62
+ Use column `content_gap_px`, responsive section `padding_y`, heading-role
63
+ `space_before`/`space_after`, hero focal/fit/text-position fields and image
64
+ `never_upscale` instead of one-off CSS. Responsive block keys start at `mobile`,
65
+ not `base`. For vertical-only spacing, do not reset horizontal padding with CSS
66
+ shorthand. Optional `click_to_load` videos need an explicit poster if desired;
67
+ choose a first-party poster to avoid early provider requests.
68
+
69
+ `import_sitemap` can include public WordPress REST (`include_wordpress: true`)
70
+ and a bounded crawl (`crawl_pages: 10`). Record truncation and access warnings.
71
+ A `matched_draft` URL is accounted for in the CMS but not ready for launch.
72
+ Resolve `unpublished_targets`, redirect loops/chains and actual deployed parity.
73
+
74
+ A deploy with working copies returns `unsaved_content`; review the targets.
75
+ Save explicitly or obtain approval to publish saved content only using
76
+ `allow_unsaved: true`. Never silently save somebody else's work.
77
+
78
+ Keep the bound Organization/Site/Version explicit. A site API key cannot switch
79
+ to another Organization: use an authorized OAuth connection or a separate key.
80
+ Read the schema for target envelopes and pagination; do not guess aliases.
81
+ Page/partial block writes update working copies; check `saved` and use
82
+ `commit_working_copy` with `target: {kind: "page"|"partial", id: "..."}`.
83
+ Page templates save immediately and do not have working copies. REST read envelopes and
84
+ MCP tool text are different layers; `call.py` returns the decoded tool result.
85
+
86
+ ## Design token check
87
+
88
+ Follow workflows/design.md for palette/font roles and named scales. Run
89
+ `lint_design_tokens` before launch and after major design changes. Review exact
90
+ colour replacements with scripts/typeroll/color_tokens.py; record deliberate
91
+ exceptions in decisions.md. Preserve text independently from design changes.
92
+
93
+ ## Source retirement, analytics and domain preparation
94
+
95
+ Before old hosting is retired, follow workflows/source-media.md: preserve unused
96
+ and print originals in a private archive with independently verified checksums.
97
+ Only approved web assets enter the CMS. Use ICC-aware conversion for CMYK/TIFF.
98
+
99
+ Enable Analytics through the authorized Typeroll API/MCP (`update_app` or the
100
+ Organization analytics tools), then read back settings and verify the beacon and
101
+ cookies on the actual artifact. Resolve missing provider scopes through the
102
+ normal approval flow. A separately authorized provider-side setup with a supplied
103
+ beacon token is an alternative, not a way to bypass Organization permissions.
104
+ Never expose a provider API token as a public beacon token.
105
+
106
+ From Core 0.2.106, saving future hosts does not redirect normal publication.
107
+ Keep using `trigger_deploy` to update and review the current/temporary address.
108
+ Read `next_publication` in `read_publishing_domains` for the destination.
109
+ Shortly before DNS changes, deliberately call `prepare_publishing_domain_change`
110
+ with the current revision. It prepares the last successful public snapshot,
111
+ not later unpublished CMS edits. Review its frozen indexing settings and DNS
112
+ requirements, then approve traffic separately. If another normal publication
113
+ succeeds while the candidate waits, prepare again: an outdated snapshot cannot
114
+ replace newer published content. There is no need to clear saved future hosts.
115
+ To correct candidate indexing, save the intended setting, publish normally, and
116
+ prepare again. Temporary-host protection keeps the review address noindex even
117
+ when the published authored setting permits indexing on the future host.
118
+ Keep MX/SPF and unrelated DNS unchanged; review any validation window and obtain
119
+ the already-defined traffic-switch authorization.
120
+
121
+ ## Owner-supplied facts and photos
122
+
123
+ Record owner statements, source and confirmation date. Preserve approved copy
124
+ under `text: preserve`; do not silently delete dates/prices or rewrite it into
125
+ "timeless" language. Under `text: renew`, propose removing stale details or using
126
+ recurring-event wording only when a source supports recurrence. Flag uncertain
127
+ facts for review or keep new Pages in draft; missing evidence does not prove that
128
+ an event stopped. Link to the actual organiser when relevant. Upload approved
129
+ photos with SHA-256 verification and review focal points at mobile/desktop widths.
@@ -15,3 +15,10 @@ Do not publish, change DNS or send messages without explicit approval.
15
15
 
16
16
  The CMS owns current content and settings. The repository owns the brief, rules,
17
17
  decisions and evidence. Load recipes when needed, not the whole manual.
18
+
19
+ ## Design token check
20
+
21
+ Follow workflows/design.md for palette/font roles and named scales. Run
22
+ `lint_design_tokens` before launch and after major design changes. Review exact
23
+ colour replacements with scripts/typeroll/color_tokens.py; record deliberate
24
+ exceptions in decisions.md. Preserve text independently from design changes.
@@ -0,0 +1,50 @@
1
+ # Preserve source media before retirement
2
+
3
+ This is a separate owner-approved archive, not an import of every old file into
4
+ the CMS. Do not delete source files or cancel old hosting as part of this routine.
5
+
6
+ 1. Inventory originals and downloads from the source API/export, including files
7
+ absent from published pages. Include drafts, private records and historical
8
+ attachments when authorized. A public sitemap or REST response cannot prove
9
+ the library is complete. Keep the export under ignored `sources/private/`.
10
+ 2. Compare with the new site's references, including templates, partials and
11
+ retained URLs. Record used, unused and uncertain files. "Unused" is not an
12
+ instruction to delete. Preserve print originals even when a web derivative exists.
13
+ 3. Agree a private archive destination, its owning account, retention and access.
14
+ Verify account/bucket identity and that public bucket/custom-domain access is
15
+ disabled. Use the owner's credentials through their secret manager; never put
16
+ credentials in scripts or manifests. Do not provision or expose a bucket silently.
17
+ 4. Copy with bounded concurrency and bounded reads, stream large files and use
18
+ resumable transfers when supported. Preserve a collision-safe key derived from
19
+ the full source host/path, not just the filename. Never overwrite a different
20
+ object merely because the basename matches.
21
+ 5. Record source URL, destination key, source ID, byte count, SHA-256, media type,
22
+ title/alt/caption, copy time and verification state in a private manifest.
23
+ ETag is not universally MD5 (multipart objects and providers differ). Use a
24
+ documented checksum API or stream the destination back and compare SHA-256
25
+ and size. Metadata claiming a hash is not proof of the uploaded bytes.
26
+ 6. Resume only verified matches; report every unavailable source and hash conflict.
27
+ Verify a restore from the archive, including a large file. Keep an independent
28
+ private copy of the manifest. The owner reviews completeness and grants a
29
+ separate old-host retirement decision. This archive does not preserve old
30
+ public URLs by itself: keep URL parity/redirect acceptance separate.
31
+
32
+ ## Prepare print images for the web
33
+
34
+ Use `scripts/typeroll/prepare_image.py` for a reviewed local TIFF or other original.
35
+ Install Pillow with ImageCms in an isolated environment. It applies EXIF
36
+ orientation, converts through the embedded (or explicitly supplied) ICC profile
37
+ to sRGB, embeds the sRGB profile, strips source EXIF metadata and writes a new
38
+ JPEG. It never changes the original, uploads files or edits a Page.
39
+
40
+ ```sh
41
+ python3 scripts/typeroll/prepare_image.py sources/private/original.tif sources/private/web.jpg
42
+ ```
43
+
44
+ CMYK without the correct profile fails; obtain the actual source profile instead
45
+ of guessing. `--source-profile sources/private/original.icc` supplies it.
46
+ Unprofiled RGB/gray requires an explicit `--assume-srgb` decision. Multi-page,
47
+ animated and transparent images require a separate reviewed workflow. Compare
48
+ colour, subject framing and sharpness visually before upload. Upload through the
49
+ normal integrity-checked media flow and choose alt/caption text independently.
50
+ Store the tool's hash report privately; never commit customer images or archives.