D-05 — Starter Packs for Developers
Scope: Building and activating starter packs — pack anatomy, per-pack composition, cohort billing pinning, Soft-to-LIVE rollout, and an authoring checklist (source: docs/platform-map/jijibora/D-02-PLAYBOOK-DESIGNS.md; source: docs/commercialization/playbooks/dictionary.v1.json; source: datasets/lookups/lookup.finmon.cohort_billing.v1.json) Status: as of 2026-11-09 Blueprint sources: docs/commercialization/playbooks/dictionary.v1.json; datasets/lookups/lookup.finmon.cohort_billing.v1.json; datasets/lookups/lookup.finmon.revenue_split_profile.v1.json; docs/platform-map/jijibora/D-02-PLAYBOOK-DESIGNS.md; Playbook Registry — What You Can Run, Who Runs It, What You Get Back
What this means for you
A pack is data, not code. You declare lookup keys, a scenario pack, CNS types, and consumer wiring in the dictionary, and the runtime resolves them as values (source: docs/commercialization/playbooks/dictionary.v1.json). Every pack proves itself in Soft first: Soft apply is validation plus plan with zero writes. Only a real LIVE gate passing real checks may ever flip a pack to live (source: docs/platform-map/jijibora/D-02-PLAYBOOK-DESIGNS.md). If your change needs a new table, stop and ask. A new community is a new CNS entry, catalog entry, manifest, fragment, and vocabulary — never a schema change (source: docs/jijibora-gtm/02_PRODUCT_STRATIFICATION.md).
Details
1. Pack anatomy — what a pack binds
A dictionary pack entry binds five things (source: docs/commercialization/playbooks/dictionary.v1.json):
| Binding | What it is | Example (claims motor pack) |
|---|---|---|
Lookup keys (lookups) | NATS KV lookup names the runtime reads as values; never read from disk at runtime | lookup.claims.transition_policy.v1, lookup.claims.sod.v1, lookup.claims.threshold.v1, lookup.claims.evidence.v1, lookup.claims.panel.v1, lookup.claims.vas.eligibility.v1, lookup.claims.sla.v1, lookup.claims.outbox_subjects.v1, lookup.camel.intake.maps.v1 (source: docs/commercialization/playbooks/dictionary.v1.json) |
Scenario pack (scenarios) | The scenario definition the orchestration engines execute | scenario.claims.motor_ke.v1 (source: docs/commercialization/playbooks/dictionary.v1.json) |
Taxonomy / CNS types (claim_type, cns_types) | The governed claim and entity types the pack operates on | cns://claim/type/insurance/motor_claim and cns://claim/type/entity/vehicle (source: docs/commercialization/playbooks/dictionary.v1.json) |
Consumer wiring (emits, consumes, camel_routes, kestra, enrichment, security_bound) | Subjects emitted/consumed, Camel routes, Kestra flows, enrichment stages, and the ceiling (publish APF key, subscribe keys, ceiling version) | Emits claims.lifecycle.v1.motor.transition etc.; consumes ingress.camel.extgate.response; ceiling claims.v1 (source: docs/commercialization/playbooks/dictionary.v1.json) |
SKU monetization ref (monetization on the SKU) | The commercial identity: offer package, subscription plan, entitlement policy, billing adapter binding, split profile, creator fee (source: docs/commercialization/playbooks/dictionary.v1.json) | SKU sku.claims.orchestration.pilot.v1 links offer package offer_package.claims.orchestration.pilot.v1 and split profile revenue_split_profile.claims.orchestration.v1 (source: datasets/lookups/lookup.finmon.cohort_billing.v1.json; source: docs/commercialization/playbooks/dictionary.v1.json) |
Rules that apply to every pack: reuse the canonical criteria bus and envelope, do not invent a second bus; declare canonical_subject, canonical_event_type, and pipeline_id on pack lookups; Soft means outbox plus allowlisted subject while LIVE means JetStream plus ceiling (source: S-03 — Jijibora Playbook Registry (stakeholder + developer)).
2. Per-pack composition table
Three packs in one view. Everything here is taken from the dictionary pack entries (source: docs/commercialization/playbooks/dictionary.v1.json).
| Dimension | Maintenance desk (pack.jamii.community.starter.v1) | Financial desk (dues leg of the same starter pack) | Claims orchestration pilot (pack.claims.motor.ke.v1) |
|---|---|---|---|
| Design story | WhatsApp/USSD intake classified, nearest certified vendor proposed, one-tap approval, photo + GPS verification, escrow released only on proof (source: docs/jijibora-gtm/03_ENTRY_POINT_AND_STARTER_PACK.md) | Native ledger (dues, fines, service charges, vendor payables), scheduled reminders and collection, monthly statement plus dashboard (source: docs/jijibora-gtm/03_ENTRY_POINT_AND_STARTER_PACK.md) | FNOL intake → evidence check → panel eligibility → amount/risk quorum bands → SLA clock → settlement, with guarded transitions (source: Playbook Registry — What You Can Run, Who Runs It, What You Get Back) |
| Lookups | lookup.jijibora.community.starter.v1 (source: docs/commercialization/playbooks/dictionary.v1.json) | Same starter lookup family; dues emit is platform.criteria.v1.community.dues.signal (source: docs/commercialization/playbooks/dictionary.v1.json) | 9 claims lookups incl. transition policy, SoD, thresholds, evidence, panel, VAS eligibility, SLA (source: docs/commercialization/playbooks/dictionary.v1.json) |
| Scenario / orchestration | scenario.jijibora.community.starter.v1; Kestra kestra.jijibora.community.starter_dispatch.yaml (source: docs/commercialization/playbooks/dictionary.v1.json) | Shares the starter scenario; consumes commerce.v1.event.invoice. and commerce.v1.event.payment. (source: docs/commercialization/playbooks/dictionary.v1.json) | scenario.claims.motor_ke.v1; Kestra claims.sla_timeout; Camel egress.camel.intake.processing.create + egress.camel.extgate.invoke (source: docs/commercialization/playbooks/dictionary.v1.json) |
| CNS types | Governed by the community.v1 ceiling; no claim-type list is given on this pack entry (source: docs/commercialization/playbooks/dictionary.v1.json) | Same as maintenance desk (shared pack) (source: docs/commercialization/playbooks/dictionary.v1.json) | cns://claim/type/insurance/motor_claim + cns://claim/type/entity/vehicle (source: docs/commercialization/playbooks/dictionary.v1.json) |
| Emits (effect) | platform.criteria.v1.community.work_order, dues signal, subscription/entitlement/billing-usage, split settled, wallet credit (source: docs/commercialization/playbooks/dictionary.v1.json) | Dues signal + the billing subjects (commerce.v1.event.subscription.created, entitlement.delta.v1, platform.criteria.v1.billing.usage, split.v1.settled, wallet.v1.credit) (source: docs/commercialization/playbooks/dictionary.v1.json) | claims.lifecycle.v1.motor.transition / finalize, sla_breached, re_dispatch, escalate (source: docs/commercialization/playbooks/dictionary.v1.json) |
| Guard centre | Wo: work-order create permission + scope membership; resolver cannot approve own close; missing triage evidence refused (source: docs/commercialization/playbooks/dictionary.v1.json; source: Playbook Registry — What You Can Run, Who Runs It, What You Get Back) | Split must sum to exactly 100%; creator share named; changes need two-person approval (source: Playbook Registry — What You Can Run, Who Runs It, What You Get Back) | Creator cannot approve own claim; unattested provider refused; approval bands by amount and risk; SLA timeout records breach + re-dispatch — no verdict invented (source: Playbook Registry — What You Can Run, Who Runs It, What You Get Back; source: docs/commercialization/playbooks/dictionary.v1.json) |
| Maturity | soft_shipped (source: docs/commercialization/playbooks/dictionary.v1.json) | soft_shipped (same pack) (source: docs/commercialization/playbooks/dictionary.v1.json) | soft_shipped; medical/home/gov siblings share the same SKU and shape (source: docs/commercialization/playbooks/dictionary.v1.json) |
Note the honest sibling status: the claims SKU is one umbrella, and motor/medical/home/gov packs are separate pack entries sharing that SKU. The dictionary notes medical/home/gov packs stay spec_only until later dependencies land, while their pack entries carry soft_shipped maturity — flag the discrepancy, do not merge it silently (source: docs/commercialization/playbooks/dictionary.v1.json).
3. Cohort billing_ref model for targeting
- Allowlist, values only. The cohort billing lookup names exactly four pinnable offer-package ids:
offer_package.jamii.starter.v1,offer_package.materra.amcos.pilot.v1,offer_package.bundle.estate_safe.v1,offer_package.claims.orchestration.pilot.v1(source: datasets/lookups/lookup.finmon.cohort_billing.v1.json). - Attach mechanics. A cohort definition pins a
billing_refonto one of those ids. Nothing else is attached — no new billing table per cohort (source: datasets/lookups/lookup.finmon.cohort_billing.v1.json). - Cohort as targeting plane. The cohort decides who is targeted by an offer; it never decides amounts (source: datasets/lookups/lookup.finmon.cohort_billing.v1.json).
- Billing through existing subscriptions. Billing still runs through
commercial_subscriptionfacts plus the billing adapter. Abilling_refnever invents an invoice (source: datasets/lookups/lookup.finmon.cohort_billing.v1.json). - Split shape (skim only). Revenue split profiles are KV-only declarative profiles: parties use the FINMON-03 vocabulary (
platform | pack_creator | parent_scope | community_treasury | reseller | cohort_operator | merchant), basis points must sum to 10,000, and the pack-creator share must match the SKU's creator fee basis points. The profile settles nothing by itself — the FINMON-S7 voyage distributes and the SIKASIE/Malipo plane credits (source: datasets/lookups/lookup.finmon.revenue_split_profile.v1.json). Per-party values in the lookup file are configuration, not a price list, and are not reproduced here.
4. Pack COLD vs LIVE rollout
- COLD = Soft posture (validation, zero writes). Soft apply validates and plans: it checks the digest pin, resolves references, and must write zero live rows. Soft-never-LIVE is a dictionary principle (
soft_billing_ne_live_paid,fail_closed_soft_ne_live) (source: docs/commercialization/playbooks/dictionary.v1.json). - Soft apply validation plan: confirm the soft pin writes the
soft.key withinvent_refuse_live: trueandlive_gate_met: false, confirm the outbox row is written for the pack emit, and confirm the pack's Soft acceptance tests pass (for the starter: Soft ticket end-to-end, outbox row for the work-order emit, and the billing-adapter Soft binding check; for claims: the Soft fixture suite with no verdict invented) (source: docs/commercialization/playbooks/dictionary.v1.json). - Writes: 0. A Soft apply that writes anything live is a failure. If an external service (solver, Camel, Kestra) is down in Soft, refuse honestly instead of inventing a result — Soft gates treat an honest 503 as a pass (source: docs/platform-map/jijibora/D-02-PLAYBOOK-DESIGNS.md).
- LIVE = JetStream + ceiling + real probes. Flip to LIVE only when the live path's real checks pass: the ceiling is enforced, the digest pin matches, and each LIVE probe reports genuinely green. Env flags alone never satisfy
live_gate_met(source: Honesty Invariants). A pack never declares itself live (source: Playbook Registry — What You Can Run, Who Runs It, What You Get Back).
5. Authoring checklist — start from the maintenance desk template
Copy the maintenance desk as your template, then declare the new pack in the dictionary. Check each item before asking for activation:
- [ ] Intents declared. Intake taxonomy (for maintenance: plumbing, electrical, security, facilities) plus location, urgency, and photo extraction are named as intent inputs in the entry (source: docs/jijibora-gtm/03_ENTRY_POINT_AND_STARTER_PACK.md).
- [ ] Gate policy set. Approval gate (manager one-tap / Decision Gate), evidence gate (photo + GPS, inspector signature where required), and payout gate (escrow released only on proof) are refused-by-default gates, not comments (source: docs/jijibora-gtm/03_ENTRY_POINT_AND_STARTER_PACK.md; source: Playbook Registry — What You Can Run, Who Runs It, What You Get Back).
- [ ] SLA / bands / VAS composition added. Claims packs add service-level clocks, amount/risk approval bands, and value-added-service eligibility. All three are lookup-composed (threshold, SLA, and VAS-eligibility lookups) and change without code (source: docs/commercialization/playbooks/dictionary.v1.json; source: Playbook Registry — What You Can Run, Who Runs It, What You Get Back).
- [ ] AI hook allowlists start off-by-default. The assistant proposes and narrates only; hooks are advisory/tracking-only, the core path works with hooks empty, and nothing auto-approves or auto-pays (source: docs/platform-map/jijibora/D-02-PLAYBOOK-DESIGNS.md).
- [ ] Pack is fully bound. Lookup keys, scenario pack, CNS types, consumer wiring, and the SKU monetization ref (offer package + split profile + creator fee matching) are present and consistent (source: docs/commercialization/playbooks/dictionary.v1.json).
- [ ] SoD + anti-self-approval wired. Creator/resolver cannot approve their own item; unattested providers are refused; missing evidence refuses (source: Playbook Registry — What You Can Run, Who Runs It, What You Get Back).
- [ ] Soft-first proof attached. Soft validation plan with writes: 0 has been run, rollback re-pin rehearsed, and the LIVE gate still reports dark (source: docs/platform-map/jijibora/D-02-PLAYBOOK-DESIGNS.md).
- [ ] No schema change smuggled in. New behaviour is CNS entries + interface catalog + manifest + fragments + APF vocabulary + KV lookups only. If a new table is needed, stop and ask (source: docs/jijibora-gtm/02_PRODUCT_STRATIFICATION.md).
Open items / gaps
canonical_subject/canonical_event_type/pipeline_iddeclarations on pack lookups (ESP-02), ontology-normalizer generalization (ESP-03), and Soft ceiling assert (ESP-04) are TODO — design with them in mind, do not assume them live (source: docs/platform-map/jijibora/D-02-PLAYBOOK-DESIGNS.md).- Real money movement gates (timestamp authority, public-safety answering point, billing-adapter production migration) remain OPEN-OPS and need an external party; live money stays Soft (source: docs/platform-map/jijibora/D-02-PLAYBOOK-DESIGNS.md).
- SoR table/shape for several packs beyond
resource/claim/truth_nodeis UNKNOWN in the read set; locate the canonical mapping before building (source: docs/platform-map/jijibora/D-02-PLAYBOOK-DESIGNS.md). - Claims pilot pricing is unpublished and no savings figure may be quoted; do not put price-guide numbers into pack docs as promised prices (source: Playbook Registry — What You Can Run, Who Runs It, What You Get Back).
- Cohort billing is an allowlist of four ids today; adding a fifth package is a lookup change, not a schema change — but it must still pass the digest pin before it takes effect (source: datasets/lookups/lookup.finmon.cohort_billing.v1.json; source: docs/jijibora-gtm/09_GAP_ANALYSIS_AND_RECOMMENDATIONS.md).