@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.
Files changed (138) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/README.md +100 -5
  3. package/dist/commands/design-check.d.ts +4 -0
  4. package/dist/commands/design-check.js +76 -0
  5. package/dist/commands/init.d.ts +1 -0
  6. package/dist/commands/init.js +55 -11
  7. package/dist/commands/notify.d.ts +2 -0
  8. package/dist/commands/notify.js +25 -0
  9. package/dist/commands/session.d.ts +22 -0
  10. package/dist/commands/session.js +106 -0
  11. package/dist/commands/task/task-add.js +1 -1
  12. package/dist/commands/task/task-common.js +6 -6
  13. package/dist/commands/task/task-escalate.js +8 -10
  14. package/dist/commands/task/task-lifecycle.d.ts +7 -1
  15. package/dist/commands/task/task-lifecycle.js +30 -5
  16. package/dist/commands/task/task-query.d.ts +2 -0
  17. package/dist/commands/task/task-query.js +27 -12
  18. package/dist/commands/task/task-reclaim.d.ts +20 -0
  19. package/dist/commands/task/task-reclaim.js +87 -0
  20. package/dist/commands/task.d.ts +2 -0
  21. package/dist/commands/task.js +1 -0
  22. package/dist/commands/triage.js +3 -3
  23. package/dist/commands/update.js +46 -0
  24. package/dist/commands/validate.js +1 -0
  25. package/dist/commands/verify.js +21 -5
  26. package/dist/core/design-rules.d.ts +23 -0
  27. package/dist/core/design-rules.js +115 -0
  28. package/dist/core/enforcement.js +18 -17
  29. package/dist/core/harness-integrity.js +26 -7
  30. package/dist/core/lock-manager.d.ts +6 -0
  31. package/dist/core/lock-manager.js +50 -41
  32. package/dist/core/notify.d.ts +38 -0
  33. package/dist/core/notify.js +133 -0
  34. package/dist/core/profiles.js +7 -16
  35. package/dist/core/session-memory.d.ts +42 -0
  36. package/dist/core/session-memory.js +121 -0
  37. package/dist/core/setup/pm-playbook.d.ts +5 -0
  38. package/dist/core/setup/pm-playbook.js +26 -0
  39. package/dist/core/setup/session-context.js +35 -2
  40. package/dist/core/setup/setup-planner.js +2 -2
  41. package/dist/core/setup/types.d.ts +2 -0
  42. package/dist/core/setup/types.js +5 -1
  43. package/dist/core/task-claims.d.ts +15 -0
  44. package/dist/core/task-claims.js +32 -0
  45. package/dist/core/tier1-liaison.d.ts +1 -0
  46. package/dist/core/tier1-liaison.js +25 -27
  47. package/dist/core/verifier/output-digest.d.ts +19 -0
  48. package/dist/core/verifier/output-digest.js +48 -0
  49. package/dist/db/data-engine.js +33 -32
  50. package/dist/db/introspector.js +61 -60
  51. package/dist/db/sqlite.d.ts +3 -0
  52. package/dist/db/sqlite.js +10 -0
  53. package/dist/governor/circuit-breaker.js +12 -0
  54. package/dist/governor/patch-applier.d.ts +1 -0
  55. package/dist/governor/patch-applier.js +3 -7
  56. package/dist/index.js +40 -6
  57. package/dist/mcp/server.d.ts +1 -1
  58. package/dist/mcp/server.js +53 -14
  59. package/dist/providers/claude-api.js +3 -0
  60. package/dist/providers/gemini.js +4 -1
  61. package/dist/providers/registry.d.ts +6 -2
  62. package/dist/providers/registry.js +28 -16
  63. package/dist/providers/types.d.ts +4 -1
  64. package/dist/runner/agent-supervisor.js +2 -2
  65. package/dist/runner/cli-config.js +1 -1
  66. package/dist/scanner/types.d.ts +5 -1
  67. package/dist/scanner/types.js +7 -0
  68. package/dist/server/routes/task-routes.d.ts +2 -0
  69. package/dist/server/routes/triage-routes.js +3 -18
  70. package/dist/server/studio-ui/pages/benchmarks/styles.js +8 -5
  71. package/dist/server/studio-ui/pages/database/browser.js +1 -1
  72. package/dist/server/studio-ui/pages/database/connection.js +1 -1
  73. package/dist/server/studio-ui/pages/database/data-shell.js +5 -5
  74. package/dist/server/studio-ui/pages/database/drift.js +1 -1
  75. package/dist/server/studio-ui/pages/database/explorer.js +2 -2
  76. package/dist/server/studio-ui/pages/database/styles.js +5 -5
  77. package/dist/server/studio-ui/pages/flow/styles.js +3 -3
  78. package/dist/server/studio-ui/pages/home/script.js +110 -91
  79. package/dist/server/studio-ui/pages/home/styles.js +33 -45
  80. package/dist/server/studio-ui/pages/tasks/script.js +150 -3
  81. package/dist/server/studio-ui/pages/tasks/styles.js +63 -6
  82. package/dist/server/studio-ui/pages/team/script.js +49 -52
  83. package/dist/server/studio-ui/pages/team/styles.js +21 -20
  84. package/dist/server/studio-ui/pages/worktrees/script.js +47 -35
  85. package/dist/server/studio-ui/pages/worktrees/styles.js +12 -10
  86. package/dist/server/studio-ui/shell/brand.d.ts +4 -0
  87. package/dist/server/studio-ui/shell/brand.js +16 -0
  88. package/dist/server/studio-ui/shell/console.js +61 -2
  89. package/dist/server/studio-ui/shell/core.js +8 -8
  90. package/dist/server/studio-ui/shell/detail-view.js +1 -1
  91. package/dist/server/studio-ui/shell/dispatch.js +18 -0
  92. package/dist/server/studio-ui/shell/events-tools.js +5 -1
  93. package/dist/server/studio-ui/shell/format.js +5 -6
  94. package/dist/server/studio-ui/shell/icons.js +23 -15
  95. package/dist/server/studio-ui/shell/markup-head.js +11 -6
  96. package/dist/server/studio-ui/shell/markup-tools.js +19 -10
  97. package/dist/server/studio-ui/shell/paint.js +3 -0
  98. package/dist/server/studio-ui/shell/pipeline-state.js +1 -1
  99. package/dist/server/studio-ui/shell/proposals.js +6 -2
  100. package/dist/server/studio-ui/shell/pulse.d.ts +1 -0
  101. package/dist/server/studio-ui/shell/pulse.js +67 -0
  102. package/dist/server/studio-ui/shell/router.js +25 -0
  103. package/dist/server/studio-ui/shell/sidebar-view.js +6 -3
  104. package/dist/server/studio-ui/shell/toasts-format.js +4 -4
  105. package/dist/server/studio-ui/styles/console.js +33 -13
  106. package/dist/server/studio-ui/styles/dialogs.js +4 -4
  107. package/dist/server/studio-ui/styles/responsive.js +8 -0
  108. package/dist/server/studio-ui/styles/shell.js +24 -5
  109. package/dist/server/studio-ui/styles/strategist.js +10 -10
  110. package/dist/server/studio-ui/styles/tokens-base.js +23 -23
  111. package/dist/server/studio-ui.js +2 -0
  112. package/package.json +2 -2
  113. package/plugin/.claude-plugin/plugin.json +1 -1
  114. package/plugin/agents/architect.md +11 -12
  115. package/plugin/agents/explorer.md +1 -1
  116. package/plugin/agents/verifier.md +2 -2
  117. package/plugin/agents/worker.md +5 -7
  118. package/plugin/skills/nativ/SKILL.md +36 -49
  119. package/templates/AGENTS.md +36 -49
  120. package/templates/CLAUDE.md +1 -41
  121. package/templates/GEMINI.md +3 -2
  122. package/templates/claude-agents/architect.md +11 -12
  123. package/templates/claude-agents/explorer.md +1 -1
  124. package/templates/claude-agents/verifier.md +2 -2
  125. package/templates/claude-agents/worker.md +5 -7
  126. package/templates/design/taste/LICENSE +21 -0
  127. package/templates/design/taste/SOURCE.md +28 -0
  128. package/templates/design/taste/v1/DIGEST.md +57 -0
  129. package/templates/design/taste/v1/SKILL.md +226 -0
  130. package/templates/design/taste/v2/DIGEST.md +62 -0
  131. package/templates/design/taste/v2/SKILL.md +1206 -0
  132. package/templates/dot-ai/api_contracts.json +66 -66
  133. package/templates/dot-ai/context.md +38 -38
  134. package/templates/dot-ai/db_schema.json +39 -39
  135. package/templates/dot-ai/subagents/architect.md +6 -0
  136. package/templates/dot-ai/subagents/flutter-developer.md +2 -11
  137. package/templates/dot-ai/subagents/frontend.md +47 -44
  138. package/templates/dot-ai/ui_specs.md +15 -36
