Agent Skills › zai-org/ZCode › architecture-governance

architecture-governance

GitHub

在ZCode仓库中编辑代码前,用于检查模块边界、生成有界上下文并验证架构决策的设计指南与门禁。

.agents/skills/architecture-governance/SKILL.md zai-org/ZCode

Trigger Scenarios

需要修改多个模块的代码 涉及状态所有权变更 存在不明确的接口契约 改变公共API或依赖关系

Install

npx skills add zai-org/ZCode --skill architecture-governance -g -y
More Options

Non-standard path

npx skills add https://github.com/zai-org/ZCode/tree/main/.agents/skills/architecture-governance -g -y

Use without installing

npx skills use zai-org/ZCode@architecture-governance

指定 Agent (Claude Code)

npx skills add zai-org/ZCode --skill architecture-governance -a claude-code -g -y

安装 repo 全部 skill

npx skills add zai-org/ZCode --all -g -y

预览 repo 内 skill

npx skills add zai-org/ZCode --list

SKILL.md

Frontmatter
{
    "name": "architecture-governance",
    "description": "Check ZCode module and layer boundaries for code changes. Generate bounded context for cross-module or ownership changes; skip documentation-only work."
}

Architecture governance

Use this skill before editing code in the ZCode repository. It is a design guide as well as a gate: the goal is to make the intended architecture obvious before code is generated, so the checker confirms a decision instead of discovering it for the first time.

Before writing code

  1. Identify intended files and modules from the task, contracts, and existing tests. Run pnpm architecture:check --changed for the current baseline; a clean diff does not identify files you have not edited yet.
  2. For cross-module changes, state ownership changes, or an unclear contract, run pnpm architecture:context <module-id> (or node .agents/skills/architecture-governance/scripts/context-package.mjs <module-id>). For a local change with a known contract, read only the relevant contract, spec, and affected tests; expand when a concrete dependency or evidence gap requires it.
  3. Apply the spec and regression-evidence rules in AGENTS.md. New behavior needs a spec before implementation; restoring already specified behavior needs regression evidence, not a duplicate feature document. Pure refactors update docs only when contracts change.
  4. For changes to mutable state, asynchronous behavior, or module boundaries, make the relevant design decisions before coding:
    • One owner: name the single component that owns each piece of mutable state. Other layers read through its contract and send commands; they do not keep a second accepted queue, cache, or derived truth.
    • One path: reuse an existing command, service, hook, adapter, or contract when it already expresses the behavior. Do not create a parallel helper for the same responsibility.
    • Explicit boundaries: choose the layer for every new file and the public contract for every cross-module edge. Layers from low to high are contract < domain < app < adapters < ui; a file may import only its own layer or lower ones through their public surface. domain is pure (no IO, no await on the world), app decides side effects through ports, adapters executes them, ui depends only on this module's contract.ts. Quick test: needs await? not domain. Knows it is sqlite / MessagePort / a timer? adapters.
    • Explicit time: for asynchronous or remote behavior, write the event order, owner/lease, idempotency key, stale-result rule, replay/resume boundary, and desktop versus mobile delivery kind before implementation.
    • Bounded context: use the relevant contracts, specs, and tests. A generated reading package helps when dependencies are unclear; do not require a whole-module reading pass for every local edit.
  5. If the change alters a public contract, ownership, or allowed dependency, record that decision in the relevant spec/contract before implementation. Editing files in two modules alone does not require a new document. Use the root task boundary for when to consult the user; ordinary authorized implementation choices proceed autonomously.

Use this compact design sketch while planning stateful changes:

input → single owner → command admission → state transition → contract/event
                  └── persistence / replay / projection are derived from the owner

For remote or streaming changes, make the delivery boundary explicit:

desktop: continuous ── direct live stream ──┐
                                           ├─ same owner and sequence
mobile: replayable ─ snapshot + gap repair ┘

During and after editing

  1. Keep changes inside the declared module and its allowed layer direction. Add a module dependency or public contract before introducing a cross-module edge.
  2. Run pnpm architecture:check --changed after editing. Report new violations separately from baseline violations; include owners and event-order assumptions when affected. Follow the root validation matrix, finish after required checks pass, and expand checks only for new edits, failures, or unresolved risks.

The executable policy is architecture-policy.yaml; keep its detailed rule definitions there. Check the actual managed-module coverage before claiming the gate verifies a boundary: a passing result does not prove unconfigured modules or runtime semantics are correct. Use pnpm architecture:baseline:update only when a reviewed change intentionally changes the accepted legacy baseline. CI never refreshes baseline automatically.

Every new source file under packages/ or apps/ must belong to a managed module (rule unmanaged-new-file). When the change needs a directory that is not managed yet, register it first:

pnpm architecture:adopt <module-id> --root <dir> [--root <dir2>] --layer <domain|app|adapters|ui> [--owner <group>]

adopt infers requires from the real imports, scaffolds the four artifacts if missing, and registers the module in architecture-policy.yaml without touching existing comments. Fill contract.ts and CONTRACT.md before adding behavior; keep the module's public surface to one intent per method.

For a new managed module, provide module.ts, contract.ts, contract.example.ts, and a short CONTRACT.md. App unit tests are retired; do not scaffold contract.test.ts. CLI/CUA keep their own testing rules. Keep runtime and persistence details behind the contract. Prefer typed service calls for one-to-one interactions, commands for state changes, and typed events for broadcast facts.

See policy-schema.md, module-contract.md, and rule-catalog.md when the change needs their detailed guidance. The golden-module fixture is the smallest compliant example. See ai-guidance.md for the anti-patterns this workflow is designed to prevent and the questions an agent must answer before proposing code.

Version History

  • a60ba6a Current 2026-11-02 09:50
  • aac4755 2026-10-18 16:06

    更新到v3.15.1,添加UI插件和内联Gen UI体验,更新桌面、远程工作区和智能体能力,扩展内置插件和回归覆盖。

  • 872ad96 2026-09-21 23:46

Same Skill Collection

.agents/skills/agent-browser/SKILL.md
.agents/skills/ai-elements/SKILL.md
.agents/skills/dep-refs/SKILL.md
.agents/skills/dogfood/SKILL.md
.agents/skills/e2e-case-lifecycle/SKILL.md
.agents/skills/feature-boundary-planner/SKILL.md
.agents/skills/react-best-practices/SKILL.md
.agents/skills/session-management/SKILL.md
.agents/skills/zcode-large-task-fixture/SKILL.md
apps/zcode-cli/.agents/skills/opentui/SKILL.md
apps/zcode-cli/.agents/skills/vercel-react-best-practices/SKILL.md
.agents/skills/electron/SKILL.md
apps/zcode-cli/.agents/skills/vercel-react-view-transitions/SKILL.md

Metadata

Files
0
Version
a60ba6a
Hash
33fb5462
Indexed
2026-09-21 23:46

Главная - Вики-сайт
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-11-03 07:11
浙ICP备14020137号-1