add-bc-contract

Add Contract for inter-BC communication using Provider pattern. Use when one Bounded Context needs to access data from another BC (e.g., Inventory needs Articles from Admin). Creates Contract interface, Provider implementation, and configuration.

16 stars

Best use case

add-bc-contract is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Add Contract for inter-BC communication using Provider pattern. Use when one Bounded Context needs to access data from another BC (e.g., Inventory needs Articles from Admin). Creates Contract interface, Provider implementation, and configuration.

Teams using add-bc-contract should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/add-bc-contract/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/data-ai/add-bc-contract/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/add-bc-contract/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How add-bc-contract Compares

Feature / Agentadd-bc-contractStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Add Contract for inter-BC communication using Provider pattern. Use when one Bounded Context needs to access data from another BC (e.g., Inventory needs Articles from Admin). Creates Contract interface, Provider implementation, and configuration.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Add BC Contract

Create Contract for inter-BC communication using Provider pattern.

---

## When to Use

- BC needs to read data from another BC
- Creating select options from another BC (TwigComponent)
- Exposing domain data to other contexts

---

## Inputs/Outputs

| Input | Example | Output |
|-------|---------|--------|
| provider_bc | Admin | `ProviderBC/Contracts/ContractName.php` |
| consumer_bc | Inventory | `ProviderBC/Adapters/Contracts/ProviderBCContractName.php` |
| contract_name | ArticleProvider | `ProviderBC/Frameworks/config/services.yaml` (updated) |
| methods | ['provide', 'provideAll'] | `ConsumerBC/Frameworks/deptrac.yaml` (updated) |

---

## Process

| Step | File | Action |
|------|------|--------|
| **Contract** | `ProviderBC/Contracts/ContractName.php` | Interface with methods (template: `contract.php.tpl`) |
| **Provider** | `ProviderBC/Adapters/Contracts/ProviderBCContractName.php` | Implementation with Finder (template: `provider.php.tpl`) |
| **Config** | `ProviderBC/Frameworks/config/services.yaml` | Autowire Contract → Provider |
| **Deptrac** | `ConsumerBC/Frameworks/deptrac.yaml` | Allow ProviderBC\Contracts |
| **Validate** | - | `make cs-fixer && make stan && bin/deptrac analyse && make qa` |

---

## Structures

**Contract** (interface in `ProviderBC/Contracts/`):
```php
interface ContractName {
    public function provide(string $uuid): EntityData; // throws
    public function provideAll(?array $ids = null): iterable;
}
```

**Provider** (`readonly`, uses Finder):
```php
final readonly class ProviderBCContractName implements ContractName {
    public function __construct(private EntityFinder $finder) {} // Finder, NOT Repository

    public function provide(string $uuid): EntityData {
        $entity = $this->finder->find($uuid) ?? throw EntityNotFound::fromUuid($uuid);
        return $this->toData($entity);
    }

    public function provideAll(?array $ids = null): iterable {
        $entities = $ids ? $this->finder->findByUuids($ids) : $this->finder->findAll();
        foreach ($entities as $entity) {
            yield $this->toData($entity);
        }
    }

    private function toData(Entity $entity): EntityData { /* convert to DTO */ }
}
```

**Config** (`ProviderBC/Frameworks/config/services.yaml`):
```yaml
ProviderBC\Contracts\ContractName:
    class: ProviderBC\Adapters\Contracts\ProviderBCContractName
```

**Deptrac** (`ConsumerBC/Frameworks/deptrac.yaml`):
```yaml
ConsumerBC\Adapters:
    - ProviderBC\Contracts  # ONLY Contracts, NOT Entities/UseCases
```

**See**: `docs/GLOSSARY.md#contract`, `#provider`, `#data-dto`

---

## Rules

**CRITICAL**:
- Provider uses Finder (NOT Repository) - providers are read-only
- Consumer depends ONLY on Contract interface (never Provider implementation)
- Deptrac allows ONLY `Contracts` namespace (not Entities/UseCases)

**Locations**:
- Contract: `ProviderBC/Contracts/`
- Provider: `ProviderBC/Adapters/Contracts/`
- Exception: `ProviderBC/Contracts/Exception/` if needed
- DTO: `ProviderBC/Contracts/DTO/` if complex data