@@ -1,66 +1,66 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "version": "1.0.0",
4
- "projectName": "{{PROJECT_NAME}}",
5
- "updatedAt": "{{TIMESTAMP}}",
6
- "baseUrl": "/api/v1",
7
- "authScheme": "Bearer JWT",
8
- "endpoints": [
9
- {
10
- "id": "health-check",
11
- "path": "/health",
12
- "method": "GET",
13
- "description": "System health and runtime status check",
14
- "auth": false,
15
- "request": {
16
- "headers": {},
17
- "queryParams": {},
18
- "pathParams": {},
19
- "body": null
20
- },
21
- "responses": {
22
- "200": {
23
- "description": "System is healthy and operational",
24
- "body": {
25
- "status": "ok",
26
- "uptime": "number",
27
- "timestamp": "string"
28
- }
29
- }
30
- }
31
- },
32
- {
33
- "id": "example-entity-list",
34
- "path": "/entities",
35
- "method": "GET",
36
- "description": "Demonstration collection endpoint. The architect updates this during Phase 1 API design.",
37
- "auth": true,
38
- "request": {
39
- "headers": {
40
- "Authorization": "Bearer <token>"
41
- },
42
- "queryParams": {
43
- "limit": "integer (optional, default 20)",
44
- "offset": "integer (optional, default 0)"
45
- },
46
- "pathParams": {},
47
- "body": null
48
- },
49
- "responses": {
50
- "200": {
51
- "description": "List of entities matching query filter",
52
- "body": {
53
- "data": "array of example_entity",
54
- "total": "integer"
55
- }
56
- },
57
- "401": {
58
- "description": "Unauthorized access missing or invalid token",
59
- "body": {
60
- "error": "Unauthorized"
61
- }
62
- }
63
- }
64
- }
65
- ]
66
- }
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "version": "1.0.0",
4
+ "projectName": "{{PROJECT_NAME}}",
5
+ "updatedAt": "{{TIMESTAMP}}",
6
+ "baseUrl": "/api/v1",
7
+ "authScheme": "Bearer JWT",
8
+ "endpoints": [
9
+ {
10
+ "id": "health-check",
11
+ "path": "/health",
12
+ "method": "GET",
13
+ "description": "System health and runtime status check",
14
+ "auth": false,
15
+ "request": {
16
+ "headers": {},
17
+ "queryParams": {},
18
+ "pathParams": {},
19
+ "body": null
20
+ },
21
+ "responses": {
22
+ "200": {
23
+ "description": "System is healthy and operational",
24
+ "body": {
25
+ "status": "ok",
26
+ "uptime": "number",
27
+ "timestamp": "string"
28
+ }
29
+ }
30
+ }
31
+ },
32
+ {
33
+ "id": "example-entity-list",
34
+ "path": "/entities",
35
+ "method": "GET",
36
+ "description": "Demonstration collection endpoint. The architect updates this during Phase 1 API design.",
37
+ "auth": true,
38
+ "request": {
39
+ "headers": {
40
+ "Authorization": "Bearer <token>"
41
+ },
42
+ "queryParams": {
43
+ "limit": "integer (optional, default 20)",
44
+ "offset": "integer (optional, default 0)"
45
+ },
46
+ "pathParams": {},
47
+ "body": null
48
+ },
49
+ "responses": {
50
+ "200": {
51
+ "description": "List of entities matching query filter",
52
+ "body": {
53
+ "data": "array of example_entity",
54
+ "total": "integer"
55
+ }
56
+ },
57
+ "401": {
58
+ "description": "Unauthorized access missing or invalid token",
59
+ "body": {
60
+ "error": "Unauthorized"
61
+ }
62
+ }
63
+ }
64
+ }
65
+ ]
66
+ }
@@ -1,38 +1,38 @@
1
- # Project Context & Guardrails
2
-
3
- ## 1. System Overview & Repository Profile
4
- - **Project Name:** {{PROJECT_NAME}}
5
- - **Repository Type:** {{REPOSITORY_TYPE}}
6
- - **Workspace Topology:** {{WORKSPACE_TOPOLOGY}}
7
- - **Primary Goal:** {{PROJECT_GOAL}}
8
-
9
- ## 2. Technology Stack & Ecosystem Manifests
10
- - **Language / Runtime:** {{DETECTED_RUNTIME}}
11
- - **Framework:** {{DETECTED_FRAMEWORK}}
12
- - **Database / ORM:** {{DETECTED_DATABASE_ORM}}
13
- - **ORM / Migration Config:** {{DETECTED_ORM_CONFIG}}
14
- - **Styling / UI Library:** {{DETECTED_STYLING}}
15
- - **Testing Framework:** {{DETECTED_TESTING}}
16
- - **Package Manager:** {{DETECTED_PACKAGE_MANAGER}}
17
- - **Discovered Manifests:** {{ECOSYSTEM_MANIFESTS}}
18
-
19
- ## 3. Architecture & Codebase Layout
20
- - **Source Root:** `{{SOURCE_ROOT}}`
21
- - **Core Pattern:** {{ARCHITECTURE_PATTERN}}
22
- - **Key Directories:**
23
- {{KEY_DIRECTORIES}}
24
-
25
- ## 4. Engineering Guardrails & Constraints
26
- 1. **Strict Role Pipeline (provider-agnostic):** Architect (designs contracts and resolves escalations) -> Project Manager (orchestrates the task loop) -> Workers (specialized sub-agents) -> Verifier (independent checks). Roles are fixed; the model or vendor behind a role is configurable. Claude Code is the default host for every role, and other agents can be plugged in.
27
- 2. **Zero Breaking Changes:** Avoid breaking existing public interfaces, CLI options, or database contracts without explicit migration strategies.
28
- 3. **Schema Authority:** Database modifications must strictly align with `.ai/db_schema.json`.
29
- 4. **UI Fidelity:** User interface components must strictly match `.ai/ui_specs.md`.
30
- 5. **Secrets & Security:** Never hardcode API keys, passwords, or tokens. Use environment variables. Validate all external inputs.
31
- 6. **Testing Requirement:** Every newly introduced endpoint, service, or complex component must include automated tests before marking tasks completed in `.ai/master_plan.json`.
32
-
33
- ## 5. Execution Boundaries (Sub-Agent Allocation)
34
- - **`backend`:** Core services, CLI logic, APIs, server runtime code, and route handlers.
35
- - **`frontend`:** Web application views, client components, or terminal UI presentation.
36
- - **`database`:** Schema definitions, ORM models, migrations, and seed scripts matching `.ai/db_schema.json`.
37
- - **`qa-tester`:** Unit tests, integration tests, and verification scripts.
38
- - **Specialized Units:** `flutter-developer`, `devops-agent`, `security-auditor`, `db-migration` when required.
1
+ # Project Context & Guardrails
2
+
3
+ ## 1. System Overview & Repository Profile
4
+ - **Project Name:** {{PROJECT_NAME}}
5
+ - **Repository Type:** {{REPOSITORY_TYPE}}
6
+ - **Workspace Topology:** {{WORKSPACE_TOPOLOGY}}
7
+ - **Primary Goal:** {{PROJECT_GOAL}}
8
+
9
+ ## 2. Technology Stack & Ecosystem Manifests
10
+ - **Language / Runtime:** {{DETECTED_RUNTIME}}
11
+ - **Framework:** {{DETECTED_FRAMEWORK}}
12
+ - **Database / ORM:** {{DETECTED_DATABASE_ORM}}
13
+ - **ORM / Migration Config:** {{DETECTED_ORM_CONFIG}}
14
+ - **Styling / UI Library:** {{DETECTED_STYLING}}
15
+ - **Testing Framework:** {{DETECTED_TESTING}}
16
+ - **Package Manager:** {{DETECTED_PACKAGE_MANAGER}}
17
+ - **Discovered Manifests:** {{ECOSYSTEM_MANIFESTS}}
18
+
19
+ ## 3. Architecture & Codebase Layout
20
+ - **Source Root:** `{{SOURCE_ROOT}}`
21
+ - **Core Pattern:** {{ARCHITECTURE_PATTERN}}
22
+ - **Key Directories:**
23
+ {{KEY_DIRECTORIES}}
24
+
25
+ ## 4. Engineering Guardrails & Constraints
26
+ 1. **Strict Role Pipeline (provider-agnostic):** Architect (designs contracts and resolves escalations) -> Project Manager (orchestrates the task loop) -> Workers (specialized sub-agents) -> Verifier (independent checks). Roles are fixed; the model or vendor behind a role is configurable. Claude Code is the default host for every role, and other agents can be plugged in.
27
+ 2. **Zero Breaking Changes:** Avoid breaking existing public interfaces, CLI options, or database contracts without explicit migration strategies.
28
+ 3. **Schema Authority:** Database modifications must strictly align with `.ai/db_schema.json`.
29
+ 4. **UI Fidelity:** User interface components must strictly match `.ai/ui_specs.md`.
30
+ 5. **Secrets & Security:** Never hardcode API keys, passwords, or tokens. Use environment variables. Validate all external inputs.
31
+ 6. **Testing Requirement:** Every newly introduced endpoint, service, or complex component must include automated tests before marking tasks completed in `.ai/master_plan.json`.
32
+
33
+ ## 5. Execution Boundaries (Sub-Agent Allocation)
34
+ - **`backend`:** Core services, CLI logic, APIs, server runtime code, and route handlers.
35
+ - **`frontend`:** Web application views, client components, or terminal UI presentation.
36
+ - **`database`:** Schema definitions, ORM models, migrations, and seed scripts matching `.ai/db_schema.json`.
37
+ - **`qa-tester`:** Unit tests, integration tests, and verification scripts.
38
+ - **Specialized Units:** `flutter-developer`, `devops-agent`, `security-auditor`, `db-migration` when required.
@@ -1,39 +1,39 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "version": "1.0.0",
4
- "projectName": "{{PROJECT_NAME}}",
5
- "updatedAt": "{{TIMESTAMP}}",
6
- "engine": "{{DETECTED_DATABASE_ENGINE}}",
7
- "tables": [
8
- {
9
- "name": "example_entity",
10
- "description": "Demonstration table definition. The architect updates this during Phase 1A.",
11
- "columns": [
12
- {
13
- "name": "id",
14
- "type": "UUID",
15
- "primaryKey": true,
16
- "nullable": false,
17
- "default": "gen_random_uuid()"
18
- },
19
- {
20
- "name": "created_at",
21
- "type": "TIMESTAMP",
22
- "primaryKey": false,
23
- "nullable": false,
24
- "default": "NOW()"
25
- },
26
- {
27
- "name": "updated_at",
28
- "type": "TIMESTAMP",
29
- "primaryKey": false,
30
- "nullable": false,
31
- "default": "NOW()"
32
- }
33
- ],
34
- "indexes": [],
35
- "foreignKeys": []
36
- }
37
- ],
38
- "migrations": []
39
- }
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "version": "1.0.0",
4
+ "projectName": "{{PROJECT_NAME}}",
5
+ "updatedAt": "{{TIMESTAMP}}",
6
+ "engine": "{{DETECTED_DATABASE_ENGINE}}",
7
+ "tables": [
8
+ {
9
+ "name": "example_entity",
10
+ "description": "Demonstration table definition. The architect updates this during Phase 1A.",
11
+ "columns": [
12
+ {
13
+ "name": "id",
14
+ "type": "UUID",
15
+ "primaryKey": true,
16
+ "nullable": false,
17
+ "default": "gen_random_uuid()"
18
+ },
19
+ {
20
+ "name": "created_at",
21
+ "type": "TIMESTAMP",
22
+ "primaryKey": false,
23
+ "nullable": false,
24
+ "default": "NOW()"
25
+ },
26
+ {
27
+ "name": "updated_at",
28
+ "type": "TIMESTAMP",
29
+ "primaryKey": false,
30
+ "nullable": false,
31
+ "default": "NOW()"
32
+ }
33
+ ],
34
+ "indexes": [],
35
+ "foreignKeys": []
36
+ }
37
+ ],
38
+ "migrations": []
39
+ }
@@ -16,6 +16,12 @@ You are the **Architect**. You design; you do not build. Turn a feature request
16
16
  4. **API contracts.** Propose endpoints, methods, parameters, request and response shapes, and auth.
