agentleFS
rakaarwakyrakaarwaky/agents-arwaky/skills/aes-architecture/aes-taxonomy/SKILL.md

aes-taxonomy

Skill0 starsChanged 26 days agoMITView on GitHub

AES taxonomy VO and domain type scaffolding for Python Rust TS. Use when creating taxonomy files.

We split this skill into the rules it gives an agent

2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Ask these questions in order.

    line 112
  2. Very specific:

    Verify with lint-arwaky-cli scan <layer-path> (HOW-TO § Verify), then wire through aes-contract / aes-capabilities as needed.

    line 133

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

aes-taxonomy

Purpose: Scaffold AES taxonomy files (VO / entity / error / event / constant / request / response) — the stable language of the domain. Audience: The agent creating or validating a taxonomy file. Scope: Python, Rust, and TypeScript taxonomy_<domain>_<suffix> files in the shared domain.

The layer decides which suffix, which imports, and which structure apply. Rules, templates, section contracts, and Verify blocks live in the language HOW-TUs under references/.

LanguageFocusBody ruleHOW-TO
PythonTaxonomy VO / entity / error / event / constantStrict suffix set; no I/O; no upward importsreferences/HOW-TO-MAKE-PYTHON-TAXONOMY.md
RustTaxonomy VO / entity / error / event / constantStrict suffix set; no I/O; no upward importsreferences/HOW-TO-MAKE-RUST-TAXONOMY.md
TypeScriptTaxonomy VO / entity / error / event / constantStrict suffix set; no I/O; no upward importsreferences/HOW-TO-MAKE-TYPESCRIPT-TAXONOMY.md

The layer chain:

taxonomy_*_vo|entity|error|event|constant|request|response (bottom layer) → contract → capabilities → agent → surface → root

Each file answers one layer's job. A method or import in the wrong layer is the defect this skill exists to prevent.


Invariants

Machine-checked rules are enforced by lint-arwaky-cli scan <layer-path> (see each HOW-TO § Verify). Convention-level rules are enforced by reading; the linter covers what it can, and the HOW-TO states explicitly which of the three is the case. Cite the HOW-TO, not this file, when pointing at a rule.

LayerRule
NamingFile taxonomy_<domain>_<suffix> — suffix strictly _vo/_entity/_error/_event/_constant/_request/_response (AES101/AES102).
ImportsTaxonomy + stdlib only — never capabilities, agents, surface, root, contracts; no I/O (AES201).
PrimitivesDomain fields wrap VOs — no raw str/int/float/String/string/number for domain values (AES401).
Error contractEvery _error file exposes error_id + error_code + message. Ids come from per-feature blocks: common 000X, feature 1 1XXX, feature 2 2XXX, …; a feature is a folder with an agent_*_orchestrator file. Ids never change across releases.
ConstructionVOs validate on construction; immutable; constants are pure literals.
RegisterShared barrel: __init__.py / mod.rs / index.ts.
Verifylint-arwaky-cli scan <layer-path> → 0. Language compile is fallback only.

Split details, templates, and Section Contract tables: read the language HOW-TO — do not restate them here.


Placement (AES701)

A taxonomy_* file belongs in the workspace's shared/ folder, beside utility_* and contract_* files:

crates/shared/src/     # Rust
modules/shared/src/     # Python
packages/shared/src/    # TypeScript

The shared folder is locked. Placing taxonomy_* in a feature folder leaves the domain types unreachable from every member, and the barrel that should register them does not exist there. A capabilities_*, agent_*, or surface_* file found inside shared/ is an AES701 violation and must be moved out.


Diagnostic Tree

Ask these questions in order. The first "No" dictates your next action.

  1. Is this a domain value, identity, failure, fact, literal, or an aggregate boundary?
    • Value → _vo; identity → _entity; failure → _error; fact → _event; literal → _constant; inbound aggregate call → _request; outbound aggregate call → _response.
  2. Does the file import anything above taxonomy or touch I/O?
    • Yes → strip the import / move I/O to capabilities or utility.
  3. Are domain fields raw primitives?
    • Yes → wrap each in a VO (AES401).
  4. Is the file registered in the shared barrel?
    • No → register; else the module is dead code.
  5. Does lint-arwaky-cli scan <layer-path> exit 0?
    • No → fix findings, re-scan.

Workflow

  1. Resolve the shared taxonomy dir beside contracts.
  2. Determine type (VO / Entity / Error / Event / Constant / Request / Response). Run lint-arwaky-cli scan <layer-path> — findings are your work list.
  3. Draft the file from the language HOW-TO § Template / § Section Contract.
  4. Register in __init__.py / mod.rs / index.ts.
  5. Verify with lint-arwaky-cli scan <layer-path> (HOW-TO § Verify), then wire through aes-contract / aes-capabilities as needed.

Verification

Machine Checks

lint-arwaky-cli scan <layer-path>   # AES101/102, AES201–205, AES401–406 → must be 0
# Fallback only: language compile (python -c import / cargo check / npx tsc --noEmit)

```text

A pass means naming, imports, primitives, and roles are clean. Structural judgement
(tier choice, block order, helper-vs-utility, "orchestration only") is **manual** — see HOW-TO § Rules.

### Human Checks

A machine pass does not mean the file is right. Layer purpose, structural order, and
"only what this layer may do" still need a reader (HOW-TO § Rules).

---

## Pre-flight Checklist

- [ ] `lint-arwaky-cli scan <layer-path>` exits 0.
- [ ] Every touched HOW-TO's `Verify` block was executed.
- [ ] File registered in `__init__.py` / `mod.rs` / `index.ts`.
- [ ] Language fallback compile clean if the HOW-TO lists it.
- [ ] Related skills considered for the next layer up/down.

---

## Common Mistakes (Anti-Patterns)

The linter covers naming, imports, and primitives. These need a reader (HOW-TO § Rules):

- **Primitives in domain fields**: wrap in a VO (AES401).
- **I/O or upward imports in taxonomy**: forbidden — move to capabilities/utility.
- **Computed "constants"**: pure literals only; computed values go to Utility.
- **Restating HOW-TO rules in SKILL.md**: delegate — this file only routes.

---

## Related Skills

- `aes-contract`
- `aes-utility`
- `aes-capabilities`

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

Reviews can't be read right now.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.