Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Angular Rxjs Observable Contracts

ASecurity

Designs Angular reactive contracts that expose readonly Observables instead of mutable arrays, public Subjects, writable signals, or copied subscription state.

4 stars
0 votes
0 copies
0 views
Added 10/2/2026
developmenttypescriptgoreactangularapi

Works with

api

Security Analysis

A100/100

Scanned 10/2/2026

$npx -y skills add janpereira-dev/ngAutoPilot --skill angular--rxjs--observable-contracts --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Angular Rxjs Observable Contracts?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Angular  Rxjs  Observable Contracts
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/janpereira-dev-angular-rxjs-observable-contracts/badge)](https://www.skillsdirectory.com/skills/janpereira-dev-angular-rxjs-observable-contracts)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
Files
SKILL.md
---
id: angular.rxjs.observable-contracts
name: Angular Observable Contracts
description: >
  Designs Angular reactive contracts that expose readonly Observables instead of mutable arrays, public Subjects, writable signals, or copied subscription state.
stack:
  - Angular
  - TypeScript
  - RxJS
category: rxjs
status: stable
version: 0.10.0
owner: NgAutoPilot
triggers:
  - Observable as contract
  - expose streams
  - public BehaviorSubject
  - readonly Observable
  - mutable state exposure
  - Angular state service
compatibility:
  angular:
    min: "2"
    signalsFrom: "16"
---

# Angular Observable Contracts

## Purpose

Use this skill to expose reactive state safely through readonly Observables. The goal is to prevent external mutation, reduce manual subscription state, and create stable contracts between services, facades, and components.

## When to Use

Use this skill when:

- A service exposes `Subject` or `BehaviorSubject` publicly.
- Components manually copy Observable emissions into arrays or booleans.
- A state service exposes mutable internals.
- A facade needs a stable public contract.
- Multiple consumers compose the same state.
- A shared library needs a version-compatible reactive API.

## Do

Expose readonly Observable contracts:

```ts
@Injectable()
export class UserStateService {
  private readonly usersSubject = new BehaviorSubject<readonly User[]>([]);

  readonly users$: Observable<readonly User[]> =
    this.usersSubject.asObservable();

  setUsers(users: readonly User[]): void {
    this.usersSubject.next(users);
  }
}
```

Expose loading and error state explicitly:

```ts
readonly loading$: Observable<boolean> = this.loadingSubject.asObservable();
readonly error$: Observable<unknown | null> = this.errorSubject.asObservable();
```

Use `async` in templates when the value is only rendered:

```html
<app-user-list [users]="users$ | async" />
```

For Angular 16+ local signal state, expose readonly signals:

```ts
private readonly usersSignal = signal<readonly User[]>([]);
readonly users = this.usersSignal.asReadonly();
```

Keep Observables for async flows that need cancellation, retries, composition, or multiple emissions over time.

Specify the temporal contract as well as the emitted type: when input takes effect, whether duplicate values trigger work, which overlapping response may survive, and whether an error completes the stream or allows another command. Keep empty, loading, and failure states distinguishable when consumers depend on that distinction.

## Do Not

Avoid exposing writable subjects:

```ts
usersSubject = new BehaviorSubject<User[]>([]);
```

Avoid public writable signals from state services:

```ts
readonly users = signal<User[]>([]);
```

Avoid copying stream values into mutable component fields unless imperative integration requires it:

```ts
this.userService.users$.subscribe((users) => {
  this.users = users;
});
```

Avoid exposing API DTO streams directly to reusable UI components when a view model contract would be safer.

## Review Checklist

- [ ] Subjects are private.
- [ ] Public streams are readonly Observables.
- [ ] Writable signals are not exposed from state services.
- [ ] Components use `async` for template-only Observable values when practical.
- [ ] Commands update state through explicit methods.
- [ ] Error and loading states are part of the contract when relevant.
- [ ] DTO, domain, and view model boundaries are clear.
- [ ] Shared contracts remain compatible with target Angular versions.
- [ ] Tests cover emission timing, obsolete work, and post-error behavior where the contract requires them.

## Expected Output

1. Find mutable public reactive state.
2. Replace public subjects with readonly Observable contracts.
3. Preserve update methods as the only mutation path.
4. Keep async flows as Observables unless a Signal is clearly appropriate.
5. Add tests that verify emissions and protect against external mutation.

Attribution

janpereira-devjanpereira-dev
View sourceSee grades on GitHubMore from janpereira-dev →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Clean Code

Pragmatic coding standards - concise, direct, no over-engineering, no unnecessary comments

304955 votes

Browser Extension Developer

Use this skill when developing or maintaining browser extension code in the `browser/` directory, including Chrome/Firefox/Edge compatibility, content scripts, background scripts, or i18n updates.

286712 votes

Seo Optimizer

SEO optimization with keyword analysis, readability assessment, technical validation, content quality. Use for search rankings, blog posts, content audits, or encountering keyword density, readability scores, meta tags, schema markup errors.

2222 votes

Google Official Seo Guide

Official Google SEO guide covering search optimization, best practices, Search Console, crawling, indexing, and improving website search visibility based on official Google documentation

1862 votes

Writing Plans

Use when you have a spec or requirements for a multi-step task, before touching code

2927051 votes
View all in development →