17
17
  5. **UI and UX.** Work in this order:
18
18
  - Pick Quick, Standard or Full planning level (the human can override).
19
+ - Design Profile: fill that section of `.ai/ui_specs.md` before wireframes.
20
+ - Pick the profile with a one-line reason: `taste-v2` for sites, portfolios, redesigns; `taste-v1` for apps, dashboards; native mobile or terminal UI: no profile, leave the placeholder and say so.
21
+ - Read `package.json` for Stack notes.
22
+ - Web: always write the design read, the dials (taste-v2 section 1.B presets first), the design system and the redesign mode.
23
+ - Make Design Tokens obey `.ai/design/taste/v1/DIGEST.md` or `.ai/design/taste/v2/DIGEST.md`.
24
+ - STOP for approval together with the UI step.
19
25
  - Ask at most 5 discovery questions, only ones that change the design.
20
26
  - Check what can be reused (components, theme, icon set) before inventing.
21
27
  - Content first: the top 3 to 5 user tasks with frequency, and real sample data per screen.
@@ -54,16 +54,7 @@ Do not invent the layout.
54
54
  - Respect safe areas (notch, home bar) and the keyboard. A focused field stays visible.
55
55
  - Check small phones, large phones and tablets, in both orientations where the spec allows.
56
56
 
