Beyond the kit
What Subscriby's own suite checks that the kit cannot from outside a package — isolation in both directions, translation parity, skeleton parity — and what review reads for.
The kit runs against a registered connector and reads two things on disk. Three more rules hold every connector installed on Subscriby, enforced by the application's architecture tests rather than the kit, and a reviewer reads for what no test can see.
Isolation, both ways
- A connector imports nothing from the application.
use App\…andApp\…class strings are forbidden in everypackages/subscriby-connector-*/srcdirectory. A third-party package must have zero; the first-party connectors carry a shrinking allow-list that must be empty before the SDK's next major. Your connector talks to the core throughSubscriby\Connector\Core\*and the SDK's value objects only. - The core imports nothing from a connector. No
Subscriby\Connectors\…namespace appears in the application; the core reaches a connector through the registry, the ports and the slots.
The only thing that crosses in either direction is the SDK.
Translation parity
Every string a connector shows on a core page, in a slot, a field label, a resource-kind label, a portal button, a readiness item, has a translation in each of the ten locales Subscriby ships (English, Spanish, French, German, Italian, Portuguese, Turkish, Hindi, Bengali, Sinhala), in the package's own lang/<locale>.json. The application's language parity tests scan package language directories beside the core's and fail on a key present in one locale and missing in another.
Skeleton parity
A slot contribution's placeholder mirrors the loaded layout: the same boxes, the same heights, so a lazy page does not jump when the contribution arrives. The kit checks that a placeholder exists; review checks that it matches.
What review reads for
Passing the kit and the three rules above is the entry ticket. A reviewer then reads the package for what a test cannot judge, against the checklist on Listing and Review:
- credentials never reach a log, an exception message or a view;
- the platform's terms allow what the connector automates;
- the listing describes what the bound ports actually do, and every declared capability works on the platform rather than throwing
UnsupportedByConnector; - repeated grants and revokes are safe,
pacingmatches the platform's published limits, and the classifier maps the platform's rate-limit answer toRateLimitedwith its retry-after; - the ten locales are real translations, not the English copied ten times.
Run what you can locally
MigrationRules::violations() and the Field and MessageAction constructors need no application. ManifestFile::load() validates your manifest exactly as the boot does. Put all four in your package's own tests and most kit failures never reach review.
How is this guide?
Migration rules
The one rule that reads a package's migrations — every table created carries the connector's prefix and no core table is touched — and exactly how the sources are scanned.
From Zero to a Forum Connector
Build a complete Subscriby connector for an imaginary forum with private boards, chapter by chapter — package, manifest, installation, webhooks, messages, boards, portal sign-in, slots, tests, and shipping.