mustflow 2.22.16 → 2.22.46
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/dist/cli/commands/dashboard.js +51 -4
- package/dist/cli/commands/explain.js +3 -2
- package/dist/cli/commands/help.js +0 -1
- package/dist/cli/commands/run.js +51 -4
- package/dist/cli/commands/verify.js +2 -1
- package/dist/cli/i18n/en.js +5 -0
- package/dist/cli/i18n/es.js +5 -0
- package/dist/cli/i18n/fr.js +5 -0
- package/dist/cli/i18n/hi.js +5 -0
- package/dist/cli/i18n/ko.js +5 -0
- package/dist/cli/i18n/zh.js +5 -0
- package/dist/cli/lib/cli-output.js +1 -1
- package/dist/cli/lib/dashboard-html/client-script.js +9 -0
- package/dist/cli/lib/dashboard-html/styles.js +48 -1
- package/dist/cli/lib/doc-review-ledger.js +1 -1
- package/dist/cli/lib/git-changes.js +2 -0
- package/dist/cli/lib/local-index/index.js +324 -298
- package/dist/cli/lib/repo-map.js +19 -5
- package/dist/cli/lib/run-plan.js +20 -7
- package/dist/cli/lib/run-root-trust.js +33 -2
- package/dist/cli/lib/validation/index.js +6 -2
- package/dist/cli/lib/validation/test-selection.js +11 -1
- package/dist/core/active-run-locks.js +36 -8
- package/dist/core/atomic-state-write.js +5 -20
- package/dist/core/change-verification.js +18 -2
- package/dist/core/command-intent-eligibility.js +7 -0
- package/dist/core/contract-lint.js +3 -3
- package/dist/core/line-endings.js +2 -0
- package/dist/core/repeated-failure.js +1 -1
- package/dist/core/run-write-drift.js +42 -26
- package/dist/core/safe-filesystem.js +54 -5
- package/dist/core/skill-route-explanation.js +2 -1
- package/dist/core/source-anchors.js +7 -3
- package/dist/core/test-selection.js +13 -2
- package/dist/core/test-target-paths.js +17 -0
- package/dist/core/validation-ratchet.js +62 -17
- package/dist/core/verification-decision-graph.js +8 -1
- package/package.json +1 -1
- package/templates/default/i18n.toml +141 -3
- package/templates/default/locales/en/.mustflow/skills/INDEX.md +24 -1
- package/templates/default/locales/en/.mustflow/skills/api-contract-change/SKILL.md +212 -0
- package/templates/default/locales/en/.mustflow/skills/astro-code-change/SKILL.md +184 -0
- package/templates/default/locales/en/.mustflow/skills/auth-permission-change/SKILL.md +194 -0
- package/templates/default/locales/en/.mustflow/skills/config-env-change/SKILL.md +189 -0
- package/templates/default/locales/en/.mustflow/skills/css-code-change/SKILL.md +199 -0
- package/templates/default/locales/en/.mustflow/skills/dart-code-change/SKILL.md +179 -0
- package/templates/default/locales/en/.mustflow/skills/database-migration-change/SKILL.md +178 -0
- package/templates/default/locales/en/.mustflow/skills/dependency-upgrade-review/SKILL.md +151 -0
- package/templates/default/locales/en/.mustflow/skills/elysia-code-change/SKILL.md +115 -0
- package/templates/default/locales/en/.mustflow/skills/file-path-cross-platform-change/SKILL.md +147 -0
- package/templates/default/locales/en/.mustflow/skills/flutter-code-change/SKILL.md +116 -0
- package/templates/default/locales/en/.mustflow/skills/go-code-change/SKILL.md +156 -0
- package/templates/default/locales/en/.mustflow/skills/hono-code-change/SKILL.md +117 -0
- package/templates/default/locales/en/.mustflow/skills/html-code-change/SKILL.md +173 -0
- package/templates/default/locales/en/.mustflow/skills/javascript-code-change/SKILL.md +149 -0
- package/templates/default/locales/en/.mustflow/skills/python-code-change/SKILL.md +154 -0
- package/templates/default/locales/en/.mustflow/skills/release-publish-change/SKILL.md +172 -0
- package/templates/default/locales/en/.mustflow/skills/routes.toml +138 -0
- package/templates/default/locales/en/.mustflow/skills/rust-code-change/SKILL.md +154 -0
- package/templates/default/locales/en/.mustflow/skills/security-privacy-review/SKILL.md +22 -7
- package/templates/default/locales/en/.mustflow/skills/security-regression-tests/SKILL.md +31 -20
- package/templates/default/locales/en/.mustflow/skills/svelte-code-change/SKILL.md +186 -0
- package/templates/default/locales/en/.mustflow/skills/tailwind-code-change/SKILL.md +164 -0
- package/templates/default/locales/en/.mustflow/skills/tauri-code-change/SKILL.md +185 -0
- package/templates/default/locales/en/.mustflow/skills/typescript-code-change/SKILL.md +184 -0
- package/templates/default/locales/en/.mustflow/skills/unocss-code-change/SKILL.md +186 -0
- package/templates/default/manifest.toml +158 -1
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
---
|
|
2
|
+
mustflow_doc: skill.auth-permission-change
|
|
3
|
+
locale: en
|
|
4
|
+
canonical: true
|
|
5
|
+
revision: 1
|
|
6
|
+
lifecycle: mustflow-owned
|
|
7
|
+
authority: procedure
|
|
8
|
+
name: auth-permission-change
|
|
9
|
+
description: Apply this skill when authentication, authorization, permissions, roles, tenants, sessions, JWTs, OAuth or OIDC, API keys, route guards, admin access, database policies, or object-level access control are created or changed.
|
|
10
|
+
metadata:
|
|
11
|
+
mustflow_schema: "1"
|
|
12
|
+
mustflow_kind: procedure
|
|
13
|
+
pack_id: mustflow.core
|
|
14
|
+
skill_id: mustflow.core.auth-permission-change
|
|
15
|
+
command_intents:
|
|
16
|
+
- changes_status
|
|
17
|
+
- changes_diff_summary
|
|
18
|
+
- lint
|
|
19
|
+
- build
|
|
20
|
+
- test_related
|
|
21
|
+
- test
|
|
22
|
+
- docs_validate_fast
|
|
23
|
+
- test_release
|
|
24
|
+
- mustflow_check
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Auth Permission Change
|
|
28
|
+
|
|
29
|
+
<!-- mustflow-section: purpose -->
|
|
30
|
+
## Purpose
|
|
31
|
+
|
|
32
|
+
Keep authentication and authorization separate, enforce permissions on the server or database for every protected request, and prevent client-only guards from being treated as a security boundary.
|
|
33
|
+
|
|
34
|
+
Authentication answers who the requester is. Authorization answers what that principal can do to this resource in this tenant right now. Login state, verified email, a valid JWT, a visible admin button, or a client redirect is not permission.
|
|
35
|
+
|
|
36
|
+
<!-- mustflow-section: use-when -->
|
|
37
|
+
## Use When
|
|
38
|
+
|
|
39
|
+
- Authentication, authorization, role, permission, capability, policy, tenant, workspace, organization, session, JWT, OAuth, OIDC, API key, invite, reset token, route guard, admin, impersonation, audit, or database policy behavior changes.
|
|
40
|
+
- A route, resolver, controller, service, command handler, job, webhook, API client, generated SDK, UI guard, or database query starts relying on user, tenant, role, ownership, membership, or resource identity.
|
|
41
|
+
- A change affects object-level access control, multi-tenant isolation, shared resources, signed URLs, exports, search, autocomplete, background jobs, webhooks, or admin/support tooling.
|
|
42
|
+
- A change modifies status code behavior for auth failures, especially 401, 403, or policy-driven 404.
|
|
43
|
+
- A permission model, role matrix, API docs, admin docs, migration, or tests need to stay aligned with authorization behavior.
|
|
44
|
+
|
|
45
|
+
<!-- mustflow-section: do-not-use-when -->
|
|
46
|
+
## Do Not Use When
|
|
47
|
+
|
|
48
|
+
- The task is only password hashing, cryptography, secure transport, secret handling, or generic privacy review with no auth or permission boundary; use `security-privacy-review`.
|
|
49
|
+
- The task only adds abuse-case tests after a boundary is already understood; use `security-regression-tests` for that part.
|
|
50
|
+
- The task only changes UI text for a public page and does not affect route guards, server checks, roles, sessions, or access decisions.
|
|
51
|
+
|
|
52
|
+
<!-- mustflow-section: required-inputs -->
|
|
53
|
+
## Required Inputs
|
|
54
|
+
|
|
55
|
+
- Changed files, user goal, affected actors, protected resources, actions, tenants, roles, and status-code expectations.
|
|
56
|
+
- Auth middleware, framework hooks, gateway checks, session config, cookie config, JWT verifier, OAuth/OIDC callback, API key verifier, and logout or revocation code when relevant.
|
|
57
|
+
- Route guards, client guards, server controllers, resolvers, command handlers, services, policy functions, role or permission tables, database queries, RLS, views, stored procedures, and ORM scopes.
|
|
58
|
+
- Tenant, organization, workspace, project, membership, invite, suspension, ownership, sharing, and admin-support data models.
|
|
59
|
+
- Background jobs, queue payloads, webhooks, import/export flows, search or autocomplete indexes, signed URL generation, storage keys, CDN cache, and permission caches when they can expose protected data.
|
|
60
|
+
- Audit logs, admin action logs, impersonation records, denied-access logs, API docs, role matrix docs, migrations, and tests.
|
|
61
|
+
- Configured verification intents.
|
|
62
|
+
|
|
63
|
+
<!-- mustflow-section: preconditions -->
|
|
64
|
+
## Preconditions
|
|
65
|
+
|
|
66
|
+
- Classify the change as authentication, authorization, or both before editing.
|
|
67
|
+
- Identify principal, tenant, resource, action, and context for each protected operation.
|
|
68
|
+
- Treat client-provided `userId`, `tenantId`, `workspaceId`, `role`, `isAdmin`, object id, API key label, token claim, and local storage value as untrusted.
|
|
69
|
+
- Find the current policy source of truth. If authorization is scattered across routes, do not add another scattered condition without first considering a central policy function.
|
|
70
|
+
- Know whether the product intentionally hides resource existence with 404 or exposes permission denial with 403.
|
|
71
|
+
|
|
72
|
+
<!-- mustflow-section: allowed-edits -->
|
|
73
|
+
## Allowed Edits
|
|
74
|
+
|
|
75
|
+
- Add or tighten server-side authorization checks, policy functions, database scopes, RLS, query constraints, audit logs, docs, and tests.
|
|
76
|
+
- Adjust client guards only as UX, and only while keeping or adding server/database enforcement.
|
|
77
|
+
- Add role or permission migration logic only with deny-by-default behavior and explicit backfill rationale.
|
|
78
|
+
- Keep docs, generated clients, role matrices, status-code behavior, and tests synchronized with changed auth behavior.
|
|
79
|
+
|
|
80
|
+
<!-- mustflow-section: procedure -->
|
|
81
|
+
## Procedure
|
|
82
|
+
|
|
83
|
+
1. Classify the boundary:
|
|
84
|
+
- authentication: verifies a principal from a session, JWT, OAuth/OIDC account, API key, service account, or anonymous state;
|
|
85
|
+
- authorization: decides whether that principal can perform an action on a resource within a tenant and context.
|
|
86
|
+
2. Read the mandatory surfaces that apply:
|
|
87
|
+
- auth middleware, hooks, gateway, session store, cookies, JWT, OAuth/OIDC, API key verification, logout, revocation, and token rotation;
|
|
88
|
+
- route guards, client redirects, server controllers, resolvers, services, command handlers, policy calls, and admin tools;
|
|
89
|
+
- tenant resolver, membership schema, role assignment, invite flow, suspension, ownership, sharing, and impersonation model;
|
|
90
|
+
- database queries, tenant scopes, ownership joins, soft-delete filters, RLS, views, stored procedures, and ORM helpers;
|
|
91
|
+
- background jobs, queues, webhooks, import/export, file storage, signed URLs, search, autocomplete, caches, audit logs, docs, migrations, and tests.
|
|
92
|
+
3. Write the permission decision inputs for each protected action: principal, tenant, resource, action, and context.
|
|
93
|
+
4. Separate identity from permission:
|
|
94
|
+
- `req.user`, a valid session, verified email, valid JWT, OAuth scope, or API key proves identity only;
|
|
95
|
+
- owner, active member, org admin, global admin, support user, service account, API client, and shared-link viewer need separate authorization rules.
|
|
96
|
+
5. Prefer one central policy shape, such as a `can(principal, action, resource, context)` function, over route-local `isAdmin`, `isOwner`, or `isMember` fragments.
|
|
97
|
+
6. Enforce deny by default. New roles, actions, resource types, tenant types, sharing modes, and admin paths must deny until explicitly allowed.
|
|
98
|
+
7. Validate every request. Do not rely on login-time checks, client guards, disabled buttons, hidden menus, generated types, OpenAPI docs, or mobile local checks.
|
|
99
|
+
8. Load resources safely before final authorization:
|
|
100
|
+
- include tenant, membership, owner, sharing, and soft-delete constraints in the resource lookup when possible;
|
|
101
|
+
- when existence must be hidden, keep wrong-tenant and missing-resource behavior consistent with the project's 404 policy.
|
|
102
|
+
9. Check multi-tenant risks:
|
|
103
|
+
- body, query, header, path, JWT claim, or local storage tenant ids must not become trusted tenant context;
|
|
104
|
+
- tenant-scoped queries must include tenant or membership constraints;
|
|
105
|
+
- pending, suspended, removed, revoked, deleted, disabled, and invited states must not be treated as active access;
|
|
106
|
+
- shared links, exports, signed URLs, previews, search, cache, and CDN entries must stay inside the permission model.
|
|
107
|
+
10. Check session, JWT, OAuth/OIDC, and API key contracts when touched:
|
|
108
|
+
- sessions need expiry, refresh, rotation, logout, revocation, cookie flags, and CSRF posture;
|
|
109
|
+
- JWTs need signature verification, algorithm allowlist, issuer, audience, subject, expiry, not-before, key rotation, and stale-claim handling;
|
|
110
|
+
- OAuth/OIDC needs exact redirect binding, state, nonce, PKCE when relevant, provider account binding, and safe account linking;
|
|
111
|
+
- API keys need hashing, prefix-only display, owner type, scope, tenant/resource constraints, expiry, rotation, revocation, last-used, rate limit, and audit.
|
|
112
|
+
11. Check dependent surfaces: API routes, controllers, services, DB schema, DB queries, RLS, UI navigation, UI actions, API clients, audit logs, notifications, jobs, webhooks, search, file storage, docs, migrations, monitoring, and tests.
|
|
113
|
+
12. Require denial-first tests for changed protected actions when the project has a usable test surface. Cover anonymous, expired, revoked, no role, wrong tenant, wrong owner, suspended or removed member, stale cache, shared-link, read-only API key, org admin, global admin, and impersonating admin cases as applicable.
|
|
114
|
+
13. Update docs and role matrices when external behavior, status codes, role names, permission names, admin scope, or API errors change.
|
|
115
|
+
14. Report the policy source of truth, server/database enforcement, client UX-only guards, test coverage, skipped checks, and remaining permission risk.
|
|
116
|
+
|
|
117
|
+
## Boundary Rules
|
|
118
|
+
|
|
119
|
+
- Client guards are UX only. They may hide buttons, menus, and pages, but they do not authorize API calls.
|
|
120
|
+
- Route middleware may perform coarse authentication and tenant resolution, but final resource/action authorization belongs in server policy, service authorization, gateway policy, or database policy.
|
|
121
|
+
- Database RLS, tenant-scoped queries, views, and stored procedures are defense-in-depth and may be the strongest final boundary, but they do not excuse unclear application policy.
|
|
122
|
+
- Background jobs, webhooks, imports, exports, and cron paths need actor or service-principal context. User-request paths are not the only permission paths.
|
|
123
|
+
- Admin is scoped. Global admin, org admin, project admin, billing admin, support, and impersonating admin are different roles and need different audit and action rules.
|
|
124
|
+
- Owner is not a wildcard permission. Owners may still lack delete, export, invite, transfer, billing, or admin powers.
|
|
125
|
+
- API keys are principals with scopes and owners, not user sessions with unlimited power.
|
|
126
|
+
|
|
127
|
+
## Strongly Forbidden Patterns
|
|
128
|
+
|
|
129
|
+
- Treating authentication as authorization.
|
|
130
|
+
- Trusting client-provided `userId`, `tenantId`, `role`, `isAdmin`, `ownerId`, `scope`, price, entitlement, or plan.
|
|
131
|
+
- Relying on hidden buttons, disabled controls, client redirects, mobile checks, TypeScript types, docs, or Storybook examples as permission boundaries.
|
|
132
|
+
- Reading tenant-scoped resources with an object id alone.
|
|
133
|
+
- Treating membership row existence as active membership without checking status.
|
|
134
|
+
- Treating OAuth provider scopes as internal app permissions.
|
|
135
|
+
- Treating JWT role claims as fresh authorization after role changes.
|
|
136
|
+
- Treating API keys as normal user sessions.
|
|
137
|
+
- Mixing org admin, global admin, support admin, and impersonation into one `admin` check.
|
|
138
|
+
- Changing 403 to 404, or 404 to 403, without naming the information-disclosure policy.
|
|
139
|
+
- Relaxing permissions without denial-case tests or a written migration and audit plan.
|
|
140
|
+
- Letting role changes ship without permission-cache or token-staleness handling.
|
|
141
|
+
- Creating shared links, signed URLs, exports, search results, or CDN responses outside tenant and resource policy.
|
|
142
|
+
- Logging impersonation without separate actor and subject.
|
|
143
|
+
- Backfilling broad permissions to every existing user because migration is easier.
|
|
144
|
+
|
|
145
|
+
<!-- mustflow-section: postconditions -->
|
|
146
|
+
## Postconditions
|
|
147
|
+
|
|
148
|
+
- Authentication and authorization are separated in code and report language.
|
|
149
|
+
- Every changed protected action has a server-side or database-side permission boundary.
|
|
150
|
+
- Tenant isolation, resource ownership, sharing, admin scope, and status-code behavior are explicit.
|
|
151
|
+
- Client guards are described as UX only.
|
|
152
|
+
- Session, token, OAuth/OIDC, API key, cache, audit, docs, migration, and tests are synchronized when touched.
|
|
153
|
+
|
|
154
|
+
<!-- mustflow-section: verification -->
|
|
155
|
+
## Verification
|
|
156
|
+
|
|
157
|
+
Use configured oneshot command intents when available:
|
|
158
|
+
|
|
159
|
+
- `changes_status`
|
|
160
|
+
- `changes_diff_summary`
|
|
161
|
+
- `lint`
|
|
162
|
+
- `build`
|
|
163
|
+
- `test_related`
|
|
164
|
+
- `test`
|
|
165
|
+
- `docs_validate_fast`
|
|
166
|
+
- `test_release`
|
|
167
|
+
- `mustflow_check`
|
|
168
|
+
|
|
169
|
+
Prefer the narrowest configured test intent that covers the changed protected actions and denial cases. Report missing auth-specific policy tests, tenant-isolation tests, token/session tests, API-key tests, cache-staleness tests, audit-log checks, docs validation, or database-policy verification when relevant.
|
|
170
|
+
|
|
171
|
+
<!-- mustflow-section: failure-handling -->
|
|
172
|
+
## Failure Handling
|
|
173
|
+
|
|
174
|
+
- If the current policy source of truth is unclear, stop and report the competing policy locations before adding more checks.
|
|
175
|
+
- If a server check is missing and only the UI hides the action, treat it as incomplete work, not as authorization.
|
|
176
|
+
- If a tenant-scoped query lacks tenant, membership, ownership, sharing, or RLS coverage, fix the data access path before broadening features.
|
|
177
|
+
- If denial tests cannot be written in the current task, report the exact untested actor, tenant, resource, action, and context combinations.
|
|
178
|
+
- If the change relaxes permissions, changes status-code policy, or broadens admin/API-key behavior, call out the security risk and required verification.
|
|
179
|
+
|
|
180
|
+
<!-- mustflow-section: output-format -->
|
|
181
|
+
## Output Format
|
|
182
|
+
|
|
183
|
+
- Boundary checked
|
|
184
|
+
- Authentication versus authorization classification
|
|
185
|
+
- Principal, tenant, resource, action, and context affected
|
|
186
|
+
- Policy source of truth
|
|
187
|
+
- Server/database enforcement notes
|
|
188
|
+
- Client guard UX-only notes
|
|
189
|
+
- Tenant, ownership, sharing, admin, token/session/API-key, cache, and audit notes
|
|
190
|
+
- Tests or denial cases covered
|
|
191
|
+
- Files changed
|
|
192
|
+
- Command intents run
|
|
193
|
+
- Skipped checks and reasons
|
|
194
|
+
- Remaining auth or permission risk
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
---
|
|
2
|
+
mustflow_doc: skill.config-env-change
|
|
3
|
+
locale: en
|
|
4
|
+
canonical: true
|
|
5
|
+
revision: 1
|
|
6
|
+
lifecycle: mustflow-owned
|
|
7
|
+
authority: procedure
|
|
8
|
+
name: config-env-change
|
|
9
|
+
description: Apply this skill when environment variables, config keys, secrets, public env prefixes, build-time or runtime config, config schemas or parsers, feature flags, deployment variables, CI secrets, Docker or Compose env, Kubernetes ConfigMaps or Secrets, Cloudflare bindings, Vite, Next.js, Astro, SvelteKit, Tauri, Node, Bun, generated env types, .env examples, config docs, or config validation behavior are created, changed, reviewed, or reported.
|
|
10
|
+
metadata:
|
|
11
|
+
mustflow_schema: "1"
|
|
12
|
+
mustflow_kind: procedure
|
|
13
|
+
pack_id: mustflow.core
|
|
14
|
+
skill_id: mustflow.core.config-env-change
|
|
15
|
+
command_intents:
|
|
16
|
+
- changes_status
|
|
17
|
+
- changes_diff_summary
|
|
18
|
+
- lint
|
|
19
|
+
- build
|
|
20
|
+
- test_related
|
|
21
|
+
- test
|
|
22
|
+
- docs_validate_fast
|
|
23
|
+
- test_release
|
|
24
|
+
- mustflow_check
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Config Env Change
|
|
28
|
+
|
|
29
|
+
<!-- mustflow-section: purpose -->
|
|
30
|
+
## Purpose
|
|
31
|
+
|
|
32
|
+
Keep configuration and environment changes from leaking secrets, freezing runtime values at build time, or drifting across local, CI, and deployment surfaces.
|
|
33
|
+
|
|
34
|
+
A config or env change is not just adding a key. It is deciding who can see the value, when the value is fixed, where the value is validated, how errors are redacted, and which deployment surfaces must change together.
|
|
35
|
+
|
|
36
|
+
<!-- mustflow-section: use-when -->
|
|
37
|
+
## Use When
|
|
38
|
+
|
|
39
|
+
- A task adds, removes, renames, defaults, validates, documents, or reports an env var, secret, config key, feature flag, runtime setting, build define, platform binding, or deploy variable.
|
|
40
|
+
- Code reads from `process.env`, `import.meta.env`, `Bun.env`, framework env helpers, worker bindings, CI variables, Docker env, Kubernetes env, platform env stores, mobile or desktop packaged config, or app updater config.
|
|
41
|
+
- A change touches `.env.example`, `.env.template`, `.env.test`, `.dev.vars.example`, config schemas, config parsers, generated env types, deployment docs, CI workflow env, Docker Compose env, Kubernetes ConfigMap or Secret, Terraform or Pulumi env wiring, or hosting provider config.
|
|
42
|
+
- A final report claims a config key is public, private, runtime, build-time, optional, required, secret, safe to expose, changed without rebuild, or controlled by a feature flag.
|
|
43
|
+
|
|
44
|
+
<!-- mustflow-section: do-not-use-when -->
|
|
45
|
+
## Do Not Use When
|
|
46
|
+
|
|
47
|
+
- The task only changes product behavior behind an existing config value and the config contract is untouched.
|
|
48
|
+
- The task only edits command-intent environment policy in `.mustflow/config/commands.toml`. Use `command-contract-authoring` for that primary scope.
|
|
49
|
+
- The task only reviews a broad sensitive-data change without config or env surfaces. Use `security-privacy-review`.
|
|
50
|
+
- The task only changes release publication variables for a remote registry or channel. Use `release-publish-change` for that primary scope and this skill only if env behavior itself changes.
|
|
51
|
+
|
|
52
|
+
<!-- mustflow-section: required-inputs -->
|
|
53
|
+
## Required Inputs
|
|
54
|
+
|
|
55
|
+
- Key name, value meaning, sensitivity, visibility, timing, required environments, owner, default, validation shape, and removal or deprecation plan if replacing another key.
|
|
56
|
+
- Read-first surfaces: env examples, config schema or parser, runtime config loader, framework env conventions, CI variables or secrets, Docker or Compose config, Kubernetes or cloud config, typed env helpers, deployment docs, and tests.
|
|
57
|
+
- Platform timing: build-time, startup runtime, request runtime, command runtime, tenant runtime, packaged-app time, or provider-evaluated feature flag.
|
|
58
|
+
- Visibility boundary: server-only, client bundle, static asset, sourcemap, mobile app, desktop app, container image, CI log, cloud dashboard, telemetry, or user-visible docs.
|
|
59
|
+
- Verification options from the command contract for config validation, build, tests, docs, package or template release, and secret redaction checks.
|
|
60
|
+
|
|
61
|
+
<!-- mustflow-section: preconditions -->
|
|
62
|
+
## Preconditions
|
|
63
|
+
|
|
64
|
+
- The task matches the Use When conditions and does not match the Do Not Use When exclusions.
|
|
65
|
+
- Higher-priority instructions and the command contract have been checked for the current scope.
|
|
66
|
+
- The config source of truth is identified before editing. If several files define the same key differently, resolve authority before adding another copy.
|
|
67
|
+
- Real secrets are not read, printed, copied, committed, or requested unless the user explicitly authorizes a secret-handling task and the active rules allow it.
|
|
68
|
+
|
|
69
|
+
<!-- mustflow-section: allowed-edits -->
|
|
70
|
+
## Allowed Edits
|
|
71
|
+
|
|
72
|
+
- Update config schemas, parser code, runtime loader wiring, generated type expectations, example env files with fake values, deployment docs, tests, CI or deployment variable names, and feature-flag defaults directly required by the config change.
|
|
73
|
+
- Add redacted validation errors that name the key and expected shape without printing the value.
|
|
74
|
+
- Add migration aliases, deprecation warnings, or removal notes when replacing keys.
|
|
75
|
+
- Do not commit real `.env` files, private keys, tokens, service account JSON, production connection strings, or secret values.
|
|
76
|
+
- Do not add unchecked raw env reads outside the central parser unless the repository already has a narrower pattern and the exception is documented.
|
|
77
|
+
|
|
78
|
+
<!-- mustflow-section: procedure -->
|
|
79
|
+
## Procedure
|
|
80
|
+
|
|
81
|
+
1. Classify the value before editing:
|
|
82
|
+
- Sensitivity: public config, private server secret, credential, internal topology, business rule, user-specific setting, or feature flag.
|
|
83
|
+
- Visibility: server-only, client bundle, static output, packaged mobile or desktop app, container image, CI log, telemetry, or docs.
|
|
84
|
+
- Timing: build-time, startup runtime, request runtime, command runtime, tenant runtime, packaged-app time, or feature-flag provider runtime.
|
|
85
|
+
- Mutation action after value change: no action, process restart, pod rollout, container redeploy, static rebuild, app rebuild, store release, or flag flip.
|
|
86
|
+
2. Read existing env and config surfaces before adding a key.
|
|
87
|
+
- Env examples and test env files.
|
|
88
|
+
- Config schema or parser.
|
|
89
|
+
- Runtime loader and central config object.
|
|
90
|
+
- Framework env helpers and bundler defines.
|
|
91
|
+
- CI, Docker, Compose, Kubernetes, cloud platform, and hosting provider wiring.
|
|
92
|
+
- Generated env types and docs.
|
|
93
|
+
- Tests for missing, malformed, defaulted, successful, and redacted behavior.
|
|
94
|
+
3. Treat public prefixes as exposure markers, not security.
|
|
95
|
+
- `VITE_`, `NEXT_PUBLIC_`, `PUBLIC_`, client env, frontend build defines, static JSON, mobile resources, and desktop app resources are public or effectively public.
|
|
96
|
+
- Do not put secrets, privileged internal URLs, signing keys, service credentials, tenant maps, entitlement gates, pricing gates, webhook secrets, or admin tokens in public or packaged surfaces.
|
|
97
|
+
4. Separate build-time from runtime.
|
|
98
|
+
- Values inlined into frontend bundles, static builds, package resources, or build defines usually require rebuild and redeploy to change.
|
|
99
|
+
- Runtime values read from server process env, worker bindings, platform secrets, mounted secret volumes, or provider flags may still require restart, pod rollout, or deployment depending on platform.
|
|
100
|
+
- Do not promise that changing an env var will affect already built client JavaScript, static HTML, mobile apps, desktop apps, or container image defaults.
|
|
101
|
+
5. Validate through the central parser.
|
|
102
|
+
- Parse booleans explicitly. The string `false` must not become truthy behavior.
|
|
103
|
+
- Validate numbers with ranges, URLs with protocol and host expectations, paths with safe path rules, enums with allowlists, and secrets with presence and format checks only.
|
|
104
|
+
- Keep validation errors redacted. Show key name and expected shape, not actual value.
|
|
105
|
+
6. Update every dependent surface for a new key.
|
|
106
|
+
- Schema validation, runtime loader, type definitions, safe defaults, fake-value env examples, local setup docs, deploy docs, tests, CI variables or secrets, Docker or Compose, Kubernetes or cloud config, observability redaction, and rollback or restart notes.
|
|
107
|
+
- If a surface is not updated because it is outside scope, report it as deferred with risk.
|
|
108
|
+
7. Handle framework-specific env boundaries conservatively.
|
|
109
|
+
- Vite and Next public prefixes are client bundle exposure.
|
|
110
|
+
- SvelteKit static env helpers are build-time; dynamic helpers are runtime.
|
|
111
|
+
- Astro env should distinguish client or server and public or secret schema.
|
|
112
|
+
- Cloudflare Worker secrets and bindings arrive through runtime `env`; plaintext vars are not secret storage.
|
|
113
|
+
- Docker `ARG` and baked `ENV` are not secret storage.
|
|
114
|
+
- Compose interpolation env is not the same as container env.
|
|
115
|
+
- Kubernetes env vars are captured at pod start; mounted config may update differently.
|
|
116
|
+
- Tauri, mobile, and desktop packaged config should be treated as public because users can inspect app artifacts.
|
|
117
|
+
8. Treat feature flags as contracts.
|
|
118
|
+
- The default value is real product behavior when the provider is down, cache is empty, or local dev is offline.
|
|
119
|
+
- Kill switches should be runtime-controllable unless the runbook explicitly accepts rebuild delay.
|
|
120
|
+
- Rollouts should use stable user, tenant, org, or device keys, not per-request randomness.
|
|
121
|
+
- Sensitive authorization must use server evaluation as source of truth.
|
|
122
|
+
- New flags need owner, expiry or cleanup issue, default, provider-down behavior, and client/server divergence tests when relevant.
|
|
123
|
+
9. Detect config drift.
|
|
124
|
+
- Schema key missing from examples.
|
|
125
|
+
- Deploy key missing from schema.
|
|
126
|
+
- Secret-looking key with public prefix.
|
|
127
|
+
- Runtime docs for a build-time value.
|
|
128
|
+
- Staging missing keys required in production.
|
|
129
|
+
- Tests depending on private `.env.local`.
|
|
130
|
+
- Compose `.env` used for interpolation but not passed into the container.
|
|
131
|
+
- Kubernetes env var changed with no rollout note.
|
|
132
|
+
- Worker binding only present in production.
|
|
133
|
+
- Mobile or desktop package containing privileged credentials.
|
|
134
|
+
10. Keep fallbacks safe.
|
|
135
|
+
- Local and test defaults must not silently connect to production services.
|
|
136
|
+
- Optional integrations may validate lazily, but must fail clearly at first use.
|
|
137
|
+
- Core values such as database, auth, session, encryption, signing, queue, and required external APIs should fail fast at startup or command start.
|
|
138
|
+
11. Select verification from configured command intents. Prefer config validation, build, typecheck, related tests, docs validation, release/package checks, and secret-redaction checks when exposed by the command contract. Do not infer raw package manager, cloud, Docker, Kubernetes, or CI commands.
|
|
139
|
+
|
|
140
|
+
<!-- mustflow-section: postconditions -->
|
|
141
|
+
## Postconditions
|
|
142
|
+
|
|
143
|
+
- Each changed key has sensitivity, visibility, timing, validation, default, owner, required environments, and change-action classification.
|
|
144
|
+
- Schema, loader, examples, docs, generated types, tests, CI/deploy surfaces, and redaction behavior are synchronized or explicitly deferred.
|
|
145
|
+
- Public prefixes and packaged app surfaces contain no secrets.
|
|
146
|
+
- Build-time and runtime behavior are described accurately.
|
|
147
|
+
- Feature flag defaults and provider-down behavior are classified when flags are involved.
|
|
148
|
+
|
|
149
|
+
<!-- mustflow-section: verification -->
|
|
150
|
+
## Verification
|
|
151
|
+
|
|
152
|
+
Use configured oneshot command intents when available:
|
|
153
|
+
|
|
154
|
+
- `changes_status`
|
|
155
|
+
- `changes_diff_summary`
|
|
156
|
+
- `lint`
|
|
157
|
+
- `build`
|
|
158
|
+
- `test_related`
|
|
159
|
+
- `test`
|
|
160
|
+
- `docs_validate_fast`
|
|
161
|
+
- `test_release`
|
|
162
|
+
- `mustflow_check`
|
|
163
|
+
|
|
164
|
+
Prefer narrower configured config-schema, env-validation, type-generation, deployment-doc, release-template, and secret-redaction intents when the command contract exposes them.
|
|
165
|
+
|
|
166
|
+
Do not infer commands from package manager files, Docker files, cloud config, framework config, or CI workflow names. Report missing command-intent coverage instead.
|
|
167
|
+
|
|
168
|
+
<!-- mustflow-section: failure-handling -->
|
|
169
|
+
## Failure Handling
|
|
170
|
+
|
|
171
|
+
- If a value might be secret and the visibility is unclear, classify it private until proven public.
|
|
172
|
+
- If build-time or runtime timing is unclear, do not promise hot config changes. Report the rebuild, restart, redeploy, rollout, or release uncertainty.
|
|
173
|
+
- If schema, example, docs, tests, and deploy surfaces disagree, fix the source of truth first and report any deferred surface.
|
|
174
|
+
- If validation would print a value, redact it before continuing.
|
|
175
|
+
- If a feature flag default is unknown, do not claim provider-down behavior is safe.
|
|
176
|
+
- If a real secret appears in tracked files, stop ordinary work and report the secret exposure according to repository security rules.
|
|
177
|
+
|
|
178
|
+
<!-- mustflow-section: output-format -->
|
|
179
|
+
## Output Format
|
|
180
|
+
|
|
181
|
+
- Keys or flags changed
|
|
182
|
+
- Sensitivity, visibility, timing, and required action after value change
|
|
183
|
+
- Source of truth and synchronized surfaces
|
|
184
|
+
- Public/private boundary and redaction notes
|
|
185
|
+
- Build-time versus runtime classification
|
|
186
|
+
- Feature flag default and provider-down behavior when relevant
|
|
187
|
+
- Command intents run
|
|
188
|
+
- Skipped checks and reasons
|
|
189
|
+
- Remaining config/env risk
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
---
|
|
2
|
+
mustflow_doc: skill.css-code-change
|
|
3
|
+
locale: en
|
|
4
|
+
canonical: true
|
|
5
|
+
revision: 2
|
|
6
|
+
lifecycle: mustflow-owned
|
|
7
|
+
authority: procedure
|
|
8
|
+
name: css-code-change
|
|
9
|
+
description: Apply this skill when CSS, Sass, Less, CSS Modules, CSS-in-JS, global styles, cascade layers, selector specificity, design tokens, layout, responsive behavior, focus styles, animation, color, or component styling are created or changed.
|
|
10
|
+
metadata:
|
|
11
|
+
mustflow_schema: "1"
|
|
12
|
+
mustflow_kind: procedure
|
|
13
|
+
pack_id: mustflow.core
|
|
14
|
+
skill_id: mustflow.core.css-code-change
|
|
15
|
+
command_intents:
|
|
16
|
+
- changes_status
|
|
17
|
+
- changes_diff_summary
|
|
18
|
+
- lint
|
|
19
|
+
- build
|
|
20
|
+
- test_related
|
|
21
|
+
- test
|
|
22
|
+
- docs_validate_fast
|
|
23
|
+
- mustflow_check
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# CSS Code Change
|
|
27
|
+
|
|
28
|
+
<!-- mustflow-section: purpose -->
|
|
29
|
+
## Purpose
|
|
30
|
+
|
|
31
|
+
Preserve cascade order, specificity discipline, resilient responsive layout, design tokens, focus visibility, contrast, reduced motion, browser compatibility, and layout stability. Treat CSS as a long-lived system, not a screenshot patch.
|
|
32
|
+
|
|
33
|
+
<!-- mustflow-section: use-when -->
|
|
34
|
+
## Use When
|
|
35
|
+
|
|
36
|
+
- `.css`, Sass, Less, CSS Modules, CSS-in-JS, global styles, reset, theme variables, cascade layers, selectors, design tokens, component styles, animations, or responsive rules change.
|
|
37
|
+
- The task touches specificity, `!important`, inline styles, negative margins, layout shift, browser compatibility, dark mode, focus style, contrast, typography, zoom, text scaling, or motion preference.
|
|
38
|
+
|
|
39
|
+
<!-- mustflow-section: do-not-use-when -->
|
|
40
|
+
## Do Not Use When
|
|
41
|
+
|
|
42
|
+
- Styling is entirely Tailwind utility usage; use `tailwind-code-change`.
|
|
43
|
+
- Styling is entirely UnoCSS utility usage; use `unocss-code-change`.
|
|
44
|
+
|
|
45
|
+
<!-- mustflow-section: required-inputs -->
|
|
46
|
+
## Required Inputs
|
|
47
|
+
|
|
48
|
+
- Global CSS entrypoints, reset/base styles, cascade layer strategy, token files, theme config, component CSS, parent layout styles, browserslist, build config, and style lint config.
|
|
49
|
+
- Existing responsive, dark mode, accessibility, focus, reduced-motion, breakpoint, and design-token conventions.
|
|
50
|
+
- Target surfaces for narrow viewports, 200% zoom, text scaling, delayed media, third-party markup, and browser compatibility.
|
|
51
|
+
- Configured verification intents.
|
|
52
|
+
|
|
53
|
+
<!-- mustflow-section: preconditions -->
|
|
54
|
+
## Preconditions
|
|
55
|
+
|
|
56
|
+
- Identify the cascade layer, selector scope, token source, layout constraints, and browser target before editing.
|
|
57
|
+
- Prefer low-specificity selectors, parent layout fixes, and existing semantic tokens.
|
|
58
|
+
- Identify whether the style belongs in global CSS, token/theme CSS, component-scoped CSS, CSS Modules, or a third-party wrapper.
|
|
59
|
+
|
|
60
|
+
<!-- mustflow-section: allowed-edits -->
|
|
61
|
+
## Allowed Edits
|
|
62
|
+
|
|
63
|
+
- Add styles in the correct layer or module.
|
|
64
|
+
- Use class-level selectors, custom properties, design tokens, intrinsic sizing, flex, grid, container queries, or media queries according to local patterns.
|
|
65
|
+
- Preserve visible focus, contrast, text scaling, reduced motion, and reserved space for late-loaded media.
|
|
66
|
+
- Use narrow exceptions for legacy/third-party markup, runtime geometry, rich text/prose wrappers, and urgent accessibility overrides when lower-specificity or token-based fixes cannot solve the issue.
|
|
67
|
+
|
|
68
|
+
<!-- mustflow-section: procedure -->
|
|
69
|
+
## Procedure
|
|
70
|
+
|
|
71
|
+
1. Read global style entrypoints, tokens, component styles, parent layout styles, and build/lint config.
|
|
72
|
+
2. Map the cascade: reset, base, tokens, layout, components, utilities, overrides.
|
|
73
|
+
3. Do not patch visible symptoms with stronger specificity. Resolve conflicts by checking layer order, import order, token choice, component boundary, parent layout, and selector scope first.
|
|
74
|
+
4. Do not add ID selectors for styling, selectors with more than two combinators, or new `!important` unless an allowed exception is documented.
|
|
75
|
+
5. Do not use negative margin to repair normal content flow. Fix parent layout, spacing, alignment, or intrinsic sizing instead.
|
|
76
|
+
6. Do not add inline styles for color, spacing, typography, focus, dark mode, or responsive layout. Inline styles are for runtime geometry such as drag positions, virtualized offsets, and measured canvas/SVG values.
|
|
77
|
+
7. Use existing color, spacing, font, radius, shadow, z-index, and breakpoint tokens before adding literals.
|
|
78
|
+
8. Keep raw color values out of component CSS. Add or reuse semantic tokens for surfaces, text, borders, actions, danger states, focus, disabled states, and dark mode.
|
|
79
|
+
9. Avoid raw pixel values for typography, spacing, layout dimensions, and radius. Allow narrow values such as one-pixel borders, intrinsic icon/media dimensions, and established breakpoint tokens.
|
|
80
|
+
10. Make layout responsive through constraints, `min-width: 0`, min/max sizing, flex/grid, wrapping, gap, intrinsic media dimensions, container/media queries, and content-based rules rather than fixed viewport assumptions.
|
|
81
|
+
11. Do not set fixed width on page, section, container, card, modal, or form layouts. Do not set fixed height on components that contain text.
|
|
82
|
+
12. Do not use viewport-only typography. Use bounded responsive type patterns that survive small screens and large displays.
|
|
83
|
+
13. Do not use `overflow: hidden` to hide layout bugs. Allow it only for intentional clipping such as avatars, media crops, masks, or animation containers.
|
|
84
|
+
14. Reserve dimensions or aspect ratio for images, videos, iframes, ads, embeds, skeletons, fonts, and lazy content that could cause layout shift.
|
|
85
|
+
15. Preserve visible focus, sufficient contrast, 200% text resize behavior, text-spacing stress, keyboard navigation, and reduced-motion behavior.
|
|
86
|
+
16. If hover styling changes an interactive affordance, provide a matching focus-visible affordance.
|
|
87
|
+
17. Prefer outline and outline-offset for focus indicators. Do not rely only on shadows when ancestors may clip overflow.
|
|
88
|
+
18. Respect reduced motion for parallax, large transforms, auto-scroll, route transitions, autoplay carousels, skeleton shimmer, and looping decorative animation.
|
|
89
|
+
19. Check browser compatibility before adding new CSS features. Use progressive enhancement for newly available features and avoid limited-availability features unless the project browser target allows them.
|
|
90
|
+
20. Choose configured verification intents that cover style lint, build, visual states, accessibility, and browser target risk when available.
|
|
91
|
+
|
|
92
|
+
<!-- mustflow-section: cascade-specificity-policy -->
|
|
93
|
+
## Cascade And Specificity Policy
|
|
94
|
+
|
|
95
|
+
- Keep component styling overrideable with low-specificity class selectors.
|
|
96
|
+
- Do not use IDs as styling weight. IDs are for anchors, form/ARIA relationships, or JavaScript hooks.
|
|
97
|
+
- Do not write DOM-path selectors that break when markup gains or loses a wrapper.
|
|
98
|
+
- Use low-specificity contextual selectors for rich text or CMS areas. Prefer patterns that keep specificity easy to override.
|
|
99
|
+
- Do not add global overrides for local component problems when component-scoped styling or tokens can solve the issue.
|
|
100
|
+
- New `!important` requires an explicit exception for immutable third-party/legacy markup, third-party inline style override, urgent accessibility protection, or equivalent narrow reason.
|
|
101
|
+
|
|
102
|
+
<!-- mustflow-section: responsive-layout-policy -->
|
|
103
|
+
## Responsive Layout Policy
|
|
104
|
+
|
|
105
|
+
- Layout must survive narrow screens, 200% zoom, increased text size, longer localized text, delayed media loading, and reduced motion.
|
|
106
|
+
- Prefer fluid width plus max constraints over fixed width.
|
|
107
|
+
- Prefer min-height, padding, and line-height over fixed height for text-containing controls.
|
|
108
|
+
- Prefer content-based layout, flex/grid, `minmax`, wrapping, and `clamp` over breakpoint patching.
|
|
109
|
+
- Avoid `100vw` except for deliberate full-bleed designs; otherwise prefer normal containing-block width.
|
|
110
|
+
- Avoid absolute positioning for normal document flow. Use it only for overlays, decorative placement, controls anchored to known boxes, or measured geometry.
|
|
111
|
+
|
|
112
|
+
<!-- mustflow-section: token-accessibility-policy -->
|
|
113
|
+
## Token And Accessibility Policy
|
|
114
|
+
|
|
115
|
+
- Name visual values by role, not by raw color or numeric value.
|
|
116
|
+
- Search existing tokens before adding a value. If a new value has product meaning, theme impact, repeated use, or dark-mode behavior, add it at the token source.
|
|
117
|
+
- Body text and normal UI text should meet the project contrast target; large text and meaningful non-text UI indicators must remain distinguishable against adjacent colors.
|
|
118
|
+
- Do not communicate state by color alone. Pair color with text, icon shape, border, position, or another non-color signal when meaning matters.
|
|
119
|
+
- Never remove focus indication without replacing it in the same change.
|
|
120
|
+
- Verify focus, error, selected, disabled, hover, active, and dark-mode states when token or component color changes.
|
|
121
|
+
|
|
122
|
+
<!-- mustflow-section: browser-compatibility-policy -->
|
|
123
|
+
## Browser Compatibility Policy
|
|
124
|
+
|
|
125
|
+
- New CSS features require browser-target awareness before use.
|
|
126
|
+
- Widely supported features may be used normally.
|
|
127
|
+
- Newly available features need a fallback or progressive enhancement path.
|
|
128
|
+
- Limited-availability features are blocked unless the repository browser target explicitly allows them.
|
|
129
|
+
- Feature queries are enhancements only. Keep an accessible fallback outside the query and layer the new behavior inside it.
|
|
130
|
+
|
|
131
|
+
<!-- mustflow-section: exception-policy -->
|
|
132
|
+
## Exception Policy
|
|
133
|
+
|
|
134
|
+
Allowed exceptions include:
|
|
135
|
+
|
|
136
|
+
- Legacy or third-party markup that cannot be changed.
|
|
137
|
+
- Runtime geometry such as drag positions, virtualized list offsets, canvas/SVG measurements, or measured transforms.
|
|
138
|
+
- Accessibility emergency overrides such as focus visibility or reduced-motion protection.
|
|
139
|
+
- Rich text, CMS, or prose styling scoped to a wrapper with low specificity.
|
|
140
|
+
- Essential two-dimensional layouts such as data tables, maps, diagrams, code blocks, canvas, games, and design tools.
|
|
141
|
+
|
|
142
|
+
Every exception must explain why a lower-specificity, token-based, or layout-level fix is not enough and must include a removal condition when practical.
|
|
143
|
+
|
|
144
|
+
<!-- mustflow-section: review-rejection-criteria -->
|
|
145
|
+
## Review Rejection Criteria
|
|
146
|
+
|
|
147
|
+
Reject the change when:
|
|
148
|
+
|
|
149
|
+
- It adds styling ID selectors, long descendant chains, or unexplained `!important`.
|
|
150
|
+
- It repairs normal document flow with negative margins or absolute positioning.
|
|
151
|
+
- It uses fixed width for containers or fixed height for text-containing UI.
|
|
152
|
+
- It hides layout bugs with `overflow: hidden`.
|
|
153
|
+
- It adds unsized media, embeds, ads, or lazy content that can shift layout.
|
|
154
|
+
- It hardcodes raw component colors, spacing, font sizes, radius, or shadows without an exception.
|
|
155
|
+
- It removes focus styling, creates hover-only affordances, or clips the focus indicator.
|
|
156
|
+
- It adds motion without reduced-motion behavior.
|
|
157
|
+
- It uses a new CSS feature without compatibility/fallback review.
|
|
158
|
+
|
|
159
|
+
<!-- mustflow-section: postconditions -->
|
|
160
|
+
## Postconditions
|
|
161
|
+
|
|
162
|
+
- Selectors remain maintainable and low-specificity.
|
|
163
|
+
- Tokens are used or new literals are justified.
|
|
164
|
+
- Responsive, zoom, text-scaling, focus, contrast, motion, compatibility, and layout-shift risks are checked or reported.
|
|
165
|
+
- Exceptions are narrow, explained, and not used as a normal styling path.
|
|
166
|
+
|
|
167
|
+
<!-- mustflow-section: verification -->
|
|
168
|
+
## Verification
|
|
169
|
+
|
|
170
|
+
Use configured oneshot command intents when available:
|
|
171
|
+
|
|
172
|
+
- `lint`
|
|
173
|
+
- `build`
|
|
174
|
+
- `test_related`
|
|
175
|
+
- `test`
|
|
176
|
+
- `docs_validate_fast`
|
|
177
|
+
- `mustflow_check`
|
|
178
|
+
|
|
179
|
+
Report missing visual, accessibility, or browser compatibility verification intents when relevant.
|
|
180
|
+
|
|
181
|
+
<!-- mustflow-section: failure-handling -->
|
|
182
|
+
## Failure Handling
|
|
183
|
+
|
|
184
|
+
- If a style requires `!important` or high specificity, inspect the cascade conflict before adding it.
|
|
185
|
+
- If a raw token is missing, report whether a token should be added or the existing system should be reused.
|
|
186
|
+
- If visual verification is unavailable, report the unverified viewport, zoom, contrast, or motion states.
|
|
187
|
+
- If layout only works for the current screenshot, stop and rework it around content, constraints, and parent layout.
|
|
188
|
+
- If a new CSS feature fails in the target browser or WebView, add a fallback or remove the feature.
|
|
189
|
+
|
|
190
|
+
<!-- mustflow-section: output-format -->
|
|
191
|
+
## Output Format
|
|
192
|
+
|
|
193
|
+
- Boundary checked
|
|
194
|
+
- Cascade, token, and responsive notes
|
|
195
|
+
- Accessibility and layout-stability notes
|
|
196
|
+
- Files changed
|
|
197
|
+
- Command intents run
|
|
198
|
+
- Skipped checks and reasons
|
|
199
|
+
- Remaining CSS risk
|