57
- ## 7. Anti-generic rules
58
- These match the Anti-Generic Checklist in `.ai/ui_specs.md`:
59
- - No default Material seed blue, and no unthemed default widgets, without a reason.
60
- - No default type without a reason. Use the fonts in the style tile.
61
- - No rows of identical cards with pastel icon boxes.
62
- - No gradient-text hero and no decorative blobs.
63
- - No greeting banners ("Welcome back!"). Let the content speak.
64
- - No emojis anywhere in code or UI. Use icons from the icon set the spec names.
65
-
66
- ## 8. States and access
57
+ ## 7. States and access
67
58
  - Loading: a skeleton with the same size as the loaded content, so nothing jumps.
68
59
  - Empty: a short explanation and a primary action.
69
60
  - Error: a plain-language cause and a Retry button, never a raw error dump.
@@ -77,7 +68,7 @@ These match the Anti-Generic Checklist in `.ai/ui_specs.md`:
77
68
  - Mutations: disable the submit while it runs and show progress next to it.
78
69
  On failure, roll back and show the error message from the spec with a Retry.
79
70
 
80
- ## 9. Before you finish
71
+ ## 8. Before you finish
81
72
  1. Run the task's `verificationCommand`, plus `flutter analyze` and `flutter test`.
82
73
  2. Check the source for emojis. There must be none.
