Working pattern for enterprise-edition features in Grida — the commercial/hosted concerns (entitlement, BYOD, billing) on top of the OSS core. Anchor for the `GRIDA-EE: <surface>` grep marker, `(ee)` route group, `*-hosted` package suffix, and namespaced `grida_*` schema. Use when adding or touching an EE-only feature, or deciding whether a feature is EE territory. Surface skills (`ee-billing`) are siblings.
72
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Grida is open source. Some features only exist because Grida is also a hosted commercial product — org-level entitlement, custom domains, billing. Those features are EE (enterprise edition): they ship in the same monorepo as the OSS core, but a self-hoster running the codebase without paid infrastructure should be able to identify and strip them.
This skill is the anchor for that boundary. No GRIDA-EE marker
exists in the repo today; this skill establishes the convention.
The test: would this feature still make sense in a single-user, no-billing self-hosted instance? If no, it is EE.
Three surfaces today:
(tenant)
route group, RLS, hostname resolution) is OSS infrastructure — only
the commercial layer on top of it is EE.ee-billing skill (planned) for the workflow.GRIDA-EE markerLike GRIDA-SEC, the boundary is grep-able. Tag every file that
exists only for EE, with the surface as the sub-label:
// GRIDA-EE: entitlement — paid-plan gate
// GRIDA-EE: byod — apex domain verification
// GRIDA-EE: billing — see ee-billingSub-labels are surface names (entitlement / byod / billing),
not ids — there is no central registry like SECURITY.md. The grep
is the index:
grep -rn 'GRIDA-EE' editor crates packagesTag the file header when the entire file is EE; tag inline when only a branch is EE.
Known limitation. The marker captures files that exist only for EE. Shared utilities that EE imports but OSS also uses are not tagged — strip-time discovery has to come from an import audit, not grep. Don't tag OSS modules with EE callers; tag inline at the EE branch instead.
Co-locate by surface so the grep doesn't have to do all the work.
(ee) only when a cluster of
EE-only routes shares chrome/auth distinct from OSS readers
(per naming, route groups encode the
reader on the other side of the screen). For a single EE route
inside an OSS reader's surface, tag inline rather than fragmenting
the existing group. Tenant content rendering stays in (tenant)
— that is the OSS routing substrate, not EE.*-hosted suffix when
the whole package is EE-only. grida_hosted already lives in the
DB schemas as the parallel namespace, and *-hosted is in
naming's established suffix list. Don't mint a parallel *-ee
suffix. Mixed packages stay unsuffixed and tag the EE branches
inside.grida_billing, grida_hosted. Don't bleed EE columns into
OSS-relevant tables. Schema-design rules live in the
database skill / supabase/AGENTS.md;
consult those.When in doubt, default to the EE-named location. The cost of moving later is the cost of every import.
GRIDA-EE: <surface>.(ee) group and *-hosted packages must not break OSS modules.
Where OSS needs to query an EE concept (entitlement, paid plan,
member seats), define the interface in OSS and let EE provide the
implementation — not a direct import of an EE module from an OSS
one.security discipline — see GRIDA-SEC-003
(BYOK fail-closed) for the worked example.EE surfaces that also carry a GRIDA-SEC-<id> tag — the Stripe and
Metronome webhook receivers (GRIDA-SEC-001), the BYOK carve-out
(GRIDA-SEC-003), any path that gates entitlement on a signed
payload — run the security review first;
this pattern is the second pass. Tag the file with both markers.
Precedence is stated here only; if the rule becomes load-bearing, mirror it into
security/SKILL.mdso a reader entering from that side doesn't miss it.
See also: ee-billing (billing workflow — planned),
security (boundary contracts, fail-closed
discipline), naming (the suffix list this
inherits), oss-standards
(public-by-default discipline), database
(schema namespacing).
2e0d276
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.