**Naming**:
- Contract: `{Entity}Provider` (e.g., ArticleProvider)
- Provider: `{BC}{Contract}` (e.g., AdminArticleProvider)

---

## Variants

**Query Provider** (data access):
```php
public function provide(string $uuid): EntityData;
public function provideAll(?array $ids = null): iterable;
```

**TwigComponent Provider** (form select):
```php
/** @return array<string, string> [uuid => label] */
public function getAllForChoice(): array;
```

---

## Templates

- `contract.php.tpl` - Contract interface
- `provider.php.tpl` - Provider implementation

**Location**: `.claude/templates/`

---

## References

- Contract/Provider pattern: `docs/GLOSSARY.md#contract`, `#provider`
- Inter-BC architecture: `docs/architecture.md#inter-bc`
- Detailed guide: `docs/guides/bounded-contexts.md`

Related Skills

contract-review-pro

16
from diegosouzapw/awesome-omni-skill

专业合同审核 Skill,基于《合同审核方法论体系》提供合同类型指引和详细审核服务

u01874-handoff-contracting-for-marketing-and-storytelling

16
from diegosouzapw/awesome-omni-skill

Operate the "Handoff Contracting for marketing and storytelling" capability in production for marketing and storytelling workflows. Use when mission execution explicitly requires this capability and outcomes must be reproducible, policy-gated, and handoff-ready.

Smart Contracts

16
from diegosouzapw/awesome-omni-skill

Smart contracts are self-executing programs on blockchain. This guide covers Solidity basics, contract deployment, interaction, and frontend integration for building decentralized applications with au

Data Contracts

16
from diegosouzapw/awesome-omni-skill

A Data Contract is a formal agreement between a data producer (e.g., a microservice) and a data consumer (e.g., a data platform) that defines the structure, semantics, and quality of data being shared

Contract Testing Pact

16
from diegosouzapw/awesome-omni-skill

Contract testing validates that service consumers and providers agree on request/response expectations. Pact implements consumer-driven contracts (CDC) with shareable pact files and provider verificat

API Contracts Generator

16
from diegosouzapw/awesome-omni-skill

Génère des contrats API cohérents entre Frontend (Next.js) et Backend (NestJS) avec types synchronisés, validation standardisée et error handling uniforme. À utiliser lors de la création d'APIs, DTOs, types frontend/backend, ou quand l'utilisateur mentionne "API", "DTO", "types", "contract", "validation", "frontend-backend", "synchronisation".

api-contracts-and-zod-validation

16
from diegosouzapw/awesome-omni-skill

Generate Zod schemas and TypeScript types for forms, API routes, and Server Actions with runtime validation. Use this skill when creating API contracts, validating request/response payloads, generating form schemas, adding input validation to Server Actions or route handlers, or ensuring type safety across client-server boundaries. Trigger terms include zod, schema, validation, API contract, form validation, type inference, runtime validation, parse, safeParse, input validation, request validation, Server Action validation.

api-contracts-and-validation

16
from diegosouzapw/awesome-omni-skill

Define and validate API contracts using Zod

api-contract-validator

16
from diegosouzapw/awesome-omni-skill

Validates type contracts between TypeScript interfaces and Pydantic models. Detects field mismatches and type inconsistencies. Related: frontend-backend-mapper for endpoint discovery.

api-contract-validation

16
from diegosouzapw/awesome-omni-skill

Detect breaking changes in API contracts (OpenAPI/Swagger specs)

api-contract-testing

16
from diegosouzapw/awesome-omni-skill

Verifies API contracts between services using consumer-driven contracts, schema validation, and tools like Pact. Use when testing microservices communication, preventing breaking changes, or validating OpenAPI specifications.

api-contract-sync

16
from diegosouzapw/awesome-omni-skill

Use this skill when backend API contracts change and frontend types need synchronization. Triggers on: Pydantic model changes, REST endpoint updates, WebSocket message formats, or GraphQL schema modifications. Dynamically detects contract type from context. NOT for unrelated type definitions or internal backend-only changes.