83
74
  3. Check the UI has no overflow stripes on small and large screens.
@@ -18,6 +18,48 @@ settle it, escalate with `architectural_ambiguity`. Do not guess a direction.
18
18
  For Quick work, work with no screen, or a project with no design brief, match the existing
19
19
  components and `.ai/codebase_map.md` instead.
20
20
 
21
+ ## 2.6 Design profiles
22
+ Read `## Design Profile` in `.ai/ui_specs.md` first.
23
+ If the Profile is missing or still the placeholder, stop and escalate with
24
+ `architectural_ambiguity` before writing UI code.
25
+
26
+ Profiles are `taste-v1` or `taste-v2`. Read the digest at
27
+ `.ai/design/taste/<v1|v2>/DIGEST.md`. Open `SKILL.md` beside it only for a
28
+ section the digest points to.
29
+
30
+ Order of authority, highest first:
31
+ 1. The task's `acceptanceCriteria`.
32
+ 2. `.ai/ui_specs.md` (tokens, wireframes, copy).
33
+ 3. The digest.
34
+ 4. `SKILL.md`.
35
+
36
+ The settled conflicts below override the digest and `SKILL.md`. The digest is a faithful copy
37
+ of upstream, so it may say things nativ overrides, such as "generate images first".
38
+ 1. Questions: never ask the user. Escalate with `architectural_ambiguity`.
39
+ 2. The design read and dials are set in the Design Profile. Do not change them. If values
40
+ are missing, that is a spec gap: escalate.
41
+ 3. Dependencies: a library the profile needs that is not in `package.json` is installed only
42
+ when `package.json` is in your targetFiles. Otherwise escalate with `dependency_conflict`.
43
+ Never import a package that is not installed.
44
+ 4. Icons: use the icon library named in Stack notes. Do not hand-draw SVG icons.
45
+ 5. Images: the spec decides imagery. Never call image generation yourself. Leave a labeled
46
+ placeholder and list the missing images in your report.
47
+ 6. Colors and fonts come from the Design Tokens. A token that breaks a profile rule is a
48
+ spec gap: escalate, do not fix it in code.
49
+ 7. Emojis are banned under every profile. Only the spec can allow them.
50
+ 8. Under `taste-v2`, no em dash or en dash as a separator in any text users see. Use a
51
+ hyphen or rewrite the sentence.
52
+ 9. Run Lighthouse and Core Web Vitals only when the task's `verificationCommand` does.
53
+
54
+ Stack notes:
55
+ - React 18: `motion` (from `motion/react`) and `framer-motion` share one API and work on
56
+ React 18 and 19. Keep the one installed. Do not migrate packages in a feature task.
57
+ - Server Component rules apply only when Stack notes say Next.js App Router. In a
58
+ client-only React app skip them, but keep motion in small memoized leaf components.
59
+ - Tailwind: follow the installed major version. Never mix v3 and v4 syntax.
60
+ - `next/font` is for Next.js only. Elsewhere self-host fonts with `@font-face` and
61
+ `font-display: swap`.
62
+
21
63
  ## 3. Build from the design
