Product Build/Launch Checklists
Use these checklists as the product dashboard for Discussion Bridge for Astro. They are organized around the operating loop:
publish -> sync -> diagnose -> maintain -> recover -> document
Alpha Readiness Checklist
Section titled “Alpha Readiness Checklist”Release-Scope Doctrine
Section titled “Release-Scope Doctrine”- Lock the cumulative Alpha feature/function set recorded by this checklist. After this lock, new work must close an existing promise or gate, fix exercised behavior, or receive explicit approval as a scope change.
- Treat this dashboard/checklist as the cumulative Alpha scope source of truth; new plugin or multi-target gates do not displace prior accepted items, and items remain until Phil explicitly removes them.
- Treat Alpha as nearly feature-complete for the declared product promise; include known central capabilities or narrow the promise honestly.
- Treat Beta primarily as refinement of exercised behavior: usability, compatibility, reliability, performance, packaging, docs, installation, recovery, support, and presentation.
- Keep long-term roadmap, plugin expansion, and Layer 3 ideas outside Alpha when they are not part of the declared product promise.
- Allow Beta feedback to reveal genuinely missing capability without using planned feature deferral as the default Beta strategy.
- Keep all three Alpha software tracks free/open source unless a later explicit decision changes that: the Astro API/package, the optional light Discourse plugin, and public docs/community support. Paid value is implementation labor, handholding, managed hosting/operations, customization, support, and consulting; third-party infrastructure remains operator-paid.
DiscussionBridge.dev Two-Direction Dogfood Gate
Section titled “DiscussionBridge.dev Two-Direction Dogfood Gate”- Implement and review explicit import source selection in
1731547(Code Boss PASS, 72/72):--source-mode discourse-imported|discourse-managed, imported default, rejectedastro-managed, persistentdiscussionSync: false, and per-manifest-entrysourceMode. - Complete the public credential-free dry run for
forum.discussionbridge.devtopic36to/guides/how-to-choose-a-discussion-bridge-source-mode/; verify the Discourse-managed frontmatter and deterministic destination preview. - Complete the credentialed import, exact clean Astro build/deploy, and
canonical live guide/source/discussion verification in apex commit
d68ffc4(Code Boss PASS), deployed 2026-07-23. See the sanitized dogfood evidence record. - Publish an Astro-managed
discussionbridge.devblog post to a public companion discussion onforum.discussionbridge.dev; verify the page, topic, declared connection purpose, comments presentation, and site-to-forum single-writer direction. Live route/blog/every-connection-has-a-job/binds independent topic37. - Select a community wiki/how-to on
forum.discussionbridge.devand deterministically import/refresh it as a durable public guide ondiscussionbridge.dev; live topic36is a category-6 wiki. - For the wiki lane, prove
discussionSourceMode: discourse-managed,discussionSync: false, explicit source provenance, preserved source topic identity, deterministic output, public route, and Astro navigation lane. - Keep the source forum topic as the primary discussion; make comments
behavior explicit and verify that edits originate in the wiki topic while
the site republishes reviewed source without site-to-source writeback. A
deliberate
sync-existing --dry-runskipped with thediscourse-managedno-writeback reason. - State clearly that separate topic reply streams are not merged.
- Use the public outcome: “The site starts conversations. The community develops durable knowledge. The site publishes what the community learns.”
Brutal Current Split
Section titled “Brutal Current Split”Phil/Ops Prerequisites Before Alpha Can Be Public
Section titled “Phil/Ops Prerequisites Before Alpha Can Be Public”-
Provision the operational
forum.citizenactivist.networkprerequisite: DNS/TLS, public target category, and protected credential records are usable for the bounded OBBBA proof. Keep any broader ownership/Cloudflare placement decision in Ops; do not expose protected paths or values. -
Reconfigure Discussion Bridge Cloudflare under the new ownership/account plan: owning account, admin email, DNS, Pages, redirects, Access, Workers, billing boundary, and operator roles.
-
Complete Cloudflare Pages work for
docs.discussionbridge.dev: canonical docs URLs are 200, but rawhttps://docs-discussionbridge-dev.pages.dev/still returns 200. Add and verify a 301 tohttps://docs.discussionbridge.dev/. -
Create live Discourse Alpha Support category.
-
Route
alphasupport@discussionbridge.devinto Discourse. -
Confirm final public support links after the live support category and email route exist.
Codex/Product Work That Can Continue Now
Section titled “Codex/Product Work That Can Continue Now”- Tighten CLI/help text and friendly validation messages.
- Build and publish the paired Human Manual and Machine Manual in the repository and generated Starlight docs site.
- Route the paired manuals through Manual Boss review for consistency, presentation, secrets, usability, accessibility, screenshot/video placeholders, and public/private boundaries; resolve Alpha-blocking findings before public release.
- Add or confirm
check-discourseexamples for global diagnostics key, granular publishing key, and explicit configured limits. - Finish docs link wiring once Phil/Ops prerequisites produce final URLs.
- Prepare the repeatable live smoke-pass script/checklist so it is ready when Cloudflare/support wiring is done.
- Keep polishing sync/recovery documentation without adding major feature scope.
Publish
Section titled “Publish”- Confirm CLI names/help are clear:
publish-new,sync-existing,publish-and-sync,import-existing, andcheck-discourse. - Decide whether to add a configurable topic title template or prefix, such as
Discussion: {title}, for sites with short Astro titles. - Keep local preflight validation working for dry runs and restricted keys.
- Confirm title/body/tag preflight messages are friendly enough for non-package authors.
- Confirm generated first-post body is reader-facing and does not expose implementation labels.
- Finalize Alpha support and feedback channel model: GitHub Issues for formal product work, GitHub Discussions for repo-bound design/implementation discussion, Discourse Alpha Support plus
alphasupport@discussionbridge.devfor support discovery/community memory, and cross-links when support becomes tracked work. - Create live Discourse Alpha Support category, route
alphasupport@discussionbridge.devinto Discourse, and wire final channel links into README, docs, package metadata, demo pages, and release notes. Phil/Ops owns the live category and email route; Codex owns final link wiring after those exist. - Product docs URL decided: use
docs.discussionbridge.devwith Starlight. Keepdiscussionbridge.dev/docsonly as a redirect or fallback if needed. - Deploy the Starlight docs site source for
docs.discussionbridge.devinto the repo undersites/docs, generated from repositorydocs/*.md. - Reconfigure Discussion Bridge Cloudflare under the new ownership/account plan before Alpha: owning account, admin email, DNS, Pages, redirects, Access, Workers, billing boundary, and operator roles. Phil/Ops prerequisite.
- Complete Cloudflare Pages work for
docs.discussionbridge.dev: canonical docs URLs are live; configure the rawdocs-discussionbridge-dev.pages.devhostname to return 301 to the custom domain. Phil/Ops prerequisite. - Make
discussionbridge.devlive in a credible public form before showing Alpha outside the working circle. - Add proper attribution, ownership, and licensing notes to docs where appropriate.
- Keep expanding
sync-existingandpublish-and-syncedge-case tests before widening usage beyond the demo. - Cover Astro title drift.
- Cover Discourse topic title drift.
- Cover active discussion target mismatch handling.
- Cover linked Discourse topic missing/unreadable.
- Cover linked topic with no first post.
- Cover Discourse client network failures.
- Cover publish-new offline failures.
- Block duplicate managed topic IDs or duplicate page URLs before Discourse writes.
- Add stronger MDX summary extraction for component-heavy pages.
- Document when to use
discussionSummary. - Document and test the distinction between Astro/template content tags and Discourse
discussionTags. - Run the repeatable live smoke pass before Alpha and before each release candidate. It covers publish/sync; docs, releases, blog, news, and comments demo routes;
simple,full, andfullInteractivecomments modes; full-app embed Discourse settings; andforum.discussionbridge.devcategory, tags, and permissions. - Enforce source modes before Alpha:
import-existingpersistsdiscussionSourceMode: discourse-importedanddiscussionSync: false; sync preflight protectsdiscourse-importedanddiscourse-managedsource targets from writeback.
Import
Section titled “Import”- Add strict explicit manifest input for curated production imports,
preserving caller-supplied topic order and providing validated, atomic
staging/write/rollback behavior (
a646c6b, reviewed package suite 49/49). - Add a category selector that discovers/lists available categories and accepts category ID or an unambiguous slug/name, including subcategories.
- Add deterministic “next in selected category” behavior: oldest Discourse
created_atfirst, with topic ID as the stable tie-breaker. - Add import filters for tags, created-date range, open/closed status, and limit.
- Add optional oldest/newest ordering by Discourse
created_atand natural topic-title ordering for numbered source collections. - Ensure import sequencing never uses
bumped_at, last reply, or latest activity. - Preview discovered candidates before import and prevent already imported topics from being selected again.
- Add optional imported-page hero placement and require non-empty alt text
whenever a hero image is configured (
729d85f, reviewed package suite 38/38); reject missing, empty, whitespace-only, or unpaired values before write.
Diagnose
Section titled “Diagnose”- Confirm minimal Discourse granular scopes needed for existing-topic collision reconciliation.
- Use the two-key model when granular diagnostics/read scopes are available or confirmed.
- Document current fallback: global/admin-capable diagnostics key for setup checks; granular publishing key where it can perform create/update/tag/read actions.
- Add
check-discourseexamples for global diagnostics key, granular publishing key, and explicit configured limits. - Consider reading Discourse title/body/tag constraints from the target instance in
check-discourse.
Maintain
Section titled “Maintain”- Document maintenance sync as a repeatable test: package version,
--dry-run --details, live sync, verify Discourse/Astro/cache. - Add or update demo npm scripts for lane-specific dry runs using
--details. - Decide whether
--detailsshould also apply toimport-existingoutput. - Document the demo build warning:
Entry docs -> 404 was not found. - Prepare and file a Starlight GitHub issue for the stock Starlight
Entry docs -> 404 was not foundfinding; include the likelygetEntry('docs', '404')source,disable404Route: trueconfirmation, and customdocs/404.mdroute-conflict result. - Keep the local package demo dependency pointed at the package directory unless a release-packaging test specifically needs a tarball.
Recover
Section titled “Recover”- Define the explicit repair path for a deleted Discourse topic linked from Astro.
- Define the explicit repair path for a deleted first post.
- Decide whether recovery belongs in a command such as
repair-link,relink-topic, or animport-existing --overwriteworkflow. - Keep automatic recreate disabled unless the user explicitly chooses it.
- Document when to clear Cloudflare cache versus when to treat a sync/deploy as failed.
Document
Section titled “Document”- Add paired entry-point manuals:
docs/HUMAN_MANUAL.mdfor operators anddocs/MACHINE_MANUAL.mdfor exact reusable implementation facts and site-specific runbook generation. - Include the paired manuals in the generated
sites/docsStarlight site and verify both routes build. - Complete Manual Boss Alpha quality review of the paired manuals and record or resolve findings.
- Add paired reusable site-specific Human and Machine Runbook templates that consume settled Machine Manual inputs.
- Create the first paired OBBBA runbooks for
onebigbeautifulbill.usandforum.repealobbba.org, preserving topic434,discourse-imported, anddiscussionSync: falsewhile exposing unresolved implementation inputs. - Review and replace or approve screenshot/video placeholders after Manual Boss confirms usability, accessibility, secret safety, and public/private boundaries.
- Add a concise Alpha setup guide.
- Add a key-management guide.
- Add a comments-display guide covering
simple,full, andfullInteractive. - Add a content-lanes guide for docs, releases, blog, news, and Starlog-style release notes.
- Add a discussion-safe Markdown guide.
- Add troubleshooting entries for title validation, body length, tag limits, duplicate embed URLs, stale Cloudflare cache, missing topic, missing first post, and Discourse offline.
- Finalize support and feedback guide with Alpha channel model.
- Update public support links after the Alpha Support category and email route are live.
- Complete one-time Alpha attribution/ownership/licensing pass across public docs.
- Implement the automated full attribution/licensing gate in
scripts/check-attribution.mjs, backed bydocs/THIRD_PARTY_PROVENANCE.jsonand reviewed khroma 2.1.0 MIT evidence. Package regression proves a fresh checkout regenerates the rendered attribution source before checking it; Code Boss final PASS, package suite 73/73. - Run the bounded docs-scope attribution gate before the readable docs
build. Require the exact distinctions
PASS (docs scope)andnpm package contents: SKIPPED (requires built release candidate). - Obtain Manual Boss semantic attribution/licensing review for the exact
candidate through
b09dbceatop7127eb1+462b3ae. Result:Attribution and Licensing: PASS; reviewed paths and corrections are in the sanitized exact-candidate record. Automated 73/73 and docs 20/21 remain separate results.
Alpha Demo Checklist
Section titled “Alpha Demo Checklist”- Verify the local Starlight demo builds from
examples/starlight-demo. - Verify live Astro and Starlight demos deploy from the canonical
astro-discussion-bridgeexample source trees. - Include demo routes, comments modes, full-app embed settings, and forum category/tag/permission checks in the repeatable live smoke pass before Alpha and every release candidate.
- Test with Cloudflare CDN in place on Discourse. Production field evidence
from
forum.repealobbba.orgconfirms the exercised diagnostics/API, import, reconciliation/source-link,fullInteractive, signed-in reply, source-disclosure, and no-writeback workflows work through this Cloudflare-CDN-backed forum. This is not a guarantee for every CDN/WAF/ cache-rule configuration. - Verify topic creation so pages from different Astro hosts do not collide or create confusing duplicate topics.
- Confirm
embed_urlmaps each Astro page to the correct companion topic across hosts. - Verify public Alpha demo domains use the demo-lane pattern:
demo.discussionbridge.dev,astro.demo.discussionbridge.dev,astrostarlight.demo.discussionbridge.dev,stockstarlight.demo.discussionbridge.dev, and future parallel integration hosts. - Add and build clean stock Starlight control site to compare framework warnings and upgrades.
- Apply demo topic lifecycle policy in Discourse: tagged old/transitional topics
20,21,24, and28ashistorical-reference; reserve deletion/permanent deletion for true mistakes or sensitive/unsafe content. - Retire or clearly mark transitional demo deploy copies under
discussionbridge.devafter public demo projects build fromastro-discussion-bridge.
Release/Upgrade Checklist
Section titled “Release/Upgrade Checklist”- Record the Code Boss pass/fail result against the exact release candidate; complete all blocking edits and obtain re-review where required before Product Boss approval.
- Confirm Bridge Boss technical verification and Manual Boss quality review are complete before Product Boss approval.
- For every Alpha, Beta, release candidate, patch, and Current release, confirm the Human and Machine Manuals are ready for the exact release; treat this as a release blocker.
- Record Product Boss documentation sign-off for every release before publishing; code completion alone is not release readiness.
- Record separate Product Boss release approval for every release, covering intended scope, operator readiness, known limitations, and the coherent release package; this does not replace Bridge Boss technical verification or Manual Boss quality review.
- Maintain an Astro compatibility matrix for Astro 6 and 7.
- Test demo installs after Astro core and official integration releases, especially
@astrojs/cloudflare. - Add a
doctororcheck-upgradecommand. - Document the recommended upgrade order.
- Keep Starlight optional.
- Before any Alpha tag/release, run package tests, local demo build, dry-run CLI checks, and at least one live smoke sync.
- Alpha release channel decided: corresponding GitHub prerelease plus npm
prerelease for the Astro package under dist-tag
alpha, neverlatest. Repo/tarball installs remain development/recovery fallback. - Confirm npm package name/ownership and publisher authority.
- Confirm npm account 2FA or trusted publishing.
- Select the exact reviewed semver prerelease;
0.1.0-alpha.1is an example, not yet the release decision. - Run
npm pack --dry-run, inspect the tarball, and prove it contains only intended package files. - Clean-install from the packed artifact and then the registry
@alphaartifact in both plain Astro and Starlight demos. - Verify exports, public Astro components, CLI bin/help, import/sync, comments modes, source disclosure, and multi-target helpers from the consumer installs.
- Verify LICENSE, README, repository, bugs, and homepage metadata.
- Prove credentials, fixtures, local paths, and unintended files are absent.
- Record Code Boss PASS and Manual Boss installation/docs review for the exact package candidate.
- Retain the exact candidate’s full automated attribution result from
73/73 and its separate Manual Boss semantic
Attribution and Licensing: PASS / FAIL / N/Areview record. - Prove GitHub prerelease and npm artifact correspond to the same commit.
- Verify
npm view, dist-tags, and a clean consumer install by@alpha. - Document rollback, deprecation, and yank response; npm versions are
immutable. Do not run automatic
npm audit fix. - Reserve
latestfor first stable; consciously choosebeta,next, or another documented prerelease channel after Alpha learning. - Confirm release pages, README, package metadata, and demo pages point to the same support and feedback channels after the Alpha Support category and email route are live.
Product Roadmap Checklist
Section titled “Product Roadmap Checklist”- Keep Tier 1 API-only and useful without a Discourse plugin.
- Complete implementation and Code Boss review for Alpha multi-target pages
(
60e41e1, package suite 62/62) and the bounded OBBBA → Citizen Activist live proof (36df91c). - Keep multiple content lanes first-class through config and frontmatter.
- Keep one package with two clear presets:
starlightandastro. - Keep the Starlight preset focused on Starlight conventions.
- Provide multi-Discourse target names, frontmatter, presentation helpers,
and the public
astro-discussion-bridge/targetsexport. - Implement and review accessible Discourse source disclosure (
a9d2097, 68/68), including safe URL selection, multi-target protected-source provenance, canonical Astro/Starlight placement, and public component/ helper/type exports. - Install reviewed artifact
astro-discussion-bridge-0.1.0-alpha-a9d2097-f3fbb73e.tgzinto OBBBA, wire the canonical source notice near the article start, clean-build and deploy adoption commitaa7846d, and verify exactly one correct source notice/link on all five live Title I routes independently from comments. - Add an unobtrusive, configurable comments-boundary credit such as
Discussion connection by Discussion BridgeorDiscourse connection by Discussion Bridge; verify wording, link destination, accessibility, and behavior acrosssimple,full, andfullInteractivemodes. - Consider optional mapping from Astro/template content tags to Discourse topic tags.
- Package the setup/diagnostics/docs workflow for self-serve users and paid assisted setup.
- Use the OBBBA implementation lane as a real-world Discourse-to-Astro
proof path: the reviewed manifest imported/pruned five
forum.repealobbba.orgtopics intoonebigbeautifulbill.us, preserveddiscourse-importedplus no-writeback, and passed clean build, deployment, and canonical live route/topic verification. - Preserve the Citizen Activist structured-document path: Discourse wiki topics as source material, Astro as polished public act/section pages, with status, last-edit context, source topic links, comments, and no accidental writeback.
- Preserve the OBBBA many-to-one topology:
onebigbeautifulbill.us/OBBBA.us,repealobbba.org,repealobbbaact.us, and possiblyrepealobbbapledge.uscan all connect toforum.repealobbba.org, with source direction varying by site or lane. - Explicitly verify selected
onebigbeautifulbill.uspages remain bound toforum.repealobbba.orgas the first edge of the topology matrix. - Use canonical hostname
forum.citizenactivist.networkand public description “A community of activists”; keep Cloudflare/account ownership placement as a separate Ops decision. - Configure that forum as an explicit Discussion Bridge target and select
clearly labeled
onebigbeautifulbill.usproof pages without changing the production OBBBA lanes onforum.repealobbba.org. - Prove the same selected
onebigbeautifulbill.uspage uses an explicit ordered target list forforum.repealobbba.organdforum.citizenactivist.network. - Run target-specific diagnostics and dry-run, build, deploy, and verify each live page/topic binding; prove source-target no-writeback and no unintended writes to any other target. Post-proof interaction also confirmed Citizen Activist topic 9 accepted public post 2 while the Astro page continued to render primary Repeal OBBBA topic 434.
- Add one or two clearly labeled Discussion Bridge demo/credit pages on
onebigbeautifulbill.uswhose companion discussions live onforum.discussionbridge.dev; keep the production OBBBA source lane onforum.repealobbba.organd use the cross-forum pages as part of the bounded many-to-many proof without claiming a general administration plane. - Persist each target’s topic ID/URL, source hash, sync state, sanitized error, and attempt time independently in target-keyed bindings.
- Complete any per-target display-policy model beyond the implemented explicit primary discussion and accessible additional-target links.
- Define primary rendered discussion versus additional linked targets; never silently choose one target.
- Implement “Every connection has a job”: ensure every connection declares its audience/purpose and its visible label/call to action communicates the role (public community, chapter/regional, internal review, subject-matter feedback, advocacy coordination, syndication, or another approved purpose). Never silently merge independent reply streams.
- Review and finalize configuration vocabulary corresponding to the reader
model—candidate
role/purpose,audience,callToAction,description, visibility/context, direction/source ownership, and primary/additional presentation. Do not mark this implemented until design and tests pass. - Prove CAN bidirectional operation with separate page/topic pairs and explicit source ownership; prevent loops by prohibiting the same item from being writable in both directions simultaneously.
- Design the future governed chapter↔national pattern under “Local ownership. National reach.” Include source/chapter identity, parent/child relationship, mapped categories, region/chapter tags, promotion approval, privacy eligibility, attribution/return links, target-specific copy, one-way first-post direction, independent replies, target-specific retry, and moderation ownership. Do not claim current general forum-to-forum orchestration.
- Implement and test recoverable partial success: retain successful bindings, report the failed target, and retry idempotently without duplicate topics.
- Record the completed Alpha proof as one-page multi-forum capability plus multiple-sites-to-one-forum convergence, without claiming the future general many-to-many administration plane. The bounded live OBBBA/CAN proof, independent bindings, retry behavior, source no-writeback, and additional-discussion interaction are recorded in Product Notes and the paired OBBBA runbooks.
- Prove import layers sequentially before Alpha end-stage: no image/no
prune (
747), image only (751), prune only (752), then image plus prune (753); the reviewed four-case manifest passed source comparison, production-shaped build, deployment, and live verification. - Use
repealobbbaact.usas an Alpha end-stage package-installed test for Discourse-source structured pages, source-mode safety, comments rendering, and Cloudflare deployment. - Phil confirmed the optional Discourse plugin vertical slice belongs in cumulative Alpha scope.
- Build an optional
Discussion Bridge for Discoursev0.1 Alpha slice forfullInteractiveMermaid/table rendering parity plus the architecture/test baseline for later control-plane work. Keep Tier 1 API-only and fully usable without plugin installation. - On CAN, evaluate/install the existing Discourse Mermaid theme component as the immediate normal-topic baseline, then build the bounded optional plugin slice for Mermaid in full-app embeds, table presentation parity, embed-context detection, and tests. Do not make Tier 1 depend on it.
- Correct Mermaid terminology: Discourse Mermaid is the official
theme component documented at Meta topic
218242and repositorydiscourse/discourse-mermaid-theme-component, never the Discussion Bridge plugin. - Choose explicitly among the existing official theme component, a fork/extension of that theme component, the separate optional Discussion Bridge for Discourse plugin, or an upstream Discourse change for full-app-embed parity.
- Build the plugin as a separate Boss-routed product/repository; prove it is installable and removable with rollback docs on supported stock/current Discourse, has no ordinary-topic regression, and passes live CAN full-app embed verification. npm Alpha decisions here apply to the Astro package, not Discourse plugin installation.
- Keep the full control plane, post-as-user, PM automation, and general many-to-many management out of plugin v0.1 unless separately approved.
- Use logical/workspace path
DiscussionBridge/plugins/discourse-discussion-bridgefor the proposed plugin; leave physical GitHub repo naming/placement to Boss/folder review. - Implement and document preferred request actor controls:
--post-as,DISCOURSE_POST_AS, and lane/defaultpostAs/postAsEnv, with legacy API-username controls as fallbacks and the resolved actor sent asApi-Username. A real CLI execution regression covers--post-asand dry-run actor output. Package suite 78/78. - Document independent Discourse key User Level and Scope behavior:
All Usersmay act for suppliedApi-Username;Single Useris bound to its selected user; Scope controls endpoints separately. - Create and inventory
special-adminon each connected forum; verify separately assigned admin/category/API authority because group membership grants none. - Finalize and availability-check collision-safe role+origin identities.
Current candidates:
editorbridgeforum/ Discussion Bridge Forum Editor andeditorcanforum/ CAN Forum Editor. Preserveobbba-bot. - Complete topic-36 editor-ownership acceptance: transfer first-post
ownership from
discourseadmin, edit as the selected editor, overwrite refresh the Discourse-managed guide, build/deploy/live verify, and prove no Astro writeback. - Persist Discourse first-post author username/name during import and explicit overwrite refresh; render safe same-forum source-author profile attribution while preserving the forum’s subfolder base, source mode, no-writeback, and topic ID.
- Design an explicit existing-topic owner-transfer operation separately
from
postAsand normal sync; neither may silently change ownership. - Document category authority: configured categories are authoritative for Astro-managed topics and sync corrects drift; absent configuration preserves manual placement; Discourse-source categories are protected; target categories are independent.
- Design future integration lanes for Statamic and other frameworks.