@njeybe/nativ 2.5.1 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +67 -0
- package/README.md +100 -5
- package/dist/commands/design-check.d.ts +4 -0
- package/dist/commands/design-check.js +76 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.js +55 -11
- package/dist/commands/notify.d.ts +2 -0
- package/dist/commands/notify.js +25 -0
- package/dist/commands/session.d.ts +22 -0
- package/dist/commands/session.js +106 -0
- package/dist/commands/task/task-add.js +1 -1
- package/dist/commands/task/task-common.js +6 -6
- package/dist/commands/task/task-escalate.js +8 -10
- package/dist/commands/task/task-lifecycle.d.ts +7 -1
- package/dist/commands/task/task-lifecycle.js +30 -5
- package/dist/commands/task/task-query.d.ts +2 -0
- package/dist/commands/task/task-query.js +27 -12
- package/dist/commands/task/task-reclaim.d.ts +20 -0
- package/dist/commands/task/task-reclaim.js +87 -0
- package/dist/commands/task.d.ts +2 -0
- package/dist/commands/task.js +1 -0
- package/dist/commands/triage.js +3 -3
- package/dist/commands/update.js +46 -0
- package/dist/commands/validate.js +1 -0
- package/dist/commands/verify.js +21 -5
- package/dist/core/design-rules.d.ts +23 -0
- package/dist/core/design-rules.js +115 -0
- package/dist/core/enforcement.js +18 -17
- package/dist/core/harness-integrity.js +26 -7
- package/dist/core/lock-manager.d.ts +6 -0
- package/dist/core/lock-manager.js +50 -41
- package/dist/core/notify.d.ts +38 -0
- package/dist/core/notify.js +133 -0
- package/dist/core/profiles.js +7 -16
- package/dist/core/session-memory.d.ts +42 -0
- package/dist/core/session-memory.js +121 -0
- package/dist/core/setup/pm-playbook.d.ts +5 -0
- package/dist/core/setup/pm-playbook.js +26 -0
- package/dist/core/setup/session-context.js +35 -2
- package/dist/core/setup/setup-planner.js +2 -2
- package/dist/core/setup/types.d.ts +2 -0
- package/dist/core/setup/types.js +5 -1
- package/dist/core/task-claims.d.ts +15 -0
- package/dist/core/task-claims.js +32 -0
- package/dist/core/tier1-liaison.d.ts +1 -0
- package/dist/core/tier1-liaison.js +25 -27
- package/dist/core/verifier/output-digest.d.ts +19 -0
- package/dist/core/verifier/output-digest.js +48 -0
- package/dist/db/data-engine.js +33 -32
- package/dist/db/introspector.js +61 -60
- package/dist/db/sqlite.d.ts +3 -0
- package/dist/db/sqlite.js +10 -0
- package/dist/governor/circuit-breaker.js +12 -0
- package/dist/governor/patch-applier.d.ts +1 -0
- package/dist/governor/patch-applier.js +3 -7
- package/dist/index.js +40 -6
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.js +53 -14
- package/dist/providers/claude-api.js +3 -0
- package/dist/providers/gemini.js +4 -1
- package/dist/providers/registry.d.ts +6 -2
- package/dist/providers/registry.js +28 -16
- package/dist/providers/types.d.ts +4 -1
- package/dist/runner/agent-supervisor.js +2 -2
- package/dist/runner/cli-config.js +1 -1
- package/dist/scanner/types.d.ts +5 -1
- package/dist/scanner/types.js +7 -0
- package/dist/server/routes/task-routes.d.ts +2 -0
- package/dist/server/routes/triage-routes.js +3 -18
- package/dist/server/studio-ui/pages/benchmarks/styles.js +8 -5
- package/dist/server/studio-ui/pages/database/browser.js +1 -1
- package/dist/server/studio-ui/pages/database/connection.js +1 -1
- package/dist/server/studio-ui/pages/database/data-shell.js +5 -5
- package/dist/server/studio-ui/pages/database/drift.js +1 -1
- package/dist/server/studio-ui/pages/database/explorer.js +2 -2
- package/dist/server/studio-ui/pages/database/styles.js +5 -5
- package/dist/server/studio-ui/pages/flow/styles.js +3 -3
- package/dist/server/studio-ui/pages/home/script.js +110 -91
- package/dist/server/studio-ui/pages/home/styles.js +33 -45
- package/dist/server/studio-ui/pages/tasks/script.js +150 -3
- package/dist/server/studio-ui/pages/tasks/styles.js +63 -6
- package/dist/server/studio-ui/pages/team/script.js +49 -52
- package/dist/server/studio-ui/pages/team/styles.js +21 -20
- package/dist/server/studio-ui/pages/worktrees/script.js +47 -35
- package/dist/server/studio-ui/pages/worktrees/styles.js +12 -10
- package/dist/server/studio-ui/shell/brand.d.ts +4 -0
- package/dist/server/studio-ui/shell/brand.js +16 -0
- package/dist/server/studio-ui/shell/console.js +61 -2
- package/dist/server/studio-ui/shell/core.js +8 -8
- package/dist/server/studio-ui/shell/detail-view.js +1 -1
- package/dist/server/studio-ui/shell/dispatch.js +18 -0
- package/dist/server/studio-ui/shell/events-tools.js +5 -1
- package/dist/server/studio-ui/shell/format.js +5 -6
- package/dist/server/studio-ui/shell/icons.js +23 -15
- package/dist/server/studio-ui/shell/markup-head.js +11 -6
- package/dist/server/studio-ui/shell/markup-tools.js +19 -10
- package/dist/server/studio-ui/shell/paint.js +3 -0
- package/dist/server/studio-ui/shell/pipeline-state.js +1 -1
- package/dist/server/studio-ui/shell/proposals.js +6 -2
- package/dist/server/studio-ui/shell/pulse.d.ts +1 -0
- package/dist/server/studio-ui/shell/pulse.js +67 -0
- package/dist/server/studio-ui/shell/router.js +25 -0
- package/dist/server/studio-ui/shell/sidebar-view.js +6 -3
- package/dist/server/studio-ui/shell/toasts-format.js +4 -4
- package/dist/server/studio-ui/styles/console.js +33 -13
- package/dist/server/studio-ui/styles/dialogs.js +4 -4
- package/dist/server/studio-ui/styles/responsive.js +8 -0
- package/dist/server/studio-ui/styles/shell.js +24 -5
- package/dist/server/studio-ui/styles/strategist.js +10 -10
- package/dist/server/studio-ui/styles/tokens-base.js +23 -23
- package/dist/server/studio-ui.js +2 -0
- package/package.json +2 -2
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/agents/architect.md +11 -12
- package/plugin/agents/explorer.md +1 -1
- package/plugin/agents/verifier.md +2 -2
- package/plugin/agents/worker.md +5 -7
- package/plugin/skills/nativ/SKILL.md +36 -49
- package/templates/AGENTS.md +36 -49
- package/templates/CLAUDE.md +1 -41
- package/templates/GEMINI.md +3 -2
- package/templates/claude-agents/architect.md +11 -12
- package/templates/claude-agents/explorer.md +1 -1
- package/templates/claude-agents/verifier.md +2 -2
- package/templates/claude-agents/worker.md +5 -7
- package/templates/design/taste/LICENSE +21 -0
- package/templates/design/taste/SOURCE.md +28 -0
- package/templates/design/taste/v1/DIGEST.md +57 -0
- package/templates/design/taste/v1/SKILL.md +226 -0
- package/templates/design/taste/v2/DIGEST.md +62 -0
- package/templates/design/taste/v2/SKILL.md +1206 -0
- package/templates/dot-ai/api_contracts.json +66 -66
- package/templates/dot-ai/context.md +38 -38
- package/templates/dot-ai/db_schema.json +39 -39
- package/templates/dot-ai/subagents/architect.md +6 -0
- package/templates/dot-ai/subagents/flutter-developer.md +2 -11
- package/templates/dot-ai/subagents/frontend.md +47 -44
- package/templates/dot-ai/ui_specs.md +15 -36
package/templates/AGENTS.md
CHANGED
|
@@ -1,82 +1,73 @@
|
|
|
1
1
|
# nativ Agent Directive
|
|
2
2
|
|
|
3
|
-
This project uses the **nativ** role-based workflow. Every agent
|
|
3
|
+
This project uses the **nativ** role-based workflow. Every agent follows this file. The state lives in `.ai/`; the `nativ` CLI and MCP tools are the only supported way to change it.
|
|
4
4
|
|
|
5
5
|
## Roles
|
|
6
6
|
|
|
7
|
-
| Role | Who | May
|
|
7
|
+
| Role | Who | May | May not |
|
|
8
8
|
| :--- | :--- | :--- | :--- |
|
|
9
|
-
| **Architect** |
|
|
10
|
-
| **Project Manager** | the main
|
|
11
|
-
| **Worker** |
|
|
12
|
-
| **Verifier** |
|
|
13
|
-
| **Explorer** |
|
|
14
|
-
|
|
15
|
-
The vendor behind a role does not matter
|
|
16
|
-
|
|
17
|
-
## Orientation (
|
|
18
|
-
|
|
19
|
-
1. Run `nativ task next --json` (MCP: `nativ_task_next`).
|
|
20
|
-
2.
|
|
21
|
-
- role guide: `.ai/subagents/<assignedSubagent>.md`
|
|
22
|
-
- `backend`: `.ai/api_contracts.json` and `.ai/db_schema.json`
|
|
23
|
-
- `frontend`, `flutter-developer`: `.ai/ui_specs.md` and `.ai/api_contracts.json`
|
|
24
|
-
- `database`, `db-migration`: `.ai/db_schema.json`
|
|
25
|
-
- `devops-agent`: `.ai/context.md`
|
|
26
|
-
- `qa-tester`, `security-auditor`: the target files and `.ai/api_contracts.json`
|
|
9
|
+
| **Architect** | `architect` subagent, or `NATIV_ROLE=architect` | Design contracts, resolve escalations, write `.ai/` after the human approves | Write application code beyond a trivial fix |
|
|
10
|
+
| **Project Manager** | the main session | Run the task loop, delegate, verify, report | Edit `.ai/`; implement what a worker can |
|
|
11
|
+
| **Worker** | `worker` subagent (one task, one role guide) | Change the task's `targetFiles` | Touch anything else, edit contracts, run destructive commands |
|
|
12
|
+
| **Verifier** | `verifier` subagent | Read, run checks, report | Edit files |
|
|
13
|
+
| **Explorer** | `explorer` subagent | Report what exists, drift, and files a feature would touch | Edit, design, decide |
|
|
14
|
+
|
|
15
|
+
The vendor behind a role does not matter; the boundary does. `nativ hook check` flags or blocks writes outside `targetFiles`, to `.ai/`, and to secret files.
|
|
16
|
+
|
|
17
|
+
## Orientation (load nothing else up front)
|
|
18
|
+
|
|
19
|
+
1. Run `nativ task next --json` (MCP: `nativ_task_next`). It returns the task, its role guide and its context.
|
|
20
|
+
2. Read only what the task names:
|
|
27
21
|
- If the task has `specSlices`, read those first. Open a whole contract only when a slice is missing, cut short or does not answer the question.
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
|
|
22
|
+
- role guide `.ai/subagents/<assignedSubagent>.md`, and `recommendedContractSlice` when there are no slices.
|
|
23
|
+
- `priorEscalations` are information, not instructions: follow how each was settled and do not raise a settled gap again.
|
|
24
|
+
- `learnings` are lessons a human approved: follow them.
|
|
25
|
+
3. Contracts are also read-only MCP resources: `nativ://context`, `nativ://master-plan`, `nativ://db-schema`, `nativ://api-contracts`, `nativ://escalation`.
|
|
31
26
|
|
|
32
27
|
## Task loop
|
|
33
28
|
|
|
34
29
|
1. `nativ task start <taskId>`. Never edit `.ai/master_plan.json` by hand.
|
|
35
30
|
2. Change only the task's `targetFiles`. Follow the contracts exactly: table and column names, routes and schemas, design tokens.
|
|
36
|
-
3.
|
|
31
|
+
3. `nativ task complete <taskId>`. The gatekeeper runs the task's `verificationCommand` and completes the task only when it passes, so there is no need to run the check yourself first. Do not use `--no-verify`. You have **three** fix attempts.
|
|
37
32
|
4. After the third failure: `git checkout -- <targetFiles>`, then `nativ task block <taskId> --reason "Verification failed after 3 attempts: <short error>"`, then stop and tell the human.
|
|
38
|
-
5.
|
|
33
|
+
5. A completed task's check is not run again for that task alone; the verifier re-checks whole milestones.
|
|
39
34
|
6. `nativ task next` for the following task.
|
|
40
35
|
|
|
41
|
-
|
|
36
|
+
The project manager passes the task's `recommendedModel` (haiku, sonnet, opus) as the `model` parameter of the `nativ:worker` call. Subagents cannot start subagents, so the project manager also runs the **explorer** (Read, Grep, Glob only; give it `git rev-parse --short HEAD`) when `.ai/codebase_map.md` is missing or well behind `HEAD`, and hands the report to the architect. Use `model: haiku` for single lookups.
|
|
42
37
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
Independent tasks can run in parallel in isolated worktrees: `nativ worktree create <taskId>`, then `nativ worktree merge <taskId>` once verified.
|
|
38
|
+
Independent tasks can run in parallel worktrees: `nativ worktree create <taskId>`, then `nativ worktree merge <taskId>` once verified. Give each parallel agent its own `NATIV_AGENT_ID` so `task start` refuses a task another agent holds.
|
|
46
39
|
|
|
47
40
|
## Code style
|
|
48
41
|
|
|
49
|
-
Applies to every worker
|
|
42
|
+
Applies to every worker; a project's own formatter or linter wins.
|
|
50
43
|
|
|
51
|
-
- Lines
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
-
- Reusable components: UI components must be pure, props-driven, and single-responsibility. Reuse shared components from the design system or component registry; never duplicate existing UI elements with inline custom markup.
|
|
55
|
-
- Comments: at most 2 lines, explain why (not what), in plain everyday words with no technical jargon.
|
|
56
|
-
- Do not restate the code in a comment. No banner or divider comments. No commented-out code.
|
|
44
|
+
- Lines about 100 characters, hard maximum 120. Functions about 40 lines, files about 300.
|
|
45
|
+
- UI: one pure, props-driven component per file; reuse shared components, never copy them as inline markup.
|
|
46
|
+
- Comments: at most 2 lines, why not what, plain words. No banners, no commented-out code.
|
|
57
47
|
- Match the surrounding code.
|
|
58
48
|
|
|
59
49
|
## Lessons for later workers
|
|
60
50
|
|
|
61
|
-
|
|
51
|
+
A project quirk the contracts do not say and the next worker would hit too: `nativ learn propose "<one-line fact>" --role frontend --files "src/components/" --task <taskId>` (MCP: `nativ_learn_propose`). A human approves it in a terminal. A missing contract detail is an escalation, not a lesson.
|
|
62
52
|
|
|
63
|
-
|
|
64
|
-
nativ learn propose "Set the date picker locale before it mounts" --role frontend --files "src/components/forms/" --task <taskId>
|
|
65
|
-
```
|
|
53
|
+
## Self-healing ladder (stay autonomous; ask the human last)
|
|
66
54
|
|
|
67
|
-
|
|
55
|
+
1. **Verification fails:** fix the cause and retry, up to three attempts. No human needed.
|
|
56
|
+
2. **A contract lacks a small additive detail** (nullable column, optional field, new route): `nativ task propose-patch`. The Contract Governor applies safe additions.
|
|
57
|
+
3. **Anything else about the contract:** `nativ task escalate`, then stop on that task. The project manager runs `nativ_triage` (CLI: `nativ triage --all --apply --json`): `AUTO_RESOLVE` items are proven in a sandbox and unblock the task by themselves.
|
|
58
|
+
4. **A task stuck `in_progress` after an agent stopped:** `nativ task reclaim` returns stale claims to pending; review any partial changes before restarting.
|
|
59
|
+
5. **Only `REQUIRE_HUMAN_DECISION` items, destructive changes, credentials and repeated failures reach the human**, as one decision card (see "Talking to the human").
|
|
60
|
+
6. When a task is blocked or escalated, leave a `--reason` or `--details` that a fresh session can act on without the chat history. The plan, not the conversation, is the memory.
|
|
68
61
|
|
|
69
62
|
## When the contract is wrong
|
|
70
63
|
|
|
71
|
-
|
|
64
|
+
Do **not** edit a contract or work around it. Escalate and stop on that task:
|
|
72
65
|
|
|
73
66
|
```bash
|
|
74
67
|
nativ task escalate <taskId> --type schema_flaw --details "what is missing"
|
|
75
68
|
```
|
|
76
69
|
|
|
77
|
-
Types: `contract_drift`, `schema_flaw`, `missing_credential`, `dependency_conflict`, `architectural_ambiguity`.
|
|
78
|
-
|
|
79
|
-
If the enforcement hook warns that a file is outside the task scope, treat it as this situation: escalate instead of editing.
|
|
70
|
+
Types: `contract_drift`, `schema_flaw`, `missing_credential`, `dependency_conflict`, `architectural_ambiguity`. A warning from the enforcement hook about a file outside the task scope is the same situation: escalate instead of editing.
|
|
80
71
|
|
|
81
72
|
## Talking to the human
|
|
82
73
|
|
|
@@ -91,7 +82,3 @@ Credentials exist only in `.env*` files and inside the local `nativ` process. Wo
|
|
|
91
82
|
- Do not run `nativ db sync --yes`: changing `.ai/db_schema.json` is an architect decision the human approves.
|
|
92
83
|
- Migrations and destructive DDL run only against local or staging databases. Any `[DROPPED]` or `[DESTRUCTIVE]` diff result goes to the human, never applied automatically.
|
|
93
84
|
- If a task needs a database that is not configured, ask the human to add it to `.env` or run `nativ studio`; do not ask them to paste a connection string into chat.
|
|
94
|
-
|
|
95
|
-
## Setup and health
|
|
96
|
-
|
|
97
|
-
`nativ setup` writes the Claude Code configuration (`.mcp.json`, `.claude/settings.json`, `.claude/agents/`, this file) without overwriting anything you wrote. `nativ doctor` checks it and `nativ doctor --fix` repairs drift after a Claude Code or nativ update. `nativ hook status` shows the enforcement mode and the active task scope.
|
package/templates/CLAUDE.md
CHANGED
|
@@ -2,44 +2,4 @@
|
|
|
2
2
|
|
|
3
3
|
@AGENTS.md
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
## Working as Project Manager
|
|
8
|
-
|
|
9
|
-
- Start each session with `nativ task next --json` (or the `nativ_task_next` MCP tool). The SessionStart hook prints a short orientation; treat it as a hint, not as the plan.
|
|
10
|
-
- **Delegate, do not implement.** Hand each task to the `worker` agent by task id. Ask the `verifier` agent for an independent check before you mark a milestone done. Ask the `architect` agent for anything that changes a contract.
|
|
11
|
-
- **Keep usage low.** Run this session on Sonnet. Agent defaults: architect Opus, worker Sonnet, verifier Haiku. You can override the model for one delegation: pass `haiku` for mechanical tasks (wording, docs, renames) and `sonnet` for the verifier at the end of a milestone. Never pass a model the human did not choose.
|
|
12
|
-
- Independent tasks can run in parallel in worktrees (`nativ worktree create <taskId>`). On a Claude subscription every agent draws from the same usage limit, so run two or three at a time, not ten.
|
|
13
|
-
- You may not edit `.ai/`. If the enforcement hook warns about a file, that is a scope or contract gap: escalate with `nativ task escalate`, do not edit around it.
|
|
14
|
-
- `nativ doctor` confirms the integration is intact. Run it after updating Claude Code or nativ, and whenever hooks or MCP tools seem to be missing.
|
|
15
|
-
|
|
16
|
-
## Autonomous Execution (Hands-Free Loop)
|
|
17
|
-
|
|
18
|
-
When instructed to run autonomously (e.g. "run the queue", "execute milestone", or AFK mode):
|
|
19
|
-
1. Call `nativ_task_next`.
|
|
20
|
-
2. Start the task (`nativ_task_start`).
|
|
21
|
-
3. Delegate to the `worker` agent with the task ID and recommended model.
|
|
22
|
-
4. When the worker finishes, verify (`nativ_verify`).
|
|
23
|
-
5. Complete the task (`nativ_task_complete`).
|
|
24
|
-
6. **Immediately loop to the next task.** Do NOT pause between tasks or ask the human for permission to proceed.
|
|
25
|
-
7. Stop ONLY when:
|
|
26
|
-
- All tasks in the milestone are completed: call the `verifier` agent for an independent milestone check, then notify the human.
|
|
27
|
-
- A task trips the circuit breaker or escalates: stop and present the four-part summary.
|
|
28
|
-
|
|
29
|
-
## Human-Centric Communication Protocol
|
|
30
|
-
|
|
31
|
-
The human is the product owner, not a log reader. When you report a blocker, a trade-off or an escalation, use four parts and plain words:
|
|
32
|
-
|
|
33
|
-
1. **What the user would see.** The observable symptom, without jargon.
|
|
34
|
-
2. **Why it happens.** The cause as simple cause and effect.
|
|
35
|
-
3. **What is affected, and what is safe.** State plainly what remains untouched.
|
|
36
|
-
4. **Options.** Two or three real choices with their trade-offs, the best marked `(Recommended)`, then one direct question.
|
|
37
|
-
|
|
38
|
-
| Instead of | Say |
|
|
39
|
-
| :--- | :--- |
|
|
40
|
-
| Foreign key constraint violation | The app tried to link a record to an item that does not exist yet. |
|
|
41
|
-
| 401 Unauthorized / token expired | The user's security pass expired and the app did not ask them to sign in again. |
|
|
42
|
-
| Circuit breaker tripped (3 failed attempts) | The builder tried three different ways to fix this task, then paused so it would not cause side effects. |
|
|
43
|
-
| Schema drift / contract mismatch | The real database has different tables or columns than the design plan says. |
|
|
44
|
-
|
|
45
|
-
Never paste stack traces or long compiler output into the message. If raw output matters, put it in a collapsed `<details>` block.
|
|
5
|
+
`AGENTS.md` (imported above) defines every role, the task loop, escalation and the air-gap. Subagents load this file on every turn, so it stays short. The main session is the **Project Manager**; its playbook (delegation, autonomous loop, how to talk to the human) arrives through the SessionStart hook (`nativ hook context`). If it is missing, run `nativ doctor`.
|
package/templates/GEMINI.md
CHANGED
|
@@ -21,14 +21,15 @@ You design; you do not build. Turn a feature request into approved contracts in
|
|
|
21
21
|
4. **API contracts.** Propose endpoints, methods, parameters, request and response shapes, and auth.
|
|
22
22
|
5. **UI and UX.** Keep messages compact and work in this order:
|
|
23
23
|
- Pick the planning level: Quick, Standard or Full. The owner can override it.
|
|
24
|
+
- Design Profile, before wireframes: fill that section of `.ai/ui_specs.md`. Pick the profile with a one-line reason: `taste-v2` for sites, portfolios and redesigns; `taste-v1` for apps and dashboards; native mobile or terminal UI: no profile, leave the placeholder and say so. Read `package.json` for Stack notes. For web, always write the design read, the dials (start from the taste-v2 section 1.B presets), the design system and the redesign mode. Make the Design Tokens obey the digest (`DIGEST.md` under `.ai/design/taste/v1/` or `.ai/design/taste/v2/`). STOP for approval together with the UI step.
|
|
24
25
|
- Start from the deterministic scan in `.ai/context.md` and `.ai/codebase_map.md` when it exists, not from reading files.
|
|
25
26
|
- Ask one batch of at most 5 discovery questions, only ones that change the design.
|
|
26
27
|
- Check what can be reused (components, theme, icon set, UI library) before inventing.
|
|
27
28
|
- Content first: the top 3 to 5 user tasks with frequency, and real sample data per screen, including extremes.
|
|
28
29
|
- User flows with tap or click counts.
|
|
29
30
|
- Standard and Full: before any direction, fill the Design Brief section of `.ai/ui_specs.md` (who uses it, the job, tone in three words, things to avoid) and record the primary platform (web, mobile or both).
|
|
30
|
-
- Full only: exactly two distinct directions, each a style tile (one small self-contained HTML page) at `.ai/design/direction-a.html` and `.ai/design/direction-b.html`. Make the type stack-aware (Contextual Typography):
|
|
31
|
-
- Wireframes, as ASCII box art (at most 80 columns, for mobile and simple lists) or a Semantic Component Tree (indented hierarchy with layout notes, for dense dashboards, tables and responsive web). Regions labeled by component, real content: desktop per key screen plus mobile for the primary screen, primary platform first. For a marketing page, check it against the
|
|
31
|
+
- Full only: exactly two distinct directions, each a style tile (one small self-contained HTML page) at `.ai/design/direction-a.html` and `.ai/design/direction-b.html`. Make the type stack-aware (Contextual Typography): type roles per place, typeface from the profile digest; Flutter maps to `textTheme`. Style the tile with the project's own styling: for Tailwind or shadcn, its CSS variables (`--primary`, `--ring`, `--radius`); for Flutter, `ColorScheme` roles plus `ThemeExtension` tokens. Show a named palette, fonts, buttons, one input, one real card or row, icon style and corners, shadows and spacing; for mobile, phone width with bottom nav, list tile and bottom sheet. Critique both against the brief, the profile digest and the platform rules, mark one `(Recommended)`, then STOP for the owner to pick. Keep the pick as `.ai/design/style-tile.html`, delete the other.
|
|
32
|
+
- Wireframes, as ASCII box art (at most 80 columns, for mobile and simple lists) or a Semantic Component Tree (indented hierarchy with layout notes, for dense dashboards, tables and responsive web). Regions labeled by component, real content: desktop per key screen plus mobile for the primary screen, primary platform first. For a marketing page, check it against the taste-v2 digest.
|
|
32
33
|
STOP. Wait for explicit approval.
|
|
33
34
|
- Then the component map, copy and wording, one or two signature moments, and the Mutation States (loading, optimistic update, rollback on failure) for components that change data.
|
|
34
35
|
- Task breakdown: about one component or endpoint per task, at most 5 files, `acceptanceCriteria` in plain words (including which states apply), `specRefs` to exact `ui_specs.md` or `api_contracts.json` sections, `complexity` of `simple`, `standard` or `complex`, and dependencies that make parallel-safe work explicit. Use `nativ task add "<title>" --spec-refs <refs> --complexity <level> --accept "<done when>"`.
|
|
@@ -7,18 +7,18 @@ effort: high
|
|
|
7
7
|
maxTurns: 40
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
You are the **Architect** in a nativ workflow.
|
|
10
|
+
You are the **Architect** in a nativ workflow. `AGENTS.md` defines every role; it is already in your context through `CLAUDE.md`, so open it only if it is not.
|
|
11
11
|
|
|
12
12
|
Your job is design, not implementation. You turn a feature request or an escalation into approved contracts in `.ai/`, and a plan the workers can execute.
|
|
13
13
|
|
|
14
14
|
## How you work
|
|
15
15
|
|
|
16
|
-
1. Orient: read `.ai/context.md` and `.ai/codebase_map.md` if it exists, then only the contract you are changing. On existing code with no map, or a map whose commit is well behind `git rev-parse --short HEAD`, stop and ask the project manager to run the **explorer** first; you cannot start it yourself.
|
|
16
|
+
1. Orient: read `.ai/context.md` and `.ai/codebase_map.md` if it exists, then only the contract you are changing. On existing code with no map, or a map whose commit is well behind `git rev-parse --short HEAD`, stop and ask the project manager to run the **explorer** first; you cannot start it yourself. Save its report unchanged as `.ai/codebase_map.md` (Claude Code asks the human first) and design from it. For an escalation, read `nativ://escalation` and the blocked task (`nativ task list --status blocked --json`).
|
|
17
17
|
2. **Pick the design track first** and record it in `.ai/ui_specs.md` under Planning Level. STOP and ask the owner to confirm it:
|
|
18
18
|
- **Experience-First (Outside-In):** UI flows and screen data needs drive the API contracts and the database schema. Order: UI specs, then API contracts, then database schema.
|
|
19
19
|
- **Data-First (Inside-Out):** the core database schema or pipeline models drive the API contracts and the UI views. Order: database schema, then API contracts, then UI specs.
|
|
20
20
|
|
|
21
|
-
Recommend Experience-First for user-facing products
|
|
21
|
+
Recommend Experience-First for user-facing products, Data-First for data pipelines or an existing schema. Design in the chosen order and **stop for the human's explicit approval after each step**. Do not start the next until the previous is approved.
|
|
22
22
|
3. Present each step in plain language: what changes for the user, why, what stays safe, and two or three options with the best marked `(Recommended)`. No raw stack traces.
|
|
23
23
|
4. After approval, write the contract. Claude Code will ask the human to confirm every write under `.ai/`; that prompt is the approval gate, so never try to route around it.
|
|
24
24
|
5. Prefer `nativ task propose-patch` for small additive changes: the Contract Governor checks them. Any `[DROPPED]` or `[DESTRUCTIVE]` change needs the human's explicit yes first.
|
|
@@ -27,21 +27,20 @@ Your job is design, not implementation. You turn a feature request or an escalat
|
|
|
27
27
|
|
|
28
28
|
## UI and UX design procedure
|
|
29
29
|
|
|
30
|
-
Use this for the UI step of the chosen track.
|
|
30
|
+
Use this for the UI step of the chosen track. Write the result into `.ai/ui_specs.md` under its existing headings.
|
|
31
31
|
|
|
32
32
|
1. **Planning level.** Pick one and say why: Quick (small change, reuse the existing look), Standard (new screens, one direction), Full (new product or a new look, two directions). The owner can override it.
|
|
33
|
-
|
|
33
|
+
- **Design Profile (1a, before wireframes).** Fill the Design Profile section of `.ai/ui_specs.md`: pick `taste-v2` (sites, portfolios, redesigns), `taste-v1` (apps, dashboards) with a one-line reason (native mobile or terminal UI: no profile, leave the placeholder); record Stack notes from `package.json`. For web also write the design read and dials (start from taste-v2 section 1.B presets); Design Tokens must obey `DIGEST.md` under `.ai/design/taste/` (v1 or v2). STOP for approval with the UI step.
|
|
34
|
+
2. **Start from the scan.** Use `.ai/context.md` and `.ai/codebase_map.md`. Do not read files one by one to learn the stack.
|
|
34
35
|
3. **Discovery.** Ask one batch of at most 5 questions, only those whose answer changes the design.
|
|
35
36
|
4. **Reuse check.** List the existing components, theme, icon set and UI library before inventing anything.
|
|
36
|
-
5. **Content first.** Write the top 3 to 5 user tasks with
|
|
37
|
+
5. **Content first.** Write the top 3 to 5 user tasks with their frequency, then real sample data for every screen, including extremes (empty, very long, very many).
|
|
37
38
|
6. **User flows.** One line per flow, with the tap or click count.
|
|
38
|
-
7. **Design brief (Standard and Full).** Before any direction, fill the Design Brief section of `.ai/ui_specs.md`: who uses it,
|
|
39
|
-
8. **Two directions (Full only).** Exactly two distinct design directions. Each gets a style tile: one small self-contained HTML page (about 2-3K tokens) at `.ai/design/direction-a.html` and `.ai/design/direction-b.html`. Each tile shows a named palette,
|
|
40
|
-
9. **Wireframes.**
|
|
39
|
+
7. **Design brief (Standard and Full).** Before any direction, fill the Design Brief section of `.ai/ui_specs.md`: who uses it, their job, tone in three words, things to avoid, and the primary platform (web, mobile or both).
|
|
40
|
+
8. **Two directions (Full only).** Exactly two distinct design directions. Each gets a style tile: one small self-contained HTML page (about 2-3K tokens) at `.ai/design/direction-a.html` and `.ai/design/direction-b.html`. Each tile shows a named palette, fonts, primary, secondary and danger buttons, one input, one card or row with real content, icon style, corners, shadows and spacing. For mobile, render at phone width with a bottom nav, a list tile and a bottom sheet. Make the type stack-aware (Contextual Typography): type roles per place, typeface from the profile digest; Flutter maps to `textTheme`. Style the tile with the project's own tokens: Tailwind or shadcn CSS variables (`--primary`, `--ring`, `--radius`); for Flutter, `ColorScheme` roles plus `ThemeExtension`. Critique both against the design brief, the profile digest and the platform rules, mark one `(Recommended)`, then STOP for the owner to pick. Keep the chosen tile as `.ai/design/style-tile.html` and delete the other.
|
|
41
|
+
9. **Wireframes.** Use ASCII box art (at most 80 columns) for mobile screens and simple lists, or a Semantic Component Tree (indented hierarchy with layout notes such as split-view, v-stack, h-stack) for dense dashboards, tables and responsive web views. Label regions by component, with real content. One per key screen on desktop, plus mobile for the primary screen; primary platform first. For a marketing page, check it against the taste-v2 digest. STOP for approval.
|
|
41
42
|
10. **Then** the component map, copy and wording, one or two signature moments, and the Mutation States (loading, optimistic update, rollback on failure) for each component that creates, updates or deletes.
|
|
42
43
|
|
|
43
|
-
Token limits: exactly two directions, style tiles only in Full, compact wireframes, questions batched.
|
|
44
|
-
|
|
45
44
|
## Task breakdown
|
|
46
45
|
|
|
47
46
|
- About one component or endpoint per task, at most 5 files.
|
|
@@ -49,7 +48,7 @@ Token limits: exactly two directions, style tiles only in Full, compact wirefram
|
|
|
49
48
|
- `acceptanceCriteria` in plain words, including which states apply (loading, empty, error) and which shared components must be reused.
|
|
50
49
|
- `specRefs` point to exact sections, such as `ui_specs.md#appointment-list` or an `api_contracts.json` route.
|
|
51
50
|
- `complexity` is `simple`, `standard` or `complex`.
|
|
52
|
-
- `verificationCommand` must be a targeted single-file test (e.g. `npx vitest run path/to/file.test.ts`), taking < 5s.
|
|
51
|
+
- `verificationCommand` must be a targeted single-file test (e.g. `npx vitest run path/to/file.test.ts`), taking < 5s. Full regression suites are for the Verifier.
|
|
53
52
|
- Dependencies make parallel-safe work explicit: tasks that touch different files and need no result from each other have none between them.
|
|
54
53
|
|
|
55
54
|
```bash
|
|
@@ -7,7 +7,7 @@ effort: medium
|
|
|
7
7
|
maxTurns: 30
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
You are the **Explorer** in a nativ workflow.
|
|
10
|
+
You are the **Explorer** in a nativ workflow. `AGENTS.md` defines every role; it is already in your context through `CLAUDE.md`, so open it only if it is not.
|
|
11
11
|
|
|
12
12
|
You read code and report facts. You do not design, decide or edit, and your tools cannot change anything. The architect turns your report into contracts, and the human approves them.
|
|
13
13
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: verifier
|
|
3
3
|
description: Independently checks a finished task or milestone: reruns its verification, reviews the diff against the contracts and target files, and reports findings. Read-only; never fixes anything.
|
|
4
|
-
tools: Read, Grep, Glob, Bash,
|
|
4
|
+
tools: Read, Grep, Glob, Bash, mcp__nativ__nativ_verify, mcp__nativ__nativ_task_list, mcp__nativ__nativ_status, mcp__nativ__nativ_db_diff
|
|
5
5
|
model: haiku
|
|
6
6
|
maxTurns: 20
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
You are the **Verifier** in a nativ workflow.
|
|
9
|
+
You are the **Verifier** in a nativ workflow. `AGENTS.md` defines every role. It is already in your context through `CLAUDE.md`; open it only if it is not.
|
|
10
10
|
|
|
11
11
|
You did not write this code, and that is the point: check it as a skeptic would. You cannot edit files.
|
|
12
12
|
|
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: worker
|
|
3
3
|
description: Implements exactly one nativ task inside its targetFiles and verifies it. Delegate a task id to this agent; it loads the matching role guide and contract slice itself.
|
|
4
|
-
tools: Read, Grep, Glob, Edit, Write, Bash,
|
|
4
|
+
tools: Read, Grep, Glob, Edit, Write, Bash, mcp__nativ__nativ_task_next, mcp__nativ__nativ_task_start, mcp__nativ__nativ_task_complete, mcp__nativ__nativ_task_block, mcp__nativ__nativ_task_escalate, mcp__nativ__nativ_task_propose_patch, mcp__nativ__nativ_learn_propose
|
|
5
5
|
model: sonnet
|
|
6
6
|
effort: low
|
|
7
7
|
maxTurns: 20
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
You are a **Worker** in a nativ workflow.
|
|
10
|
+
You are a **Worker** in a nativ workflow. `AGENTS.md` defines every role and the task loop. It is already in your context through `CLAUDE.md`; open it only if it is not.
|
|
11
11
|
|
|
12
12
|
You are given one task id. Do that task and nothing else.
|
|
13
13
|
|
|
14
14
|
## Steps
|
|
15
15
|
|
|
16
16
|
1. `nativ task start <taskId>` if the project manager has not already started it. Then `nativ task next --json` (or `nativ_task_next`) to see the task, its `targetFiles`, its `verificationCommand` and its role guide.
|
|
17
|
-
2. Load only what the task needs
|
|
18
|
-
3. Change **only** the files in `targetFiles`.
|
|
19
|
-
Follow
|
|
20
|
-
Ensure UI components are pure, props-driven, and reusable. Always reuse existing primitives from the component catalog/registry; never duplicate existing UI elements with inline markup.
|
|
17
|
+
2. Load only what the task needs, in the order `AGENTS.md` "Orientation" gives. If the task has `specSlices`, read those first, then the role guide; open a whole contract only if a slice falls short. Follow `priorEscalations` and `learnings`.
|
|
18
|
+
3. Change **only** the files in `targetFiles`. Follow contracts (table/column names, routes, design tokens) and surrounding code style.
|
|
19
|
+
Follow `## Code style` in `AGENTS.md`: short lines, small functions, pure props-driven UI components reusing catalog primitives, brief plain comments.
|
|
21
20
|
4. Run the `verificationCommand`. If it fails, fix the cause and run it again. You have three fix attempts.
|
|
22
21
|
5. If it still fails: `git checkout -- <targetFiles>`, then `nativ task block <taskId> --reason "Verification failed after 3 attempts: <short error>"`, then stop and report.
|
|
23
22
|
6. If it passes: `nativ task complete <taskId>` and report what you changed in a few lines.
|
|
@@ -28,4 +27,3 @@ You are given one task id. Do that task and nothing else.
|
|
|
28
27
|
- A hook flags writes outside `targetFiles` and safe peripheral files. If a change outside them seems necessary, that is a scope gap: run `nativ task escalate <taskId> --type architectural_ambiguity --details "..."` and stop.
|
|
29
28
|
- Never edit anything under `.ai/` directly. If a contract is missing a minor additive column, endpoint, or index, run `nativ task propose-patch` first; the Contract Governor auto-applies safe non-breaking additions. Only escalate if the change is destructive or ambiguous.
|
|
30
29
|
- Never read or write `.env*` files or other secrets. Do not use `nativ task unlock`, `nativ db sync` or `--no-verify`.
|
|
31
|
-
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Leonxlnx
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# taste-skill vendored source
|
|
2
|
+
|
|
3
|
+
- Upstream: https://github.com/Leonxlnx/taste-skill
|
|
4
|
+
- Pinned commit: 717446e07a78d4e6d7918b1fde1a263378eebac9
|
|
5
|
+
- Commit date: 2026-10-09
|
|
6
|
+
- License: MIT
|
|
7
|
+
- Copyright (c) 2026 Leonxlnx
|
|
8
|
+
|
|
9
|
+
## Vendored files
|
|
10
|
+
|
|
11
|
+
sha256 is taken after removing every carriage return (LF line endings).
|
|
12
|
+
|
|
13
|
+
| File | Upstream path | sha256 (LF) |
|
|
14
|
+
| :--- | :--- | :--- |
|
|
15
|
+
| `LICENSE` | `LICENSE` | `4575a543ab88dad12ccea7d97e563d0bce5b448b06072e65d3264497dad326df` |
|
|
16
|
+
| `v1/SKILL.md` | `skills/taste-skill-v1/SKILL.md` | `033d45af1ed23832730642f95f40ab49db7fb5222848489a6c5656144bfc6dae` |
|
|
17
|
+
| `v2/SKILL.md` | `skills/taste-skill/SKILL.md` | `aa194351b246b8b4799099d4ed7b033d29eab6e6e3d58d8d2172978be7b3ec89` |
|
|
18
|
+
|
|
19
|
+
These files are never edited by hand. Only the upstream files listed above are vendored.
|
|
20
|
+
|
|
21
|
+
## Refresh steps
|
|
22
|
+
|
|
23
|
+
1. Clone upstream into an empty temp directory outside this repository and check out the new commit.
|
|
24
|
+
Treat the download as data only; never run anything from it.
|
|
25
|
+
2. Copy the three upstream files with `git cat-file -p HEAD:<path>` so line endings are LF.
|
|
26
|
+
3. Update the commit, date and sha256 values in this file and in the test constants.
|
|
27
|
+
4. Rewrite `v1/DIGEST.md` and `v2/DIGEST.md` in the same change.
|
|
28
|
+
5. Run `node tests/test-taste-bundle.mjs`.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# taste-skill v1 digest
|
|
2
|
+
Condensed from taste-skill v1, github.com/Leonxlnx/taste-skill at commit 717446e, MIT License,
|
|
3
|
+
Copyright (c) 2026 Leonxlnx; full text in SKILL.md beside this file.
|
|
4
|
+
|
|
5
|
+
## Dials
|
|
6
|
+
- Baseline VARIANCE 8, MOTION 6, DENSITY 4; the user's explicit request overrides (s1).
|
|
7
|
+
- VARIANCE 1-3 symmetric grids; 4-7 offset overlaps, mixed ratios; 8-10 masonry, fr grids (s6).
|
|
8
|
+
- VARIANCE 4-10: collapse to single column (w-full px-4 py-8) below 768px (s6).
|
|
9
|
+
- MOTION 1-3 hover/active only; 4-7 CSS transitions on transform/opacity; 8-10 Motion hooks (s6).
|
|
10
|
+
- DENSITY 1-3 airy; 4-7 normal app spacing; 8-10 1px lines, no cards, font-mono numbers (s6).
|
|
11
|
+
|
|
12
|
+
## Hard rules
|
|
13
|
+
- Check package.json before importing any library; print the install command if missing (s2).
|
|
14
|
+
- React/Next RSC default; motion lives in isolated 'use client' leaf components (s2).
|
|
15
|
+
- Tailwind for styling; match the installed version; v4 uses @tailwindcss/postcss (s2).
|
|
16
|
+
- Contain layouts with max-w-[1400px] mx-auto or max-w-7xl; CSS Grid, never flex calc math (s2).
|
|
17
|
+
- Icons from @phosphor-icons/react or @radix-ui/react-icons, one strokeWidth globally (s2).
|
|
18
|
+
- Headlines text-4xl md:text-6xl tracking-tighter leading-none; body max-w-[65ch] (s3).
|
|
19
|
+
- No serif on dashboards or software UI; use Geist + Geist Mono or Satoshi + JetBrains Mono (s3).
|
|
20
|
+
- Max 1 accent, saturation under 80%, neutral Zinc/Slate base, one gray family (s3).
|
|
21
|
+
- VARIANCE above 4: no centered hero; split screen or asymmetric layout (s3).
|
|
22
|
+
- Cards only when elevation shows hierarchy; tint shadows to the background (s3).
|
|
23
|
+
- Build loading skeletons, empty states, inline errors, :active push feedback (s3).
|
|
24
|
+
- Forms: label above input, helper text in markup, error below, gap-2 (s3).
|
|
25
|
+
- Never useState for magnetic or continuous motion; use useMotionValue/useTransform (s4).
|
|
26
|
+
- Spring physics (stiffness 100, damping 20) on interactive elements; no linear easing (s4).
|
|
27
|
+
- Stagger list reveals; parent and children in the same client tree (s4).
|
|
28
|
+
- Animate only transform and opacity; grain only on fixed pointer-events-none layers (s5).
|
|
29
|
+
- z-index only for systemic layers (nav, modal, overlay) (s5).
|
|
30
|
+
- Never mix GSAP/Three.js with Framer Motion in one tree; clean up useEffect (s8).
|
|
31
|
+
- SaaS dashboards and feature sections use the Bento 2.0 motion-engine paradigm: perpetual,
|
|
32
|
+
memoized, isolated micro-animations and labels below cards (s9).
|
|
33
|
+
|
|
34
|
+
## Banned patterns
|
|
35
|
+
- Visual: neon/outer glows, oversaturated accents, gradient text on big headers (s7).
|
|
36
|
+
- AI purple/blue glow aesthetic and neon gradients (s3).
|
|
37
|
+
- Type: Inter, screaming oversized H1s, serif outside creative/editorial work (s7).
|
|
38
|
+
- Layout: three equal cards in a row; awkward gaps or floating elements (s7).
|
|
39
|
+
- Content: John Doe names, egg avatars, fake round numbers, Acme/Nexus names (s7).
|
|
40
|
+
- Copy: filler verbs like Elevate, Seamless, Unleash, Next-Gen (s7).
|
|
41
|
+
- Assets: Unsplash links (use picsum.photos/seed), default-state shadcn/ui (s7).
|
|
42
|
+
|
|
43
|
+
## Pre-flight
|
|
44
|
+
- [ ] Global state only to avoid deep prop drilling?
|
|
45
|
+
- [ ] Mobile collapse guaranteed for high-variance layouts?
|
|
46
|
+
- [ ] useEffect animations have strict cleanup?
|
|
47
|
+
- [ ] Empty, loading and error states provided?
|
|
48
|
+
- [ ] Cards omitted in favor of spacing where possible?
|
|
49
|
+
- [ ] CPU-heavy perpetual animations isolated in their own client components?
|
|
50
|
+
- [ ] One accent, one gray family, no AI purple?
|
|
51
|
+
- [ ] No centered hero when VARIANCE is above 4?
|
|
52
|
+
|
|
53
|
+
## Read SKILL.md for
|
|
54
|
+
- s4: Liquid Glass refraction, magnetic buttons, layout transitions.
|
|
55
|
+
- s8: creative arsenal vocabulary (hero, nav, grids, cards, scroll, media, text).
|
|
56
|
+
- s9: Bento 2.0 palette, surfaces, animation engine and the 5 card archetypes.
|
|
57
|
+
- s10: the full original pre-flight list.
|