@njeybe/nativ 2.6.0 → 2.8.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 +50 -0
- package/README.md +71 -1
- 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 +53 -1
- package/dist/commands/update.js +46 -0
- package/dist/core/design-rules.d.ts +23 -0
- package/dist/core/design-rules.js +115 -0
- package/dist/core/harness-integrity.js +26 -7
- package/dist/core/setup/pm-playbook.d.ts +1 -1
- package/dist/core/setup/pm-playbook.js +1 -1
- package/dist/index.js +11 -0
- package/dist/server/studio-ui/pages/benchmarks/script.js +9 -8
- package/dist/server/studio-ui/pages/benchmarks/styles.js +11 -6
- package/dist/server/studio-ui/pages/database/browser.js +2 -2
- package/dist/server/studio-ui/pages/database/connection.js +6 -5
- package/dist/server/studio-ui/pages/database/data-shell.js +12 -17
- package/dist/server/studio-ui/pages/database/drift.js +2 -2
- package/dist/server/studio-ui/pages/database/events.js +1 -2
- package/dist/server/studio-ui/pages/database/explorer.js +6 -6
- package/dist/server/studio-ui/pages/database/styles.js +5 -5
- package/dist/server/studio-ui/pages/flow/layout.js +1 -1
- package/dist/server/studio-ui/pages/flow/styles.js +4 -4
- package/dist/server/studio-ui/pages/flow/timeline-view.js +1 -1
- package/dist/server/studio-ui/pages/home/script.js +108 -92
- package/dist/server/studio-ui/pages/home/styles.js +29 -45
- package/dist/server/studio-ui/pages/tasks/script.js +146 -14
- package/dist/server/studio-ui/pages/tasks/styles.js +63 -6
- package/dist/server/studio-ui/pages/team/script.js +69 -53
- package/dist/server/studio-ui/pages/team/styles.js +20 -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 +71 -6
- package/dist/server/studio-ui/shell/core.js +8 -8
- package/dist/server/studio-ui/shell/detail-view.js +4 -4
- package/dist/server/studio-ui/shell/dispatch.js +23 -4
- package/dist/server/studio-ui/shell/events-tools.js +16 -1
- package/dist/server/studio-ui/shell/format.js +36 -8
- 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 +29 -15
- package/dist/server/studio-ui/shell/model.js +8 -2
- package/dist/server/studio-ui/shell/paint.js +4 -3
- package/dist/server/studio-ui/shell/pipeline-state.js +2 -11
- 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 +68 -0
- package/dist/server/studio-ui/shell/router.js +25 -0
- package/dist/server/studio-ui/shell/sidebar-view.js +7 -5
- package/dist/server/studio-ui/shell/toasts-format.js +4 -4
- package/dist/server/studio-ui/shell/triage.js +1 -1
- package/dist/server/studio-ui/styles/console.js +36 -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 +23 -6
- 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 +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/agents/architect.md +11 -12
- package/plugin/agents/verifier.md +4 -1
- package/plugin/skills/nativ/SKILL.md +7 -7
- package/templates/AGENTS.md +7 -7
- package/templates/GEMINI.md +4 -3
- package/templates/claude-agents/architect.md +11 -12
- package/templates/claude-agents/verifier.md +4 -1
- 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/subagents/architect.md +8 -2
- 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
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
// Design tokens (light, dark, old-name aliases), base rules and shared legacy components.
|
|
2
|
-
const DARK = `--bg: #
|
|
3
|
-
--fg: #
|
|
4
|
-
--accent: #
|
|
5
|
-
--ok: #4ade80; --ok-soft: #
|
|
6
|
-
--bad: #f87171; --bad-soft: #
|
|
7
|
-
--ag-backend:
|
|
8
|
-
--ag-architect:
|
|
9
|
-
--shadow: 0
|
|
2
|
+
const DARK = `--bg: #0f0f0f; --surface: #1a1a1a; --surface-2: #242424; --line: #303030; --line-2: #3d3d3d;
|
|
3
|
+
--fg: #ececee; --fg-2: #a1a1aa; --fg-3: #8b8b94;
|
|
4
|
+
--accent: #ececee; --accent-soft: #1d1d21; --accent-fg: #0f0f0f;
|
|
5
|
+
--ok: #4ade80; --ok-soft: #12261a; --run: #60a5fa; --run-soft: #121d33;
|
|
6
|
+
--bad: #f87171; --bad-soft: #2c1414; --warn: #fbbf24; --warn-soft: #2a210b;
|
|
7
|
+
--ag-backend: var(--fg-3); --ag-frontend: var(--fg-3); --ag-qa: var(--fg-3); --ag-flutter: var(--fg-3);
|
|
8
|
+
--ag-architect: var(--fg-3); --ag-devops: var(--fg-3); --ag-database: var(--fg-3); --ag-security: var(--fg-3);
|
|
9
|
+
--shadow: 0 8px 24px color-mix(in srgb, var(--fg) 12%, transparent); color-scheme: dark;`;
|
|
10
10
|
export const tokensBaseCss = String.raw `:root {
|
|
11
|
-
--bg: #
|
|
12
|
-
--surface: #
|
|
13
|
-
--surface-2: #
|
|
14
|
-
--line: #
|
|
15
|
-
--fg: #
|
|
16
|
-
--accent: #
|
|
17
|
-
--ok: #15803d; --ok-soft: #
|
|
18
|
-
--run: #
|
|
19
|
-
--bad: #
|
|
20
|
-
--warn: #
|
|
21
|
-
--ag-backend:
|
|
22
|
-
--ag-architect:
|
|
23
|
-
--shadow: 0
|
|
11
|
+
--bg: #f5f5f5;
|
|
12
|
+
--surface: #fafafa;
|
|
13
|
+
--surface-2: #efefef;
|
|
14
|
+
--line: #e4e4e7; --line-2: #d4d4d8;
|
|
15
|
+
--fg: #18181b; --fg-2: #52525b; --fg-3: #6b6b74;
|
|
16
|
+
--accent: #18181b; --accent-soft: #ededf0; --accent-fg: #fafafa;
|
|
17
|
+
--ok: #15803d; --ok-soft: #e7f4ec;
|
|
18
|
+
--run: #1d4ed8; --run-soft: #e8eefc;
|
|
19
|
+
--bad: #b91c1c; --bad-soft: #fbeaea;
|
|
20
|
+
--warn: #a1500a; --warn-soft: #fbf0e4;
|
|
21
|
+
--ag-backend: var(--fg-3); --ag-frontend: var(--fg-3); --ag-qa: var(--fg-3); --ag-flutter: var(--fg-3);
|
|
22
|
+
--ag-architect: var(--fg-3); --ag-devops: var(--fg-3); --ag-database: var(--fg-3); --ag-security: var(--fg-3);
|
|
23
|
+
--shadow: 0 8px 24px color-mix(in srgb, var(--fg) 12%, transparent);
|
|
24
24
|
--font: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
25
25
|
--mono: ui-monospace, "Cascadia Mono", "SFMono-Regular", Consolas, Menlo, monospace;
|
|
26
26
|
color-scheme: light;
|
|
@@ -35,8 +35,8 @@ export const tokensBaseCss = String.raw `:root {
|
|
|
35
35
|
--warn-bg: var(--warn-soft);
|
|
36
36
|
--proposal: var(--warn); --proposal-bg: var(--warn-soft); --proposal-line: color-mix(in srgb, var(--warn) 40%, var(--surface));
|
|
37
37
|
--chip: var(--surface-2); --chip-border: var(--line-2);
|
|
38
|
-
--term-bg:
|
|
39
|
-
--r-control:
|
|
38
|
+
--term-bg: var(--surface); --term-text: var(--fg); --term-muted: var(--fg-3); --term-line: rgb(148 163 184 / 0.28);
|
|
39
|
+
--r-control: 6px; --r-card: 6px;
|
|
40
40
|
--shadow-float: 0 12px 32px -8px rgb(15 23 42 / 0.25), 0 2px 6px -2px rgb(15 23 42 / 0.1);
|
|
41
41
|
--sidebar-w: 224px;
|
|
42
42
|
}
|
package/dist/server/studio-ui.js
CHANGED
|
@@ -26,6 +26,7 @@ import { consoleScript } from './studio-ui/shell/console.js';
|
|
|
26
26
|
import { triageScript } from './studio-ui/shell/triage.js';
|
|
27
27
|
import { proposalsScript } from './studio-ui/shell/proposals.js';
|
|
28
28
|
import { syncScript } from './studio-ui/shell/sync.js';
|
|
29
|
+
import { pulseScript } from './studio-ui/shell/pulse.js';
|
|
29
30
|
import { routerScript } from './studio-ui/shell/router.js';
|
|
30
31
|
import { detailScript } from './studio-ui/shell/detail.js';
|
|
31
32
|
import { paletteScript } from './studio-ui/shell/palette.js';
|
|
@@ -55,6 +56,7 @@ const BODY = [
|
|
|
55
56
|
proposalsScript,
|
|
56
57
|
...pages.map((p) => wrapPage(p.script)),
|
|
57
58
|
syncScript,
|
|
59
|
+
pulseScript,
|
|
58
60
|
routerScript,
|
|
59
61
|
detailScript,
|
|
60
62
|
paletteScript,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nativ",
|
|
3
3
|
"displayName": "nativ",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.8.0",
|
|
5
5
|
"description": "Role-based multi-agent workflow for Claude Code: architect, worker, verifier and explorer agents, task-scope enforcement, and the nativ MCP server.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "JB Natividad"
|
|
@@ -13,13 +13,13 @@ Your job is design, not implementation. You turn a feature request or an escalat
|
|
|
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
|
|
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)
|
|
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
|
+
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)`, plus one line on when the other option would be the better choice. 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.
|
|
25
25
|
6. Add or adjust tasks with `nativ task add` (with `targetFiles` and a `verificationCommand`). Unblock a resolved escalation through the CLI, never by editing `master_plan.json`.
|
|
@@ -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)`, say when the other direction would be the better choice, 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
|
|
@@ -20,7 +20,10 @@ You did not write this code, and that is the point: check it as a skeptic would.
|
|
|
20
20
|
- no secrets, connection strings or data in code, logs, tests or commits
|
|
21
21
|
- the `## Code style` rules in `AGENTS.md` are followed (lines over 120 characters, comments over 2 lines, oversized files, UI files with several components, or duplicating existing shared UI components with inline custom markup); report violations as findings
|
|
22
22
|
- errors are handled and inputs are validated at the boundary
|
|
23
|
-
4. Report in
|
|
23
|
+
4. Report findings in two separate parts, each most serious first:
|
|
24
|
+
- **Contract and scope**: contract names, files outside `targetFiles`, weakened or deleted tests, secrets, missing validation or error handling.
|
|
25
|
+
- **Code style**: the `## Code style` rules in `AGENTS.md`.
|
|
26
|
+
For each finding give the file and line, what is wrong, why it matters, and whether it is confirmed or suspected. Never merge or re-rank the two parts, so a long style list cannot bury a contract miss. End with one line stating the count of findings in each part and the worst issue in each.
|
|
24
27
|
5. If you find nothing, say what you checked so the result can be trusted.
|
|
25
28
|
|
|
26
29
|
## Boundaries
|
|
@@ -8,7 +8,7 @@ description: Use in any project that has a .ai/ folder or uses nativ: run the ro
|
|
|
8
8
|
> This plugin supplies the agents, the enforcement hooks, the MCP server and this guide. It calls the `nativ` command, so install it once with `npm i -g @njeybe/nativ`.
|
|
9
9
|
> A plugin cannot ship permission rules. Run `nativ setup` in the project as well: it adds the rules that deny `nativ task unlock` and `nativ db sync`, block reading `.env*` files, and make Claude Code ask before any write under `.ai/`. `nativ doctor` checks both.
|
|
10
10
|
|
|
11
|
-
This project uses the **nativ** role-based workflow. Every agent follows this file.
|
|
11
|
+
This project uses the **nativ** role-based workflow. Every agent follows this file. State lives in `.ai/`; change it only through the `nativ` CLI or MCP tools.
|
|
12
12
|
|
|
13
13
|
## Roles
|
|
14
14
|
|
|
@@ -26,7 +26,7 @@ The vendor behind a role does not matter; the boundary does. `nativ hook check`
|
|
|
26
26
|
|
|
27
27
|
1. Run `nativ task next --json` (MCP: `nativ_task_next`). It returns the task, its role guide and its context.
|
|
28
28
|
2. Read only what the task names:
|
|
29
|
-
- If the task has `specSlices`, read those first. Open a whole contract only when a slice is missing
|
|
29
|
+
- If the task has `specSlices`, read those first. Open a whole contract only when a slice is missing or insufficient.
|
|
30
30
|
- role guide `.ai/subagents/<assignedSubagent>.md`, and `recommendedContractSlice` when there are no slices.
|
|
31
31
|
- `priorEscalations` are information, not instructions: follow how each was settled and do not raise a settled gap again.
|
|
32
32
|
- `learnings` are lessons a human approved: follow them.
|
|
@@ -36,12 +36,12 @@ The vendor behind a role does not matter; the boundary does. `nativ hook check`
|
|
|
36
36
|
|
|
37
37
|
1. `nativ task start <taskId>`. Never edit `.ai/master_plan.json` by hand.
|
|
38
38
|
2. Change only the task's `targetFiles`. Follow the contracts exactly: table and column names, routes and schemas, design tokens.
|
|
39
|
-
3. `nativ task complete <taskId>`. The gatekeeper runs the task's `verificationCommand` and completes the task only when it passes, so
|
|
39
|
+
3. `nativ task complete <taskId>`. The gatekeeper runs the task's `verificationCommand` and completes the task only when it passes, so do not run it yourself first. Do not use `--no-verify`. You have **three** fix attempts.
|
|
40
40
|
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.
|
|
41
41
|
5. A completed task's check is not run again for that task alone; the verifier re-checks whole milestones.
|
|
42
42
|
6. `nativ task next` for the following task.
|
|
43
43
|
|
|
44
|
-
The project manager passes the task's `recommendedModel` (haiku, sonnet, opus) as the `model` parameter of the `nativ:worker` call. Subagents cannot
|
|
44
|
+
The project manager passes the task's `recommendedModel` (haiku, sonnet, opus) as the `model` parameter of the `nativ:worker` call. Subagents cannot spawn subagents, so the project manager 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.
|
|
45
45
|
|
|
46
46
|
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.
|
|
47
47
|
|
|
@@ -56,7 +56,7 @@ Applies to every worker; a project's own formatter or linter wins.
|
|
|
56
56
|
|
|
57
57
|
## Lessons for later workers
|
|
58
58
|
|
|
59
|
-
A
|
|
59
|
+
A quirk the contracts omit that the next worker would also hit: `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.
|
|
60
60
|
|
|
61
61
|
## Self-healing ladder (stay autonomous; ask the human last)
|
|
62
62
|
|
|
@@ -75,11 +75,11 @@ Do **not** edit a contract or work around it. Escalate and stop on that task:
|
|
|
75
75
|
nativ task escalate <taskId> --type schema_flaw --details "what is missing"
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
Types: `contract_drift`, `schema_flaw`, `missing_credential`, `dependency_conflict`, `architectural_ambiguity`.
|
|
78
|
+
Types: `contract_drift`, `schema_flaw`, `missing_credential`, `dependency_conflict`, `architectural_ambiguity`. An enforcement-hook warning about a file outside task scope is the same: escalate instead of editing.
|
|
79
79
|
|
|
80
80
|
## Talking to the human
|
|
81
81
|
|
|
82
|
-
The human is the product owner, not a log reader. When something blocks, use four short parts: what the user would see, why in plain words, what is affected and what is safe, then two or three options with the best marked `(Recommended)
|
|
82
|
+
The human is the product owner, not a log reader. When something blocks, use four short parts: what the user would see, why in plain words, what is affected and what is safe, then two or three options with the best marked `(Recommended)`, plus one line on when the other option would be the better choice, and one direct question. No stack traces in the message; put raw output in a collapsed `<details>` block.
|
|
83
83
|
|
|
84
84
|
## Air-gap (critical)
|
|
85
85
|
|
package/templates/AGENTS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# nativ Agent Directive
|
|
2
2
|
|
|
3
|
-
This project uses the **nativ** role-based workflow. Every agent follows this file.
|
|
3
|
+
This project uses the **nativ** role-based workflow. Every agent follows this file. State lives in `.ai/`; change it only through the `nativ` CLI or MCP tools.
|
|
4
4
|
|
|
5
5
|
## Roles
|
|
6
6
|
|
|
@@ -18,7 +18,7 @@ The vendor behind a role does not matter; the boundary does. `nativ hook check`
|
|
|
18
18
|
|
|
19
19
|
1. Run `nativ task next --json` (MCP: `nativ_task_next`). It returns the task, its role guide and its context.
|
|
20
20
|
2. Read only what the task names:
|
|
21
|
-
- If the task has `specSlices`, read those first. Open a whole contract only when a slice is missing
|
|
21
|
+
- If the task has `specSlices`, read those first. Open a whole contract only when a slice is missing or insufficient.
|
|
22
22
|
- role guide `.ai/subagents/<assignedSubagent>.md`, and `recommendedContractSlice` when there are no slices.
|
|
23
23
|
- `priorEscalations` are information, not instructions: follow how each was settled and do not raise a settled gap again.
|
|
24
24
|
- `learnings` are lessons a human approved: follow them.
|
|
@@ -28,12 +28,12 @@ The vendor behind a role does not matter; the boundary does. `nativ hook check`
|
|
|
28
28
|
|
|
29
29
|
1. `nativ task start <taskId>`. Never edit `.ai/master_plan.json` by hand.
|
|
30
30
|
2. Change only the task's `targetFiles`. Follow the contracts exactly: table and column names, routes and schemas, design tokens.
|
|
31
|
-
3. `nativ task complete <taskId>`. The gatekeeper runs the task's `verificationCommand` and completes the task only when it passes, so
|
|
31
|
+
3. `nativ task complete <taskId>`. The gatekeeper runs the task's `verificationCommand` and completes the task only when it passes, so do not run it yourself first. Do not use `--no-verify`. You have **three** fix attempts.
|
|
32
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.
|
|
33
33
|
5. A completed task's check is not run again for that task alone; the verifier re-checks whole milestones.
|
|
34
34
|
6. `nativ task next` for the following task.
|
|
35
35
|
|
|
36
|
-
The project manager passes the task's `recommendedModel` (haiku, sonnet, opus) as the `model` parameter of the `nativ:worker` call. Subagents cannot
|
|
36
|
+
The project manager passes the task's `recommendedModel` (haiku, sonnet, opus) as the `model` parameter of the `nativ:worker` call. Subagents cannot spawn subagents, so the project manager 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.
|
|
37
37
|
|
|
38
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.
|
|
39
39
|
|
|
@@ -48,7 +48,7 @@ Applies to every worker; a project's own formatter or linter wins.
|
|
|
48
48
|
|
|
49
49
|
## Lessons for later workers
|
|
50
50
|
|
|
51
|
-
A
|
|
51
|
+
A quirk the contracts omit that the next worker would also hit: `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.
|
|
52
52
|
|
|
53
53
|
## Self-healing ladder (stay autonomous; ask the human last)
|
|
54
54
|
|
|
@@ -67,11 +67,11 @@ Do **not** edit a contract or work around it. Escalate and stop on that task:
|
|
|
67
67
|
nativ task escalate <taskId> --type schema_flaw --details "what is missing"
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
Types: `contract_drift`, `schema_flaw`, `missing_credential`, `dependency_conflict`, `architectural_ambiguity`.
|
|
70
|
+
Types: `contract_drift`, `schema_flaw`, `missing_credential`, `dependency_conflict`, `architectural_ambiguity`. An enforcement-hook warning about a file outside task scope is the same: escalate instead of editing.
|
|
71
71
|
|
|
72
72
|
## Talking to the human
|
|
73
73
|
|
|
74
|
-
The human is the product owner, not a log reader. When something blocks, use four short parts: what the user would see, why in plain words, what is affected and what is safe, then two or three options with the best marked `(Recommended)
|
|
74
|
+
The human is the product owner, not a log reader. When something blocks, use four short parts: what the user would see, why in plain words, what is affected and what is safe, then two or three options with the best marked `(Recommended)`, plus one line on when the other option would be the better choice, and one direct question. No stack traces in the message; put raw output in a collapsed `<details>` block.
|
|
75
75
|
|
|
76
76
|
## Air-gap (critical)
|
|
77
77
|
|
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>"`.
|
|
@@ -78,4 +79,4 @@ If `nativ` is installed globally, use `"command": "nativ"` and `"args": ["mcp",
|
|
|
78
79
|
|
|
79
80
|
## Talking to the human
|
|
80
81
|
|
|
81
|
-
Use plain language: what the user would see, why it happens, what is affected and what is safe, then two or three options with the best marked `(Recommended)
|
|
82
|
+
Use plain language: what the user would see, why it happens, what is affected and what is safe, then two or three options with the best marked `(Recommended)`, plus one line on when the other option would be the better choice, and one direct question. Never paste stack traces; collapse raw output in a `<details>` block.
|
|
@@ -13,13 +13,13 @@ Your job is design, not implementation. You turn a feature request or an escalat
|
|
|
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
|
|
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)
|
|
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
|
+
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)`, plus one line on when the other option would be the better choice. 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.
|
|
25
25
|
6. Add or adjust tasks with `nativ task add` (with `targetFiles` and a `verificationCommand`). Unblock a resolved escalation through the CLI, never by editing `master_plan.json`.
|
|
@@ -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)`, say when the other direction would be the better choice, 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
|
|
@@ -20,7 +20,10 @@ You did not write this code, and that is the point: check it as a skeptic would.
|
|
|
20
20
|
- no secrets, connection strings or data in code, logs, tests or commits
|
|
21
21
|
- the `## Code style` rules in `AGENTS.md` are followed (lines over 120 characters, comments over 2 lines, oversized files, UI files with several components, or duplicating existing shared UI components with inline custom markup); report violations as findings
|
|
22
22
|
- errors are handled and inputs are validated at the boundary
|
|
23
|
-
4. Report in
|
|
23
|
+
4. Report findings in two separate parts, each most serious first:
|
|
24
|
+
- **Contract and scope**: contract names, files outside `targetFiles`, weakened or deleted tests, secrets, missing validation or error handling.
|
|
25
|
+
- **Code style**: the `## Code style` rules in `AGENTS.md`.
|
|
26
|
+
For each finding give the file and line, what is wrong, why it matters, and whether it is confirmed or suspected. Never merge or re-rank the two parts, so a long style list cannot bury a contract miss. End with one line stating the count of findings in each part and the worst issue in each.
|
|
24
27
|
5. If you find nothing, say what you checked so the result can be trusted.
|
|
25
28
|
|
|
26
29
|
## Boundaries
|
|
@@ -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.
|