Install
$ agentstack add skill-nearform-unwind-uw-analyze-domain ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Analyzing Domain Model
Output: docs/unwind/layers/domain-model/ (folder with index.md + section files)
Principles: See analysis-principles.md - completeness, machine-readable, link to source, no commentary, incremental writes.
Output Structure
docs/unwind/layers/domain-model/
├── index.md # Overview, entity count, links to sections
├── entities.md # All entity definitions
├── value-objects.md # Value objects, embeddables
├── enums.md # All enum/union types
└── validation.md # Validation rules, constraints, state machines
For large codebases (20+ entities), split by aggregate/domain:
docs/unwind/layers/domain-model/
├── index.md
├── users-aggregate.md
├── orders-aggregate.md
└── ...
Process (Incremental Writes)
Step 1: Setup
mkdir -p docs/unwind/layers/domain-model/
Write initial index.md:
# Domain Model
## Sections
- [Entities](entities.md) - _pending_
- [Value Objects](value-objects.md) - _pending_
- [Enums](enums.md) - _pending_
- [Validation](validation.md) - _pending_
## Summary
_Analysis in progress..._
Step 2: Analyze and write entities.md
- Find all entity classes
- Include actual class definitions with annotations
- Write
entities.mdimmediately - Update
index.md
Step 3: Analyze and write value-objects.md
- Find embeddables, value objects
- Write
value-objects.mdimmediately - Update
index.md
Step 4: Analyze and write enums.md
- Find all enum/union types
- Document all values
- Write
enums.mdimmediately - Update
index.md
Step 5: Analyze and write validation.md
- Extract validation logic, state machines
- Write
validation.mdimmediately - Update
index.md
Step 6: Finalize index.md Update with final counts and summary
Output Format
# Domain Model
## Entities
### User
[User.java](https://github.com/owner/repo/blob/main/src/domain/User.java)
```java
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true)
private String email;
@Enumerated(EnumType.STRING)
private UserStatus status = UserStatus.ACTIVE;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List orders = new ArrayList<>();
public void suspend() {
if (this.status == UserStatus.DELETED) {
throw new IllegalStateException("Cannot suspend deleted user");
}
this.status = UserStatus.SUSPENDED;
}
}
[Continue for ALL entities...]
Value Objects
Money
@Embeddable
public class Money {
private BigDecimal amount;
@Enumerated(EnumType.STRING)
private Currency currency;
public Money add(Money other) {
if (!this.currency.equals(other.currency)) {
throw new IllegalArgumentException("Currency mismatch");
}
return new Money(this.amount.add(other.amount), this.currency);
}
}
Enums
UserStatus
public enum UserStatus {
ACTIVE, SUSPENDED, DELETED
}
State Machines
Order Status Transitions
stateDiagram-v2
[*] --> DRAFT
DRAFT --> SUBMITTED: submit()
SUBMITTED --> PAID: markPaid()
SUBMITTED --> CANCELLED: cancel()
PAID --> SHIPPED: ship()
SHIPPED --> DELIVERED: deliver()
Source: Order.java:78-95
Unknowns
- [List anything unclear]
## Additional Requirements
### Validation Constraint Tables [MUST]
For each validation schema, create a constraint table:
```markdown
### Position Validation [MUST]
| Field | Type | Min | Max | Required | Default | Notes |
|-------|------|-----|-----|----------|---------|-------|
| name | string | 1 | 200 | yes | - | |
| fteBasis | number | 0 | 2 | yes | 1.0 | Full-time equivalent |
| capexPerc | number | 0 | 100 | yes | 0 | Percentage |
| allocation | number | 0 | 100 | yes | 100 | Percentage |
**Source:** `src/validation/positions.ts`
Enum Value Documentation [MUST]
Document ALL enum/union type values:
### Position Type Enum [MUST]
```typescript
type PositionType = 'standard' | 'acting' | 'interim' | 'vacant'
| Value | Description | |-------|-------------| | standard | Permanent position | | acting | Temporary assignment | | interim | Short-term coverage | | vacant | Unfilled position |
### Permission Matrix [MUST]
Document role-permission mappings:
```markdown
### Permission Matrix [MUST]
| Resource | owner | admin | manager | member |
|----------|-------|-------|---------|--------|
| Organisation | manage | read | read | read |
| Employee | manage | manage | manage | read |
| Budget | manage | manage | read | - |
| Rate | manage | manage | read | - |
Self-Reference Rules [MUST]
Document any self-referential constraints:
### Relationship Constraints [MUST]
- Position cannot report to itself: `fromPositionId !== toPositionId`
- End date must be after start date: `endDate > startDate`
Mandatory Tagging
Every entity, enum, and validation rule must have a [MUST], [SHOULD], or [DON'T] tag in its heading.
Default categorizations for domain model:
- [MUST]: Entities, validation rules, enums, business constraints
- [SHOULD]: DTOs, mappers, utility types
- [DON'T]: Framework-specific decorators, ORM annotations
Example:
### User entity [MUST]
### UserStatus enum [MUST]
### EmailValidator [MUST]
### UserDTO [SHOULD]
See analysis-principles.md section 9 for full tagging rules.
Refresh Mode
If docs/unwind/layers/domain-model/ exists, compare current state and add ## Changes Since Last Review section to index.md.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: nearform
- Source: nearform/unwind
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.