22
64
  `.ai/ui_specs.md` is the source of truth. Use these parts of it:
23
65
  - **Design brief and chosen direction:** who uses it, the tone, what to avoid.
@@ -51,46 +93,7 @@ Do not invent the layout.
51
93
  - Check wide screens: do not stretch text or forms edge to edge.
52
94
  - Dialogs and drawers close with `Escape` and a backdrop click, and keep focus inside.
53
95
 
54
- ## 6. Visual style (compressed)
55
- Follow the style the spec chose. If it names a known style, use these anchors:
56
- - **Minimalist:** hairline borders, very soft shadows, tight 4px/8px spacing, tabular numbers.
57
- - **Neo-brutalist:** thick solid borders, hard offset shadows with no blur, uppercase labels.
58
- - **Glass:** translucent surfaces with backdrop blur, thin light border, soft deep shadow.
59
- - **Bento:** grid of cards with uneven spans, one corner radius everywhere.
60
- - **Soft UI / clay:** surface matches the background, paired light and dark shadows,
61
- puffy radii.
62
- - **Skeuomorphic / spatial / maximalist:** physical cues, layered depth, or bold color layers,
63
- always through the tokens.
64
-
65
- Values come from the tokens and the style tile, never from this list.
66
-
67
- ## 7. Anti-generic rules
68
- These match the Anti-Generic Checklist in `.ai/ui_specs.md`:
69
- - No default Inter or system-only type without a reason.
70
- - No default indigo or purple accent.
71
- - No rows of identical cards with pastel icon boxes.
72
- - No gradient-text hero and no decorative blobs.
73
- - No greeting banners ("Welcome back!"). Let the content speak.
74
- - No emojis anywhere in code or UI. Icons are inline vector SVG.
75
-
76
- ### 7.1 Build-time details
77
- The font, color and layout choices are made at design time (the Anti-Generic Checklist in
78
- `.ai/ui_specs.md`). These are the details that go wrong while building:
79
- - One accent color and one corner-radius scale, from the tokens, on every component.
80
- A button or link that needs a different color is a spec gap: escalate it.
81
- - Large display type with tight line height clips the tails of y, g, j, p and q, worst in
82
- italics. Keep display line height at 1.1 or more.
83
- - Images come from the spec. If one is missing, leave a clearly labeled placeholder and
84
- list the images still needed in your report. Never fake a product screenshot out of
85
- boxes, and never fill space with hand-drawn illustrations.
86
- - Logos are real vector files, never a company name typed out as text.
87
- - Numbers shown in the UI come from the spec's content samples or real data. Do not
88
- invent precise-looking figures such as "92%" or "4.1x".
89
- - One label per action: if the spec says "Contact us", do not add "Get in touch" elsewhere.
90
- - Marketing or landing page: also follow the Marketing pages part of the checklist, when
91
- `.ai/ui_specs.md` has one.
92
-
93
- ## 8. States and access
96
+ ## 6. States and access
94
97
  - Loading: a skeleton with the same size as the loaded content, so nothing jumps.
95
98
  - Empty: a short explanation and a primary action.
96
99
  - Error: a plain-language cause and a Retry button, never a raw error dump.
@@ -101,7 +104,7 @@ The font, color and layout choices are made at design time (the Anti-Generic Che
101
104
  - Mutations: disable the submit while it runs and show progress next to it.
102
105
  On failure, roll back and show the error message from the spec with a Retry.
103
106
 
104
- ## 9. Before you finish
107
+ ## 7. Before you finish
105
108
  1. Run the task's `verificationCommand` (or `nativ verify <taskId>`).
106
109
  2. Check the source for emojis. There must be none.
107
110
  3. Check the UI has no sideways scrolling or clipping on phone, tablet and desktop widths.
@@ -109,8 +112,8 @@ The font, color and layout choices are made at design time (the Anti-Generic Che
109
112
  5. Pre-flight, all must pass:
110
113
  - Button labels, inputs, placeholders and form labels meet contrast: 4.5:1 for body
111
114
  text, 3:1 for large text.
112
- - Button labels fit on one line at desktop width.
113
- - The accent color and corner radius are the same everywhere.
114
115
  - Re-read every string you wrote that the spec did not give. Rewrite anything vague,
115
116
  broken or invented.
116
- - Marketing or landing page: run the Marketing pages checks, when the checklist has them.
117
+ 6. Run the Pre-flight in the profile's DIGEST.md.
118
+ 7. Run `nativ design check <your UI files or folders>`. Fix every error. Fix each warning, or
119
+ explain it in your report. It reads the Design Profile in `.ai/ui_specs.md`.
@@ -18,6 +18,21 @@ Pick one level and design track and write them here:
18
18
 
19
19
  ---
20
20
 
21
+ ## Design Profile
22
+ The Architect picks one profile per project. Workers read the digest named here.
23
+ Native mobile and terminal UI projects leave the placeholder.
24
+ - **Profile:** taste-v1 | taste-v2
25
+ - **Digest:** .ai/design/taste/<v1|v2>/DIGEST.md
26
+ - **Design read:** Reading this as: <page kind> for <audience>, with a <vibe> language,
27
+ leaning toward <design system or aesthetic>.
28
+ - **Dials:** DESIGN_VARIANCE <1-10> / MOTION_INTENSITY <1-10> / VISUAL_DENSITY <1-10>, and why
29
+ - **Design system:** <official package from taste-v2 section 2.A, or "none: Tailwind and tokens">
30
+ - **Stack notes:** React <major>, Next.js App Router yes/no, Tailwind <major>,
31
+ motion package <motion | framer-motion | none>, icon library <name>
32
+ - **Redesign mode (taste-v2):** Greenfield | Preserve | Overhaul
33
+
34
+ ---
35
+
21
36
  ## Design Brief
22
37
  - **Who uses it:**
23
38
  - **The job they are doing:**
@@ -174,40 +189,6 @@ One or two. Everything else stays restrained.
174
189
 
175
190
  ---
176
191
 
177
- ## Anti-Generic Checklist
178
- **Web**
179
- - [ ] No unconsidered font defaults. Consumer/brand: distinct curated typeface (e.g. Outfit, Plus Jakarta Sans, DM Sans). Data-dense B2B SaaS/utility: Inter, Roboto, or native system type permitted for density and zero-FOIT. No unstyled browser defaults without a reason.
180
- - [ ] No default indigo/purple accent.
181
- - [ ] No rows of identical cards with pastel icon boxes.
182
- - [ ] No gradient-text hero.
183
- - [ ] No decorative blobs.
184
- - [ ] No greeting banners.
185
- - [ ] No emojis. Icons are vector SVG.
186
- - [ ] No serif by default. A serif needs a stated reason (editorial, heritage) in the brief.
187
- - [ ] One font family, unless the tokens define a heading and body pairing.
188
- - [ ] No purple or blue glow gradients and no neon mesh backgrounds unless the brief asks.
189
- - [ ] No warm beige with brass accents as the automatic "premium" look. Pick it only on purpose.
190
- - [ ] One accent color and one palette temperature (warm or cool grays, not both).
191
- - [ ] One corner-radius scale for every surface.
192
-
193
- **Marketing pages** (landing, product and pricing pages)
194
- - [ ] The hero fits the first screen: headline of at most 2 lines, subtext of about 20 words, the main button visible without scrolling.
195
- - [ ] The hero holds at most 4 things: an optional small label, headline, subtext, buttons (one primary, at most one secondary). Logo walls go in their own section below.
196
- - [ ] No more than 2 image-and-text split sections in a row.
197
- - [ ] Small uppercase labels above headings: at most one for every 3 sections.
198
- - [ ] Each section layout (3-column cards, split, bento) appears once per page.
199
- - [ ] Real images and real vector logos. No mock screenshots built from boxes, no text-only page.
200
- - [ ] Sections stay short: a headline of about 8 words, about 25 words of text, one visual or one button. More than 5 items need a grid, tabs or a carousel.
201
- - [ ] Every figure comes from real data or is marked as a sample.
202
- - [ ] One label per action across the page ("Contact us" everywhere, not three variants).
203
-
204
- **Mobile**
205
- - [ ] No default Material seed blue.
206
- - [ ] No unthemed default widgets without a reason.
207
- - [ ] No emojis.
208
-
209
- ---
210
-
211
192
  ## States
212
193
  Every component and view covers these.
213
194
 
@@ -224,8 +205,6 @@ Every component and view covers these.
224
205
  ---
225
206
 
226
207
  ## Accessibility
227
- - **Transitions:** `transition: all 150ms cubic-bezier(0.4, 0, 0.2, 1);`
228
- - **Active state:** `transform: scale(0.98)`.
229
208
  - **Focus rings:** `:focus-visible { outline: 2px solid var(--brand); outline-offset: 2px; }`
230
209
  - **Dialogs and drawers:** close with `Escape` and backdrop click; lock background scroll.
231
210
  - **Labels:** `aria-label` on every icon-only button.