mustflow 2.22.17 → 2.22.47
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/README.md +6 -0
- package/dist/cli/commands/api.js +874 -0
- 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 +41 -4
- package/dist/cli/commands/verify.js +4 -43
- package/dist/cli/i18n/en.js +15 -0
- package/dist/cli/i18n/es.js +15 -0
- package/dist/cli/i18n/fr.js +15 -0
- package/dist/cli/i18n/hi.js +15 -0
- package/dist/cli/i18n/ko.js +15 -0
- package/dist/cli/i18n/zh.js +15 -0
- package/dist/cli/index.js +1 -0
- package/dist/cli/lib/cli-output.js +1 -1
- package/dist/cli/lib/command-registry.js +6 -0
- 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/local-index/index.js +324 -298
- package/dist/cli/lib/repo-map.js +19 -5
- package/dist/cli/lib/validation/index.js +6 -2
- 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/contract-lint.js +3 -3
- package/dist/core/public-json-contracts.js +48 -0
- package/dist/core/repeated-failure.js +1 -1
- package/dist/core/run-write-drift.js +30 -17
- 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/validation-ratchet.js +61 -18
- package/dist/core/verification-decision-graph.js +8 -1
- package/dist/core/verification-plan-id.js +44 -0
- package/package.json +1 -1
- package/schemas/README.md +6 -0
- package/schemas/command-catalog.schema.json +158 -0
- package/schemas/diff-risk.schema.json +74 -0
- package/schemas/health.schema.json +45 -0
- package/schemas/latest-evidence.schema.json +95 -0
- package/schemas/verification-plan.schema.json +245 -0
- package/schemas/workspace-summary.schema.json +282 -0
- package/templates/default/i18n.toml +139 -1
- 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/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,184 @@
|
|
|
1
|
+
---
|
|
2
|
+
mustflow_doc: skill.astro-code-change
|
|
3
|
+
locale: en
|
|
4
|
+
canonical: true
|
|
5
|
+
revision: 2
|
|
6
|
+
lifecycle: mustflow-owned
|
|
7
|
+
authority: procedure
|
|
8
|
+
name: astro-code-change
|
|
9
|
+
description: Apply this skill when Astro config, pages, layouts, components, islands, hydration directives, content collections, dynamic routes, adapters, MDX, RSS, sitemap, canonical URL, draft, pagination, or build behavior are created or changed.
|
|
10
|
+
metadata:
|
|
11
|
+
mustflow_schema: "1"
|
|
12
|
+
mustflow_kind: procedure
|
|
13
|
+
pack_id: mustflow.core
|
|
14
|
+
skill_id: mustflow.core.astro-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
|
+
# Astro Code Change
|
|
27
|
+
|
|
28
|
+
<!-- mustflow-section: purpose -->
|
|
29
|
+
## Purpose
|
|
30
|
+
|
|
31
|
+
Preserve Astro's static-first model, island hydration boundary, routing contract, content collection schema, canonical URL, RSS, sitemap, adapter, and client bundle boundaries.
|
|
32
|
+
|
|
33
|
+
The default is no-hydration. Add browser JavaScript only after proving that native HTML, CSS, standard links, forms, details/summary, or a small `.astro` script cannot provide the required behavior.
|
|
34
|
+
|
|
35
|
+
<!-- mustflow-section: use-when -->
|
|
36
|
+
## Use When
|
|
37
|
+
|
|
38
|
+
- `astro.config.*`, `src/pages`, `.astro`, content config, live config, collections, layouts, components, MDX, routes, endpoints, adapters, integrations, islands, or hydration directives change.
|
|
39
|
+
- The task adds or changes a page, blog/docs content, interactive UI, SSR/on-demand rendering, framework component, search/filter UI, route behavior, RSS feed, sitemap, canonical URL, draft handling, or pagination.
|
|
40
|
+
|
|
41
|
+
<!-- mustflow-section: do-not-use-when -->
|
|
42
|
+
## Do Not Use When
|
|
43
|
+
|
|
44
|
+
- The change is framework-agnostic CSS or HTML only; use `html-code-change` or `css-code-change`.
|
|
45
|
+
- The interactive component is entirely inside another framework and Astro routing/content is unaffected.
|
|
46
|
+
|
|
47
|
+
<!-- mustflow-section: required-inputs -->
|
|
48
|
+
## Required Inputs
|
|
49
|
+
|
|
50
|
+
- Package metadata, Astro version, framework integrations, TypeScript config, pages, layouts, components, content config, content files, integrations, adapter config, env declarations, public assets, and tests.
|
|
51
|
+
- Astro config values that affect routing and URLs: `site`, `base`, `trailingSlash`, `output`, `adapter`, sitemap integration, MDX integration, and framework integrations.
|
|
52
|
+
- Content collection names, loader bases, schemas, slug/id policy, draft fields, date fields, canonical fields, and route files that turn collection entries into pages.
|
|
53
|
+
- Current output mode, prerender/SSR policy, hydration conventions, route priority, endpoint layout, RSS generation, sitemap generation, and content schema.
|
|
54
|
+
- Configured verification intents.
|
|
55
|
+
|
|
56
|
+
<!-- mustflow-section: preconditions -->
|
|
57
|
+
## Preconditions
|
|
58
|
+
|
|
59
|
+
- Read Astro config, content config, and the affected route tree before changing routing, content, canonical, RSS, sitemap, or hydration behavior.
|
|
60
|
+
- Identify build-time versus request-time data before adding data access.
|
|
61
|
+
- Identify which UI truly needs browser JavaScript and which UI truly needs framework state before adding a framework island.
|
|
62
|
+
- Treat file movement under `src/pages`, route parameter changes, and content slug changes as URL contract changes.
|
|
63
|
+
|
|
64
|
+
<!-- mustflow-section: allowed-edits -->
|
|
65
|
+
## Allowed Edits
|
|
66
|
+
|
|
67
|
+
- Prefer static `.astro`, HTML, CSS, native links, native forms, details/summary, and small `.astro` scripts before adding a framework island.
|
|
68
|
+
- Use hydration directives only for components that need browser interactivity and cannot be handled with a small non-framework script.
|
|
69
|
+
- Keep content collection schemas synchronized with frontmatter and collection reads.
|
|
70
|
+
- Keep server-only secrets and data access out of client islands.
|
|
71
|
+
|
|
72
|
+
<!-- mustflow-section: procedure -->
|
|
73
|
+
## Procedure
|
|
74
|
+
|
|
75
|
+
1. Read package metadata and Astro config first. Record Astro version, framework integrations, `site`, `base`, `trailingSlash`, `output`, adapter, sitemap integration, MDX integration, and any framework integration.
|
|
76
|
+
2. Read `src/content.config.*` when content, docs, blog, RSS, sitemap, canonical, or route generation is involved. Record each collection name, loader base, schema fields, slug/id policy, draft field, and date fields.
|
|
77
|
+
3. Build a route ledger from `src/pages`: static pages, dynamic pages, rest routes, endpoints, prerendered routes, on-demand routes, and possible route-priority collisions.
|
|
78
|
+
4. Classify the change: static route, dynamic route, endpoint, content collection, integration, adapter, SSR/on-demand, island, script, asset, RSS, sitemap, canonical, or docs/content.
|
|
79
|
+
5. Apply the hydration policy below before adding or changing any `client:*` directive.
|
|
80
|
+
6. Apply the routing and rendering policy below before adding dynamic routes, catch-all routes, endpoints, adapter changes, or `prerender` changes.
|
|
81
|
+
7. Apply the content, SEO, and feed policy below before changing frontmatter, schemas, slugs, drafts, canonical URLs, pagination, RSS, or sitemap behavior.
|
|
82
|
+
8. Do not put runtime-only data such as logged-in user state, request-local data, private API responses, or live inventory into build-time collections.
|
|
83
|
+
9. Do not enable request-time rendering without the adapter and deployment contract that support it.
|
|
84
|
+
10. Keep `set:html` or raw HTML injection behind a trusted and sanitized content boundary.
|
|
85
|
+
11. Choose configured verification intents that cover content schema, build, routes, hydration, adapter/runtime, and bundle risk when available.
|
|
86
|
+
|
|
87
|
+
## Hydration Policy
|
|
88
|
+
|
|
89
|
+
- If HTML, CSS, standard links, native forms, details/summary, or static content can provide the feature, do not add hydration.
|
|
90
|
+
- If the behavior is a small browser enhancement such as copy, expand/collapse, theme class toggling, heading-anchor copying, analytics, or a small dropdown, prefer a `.astro` script or custom element over a framework island.
|
|
91
|
+
- Add a framework island only after the component needs framework state, lifecycle, or an existing framework component that cannot be replaced safely.
|
|
92
|
+
- Use `client:load` only for immediately visible controls that must be interactive as soon as the page loads.
|
|
93
|
+
- Use `client:idle` for non-critical above-fold or near-fold enhancements that may hydrate after initial load.
|
|
94
|
+
- Use `client:visible` for below-the-fold or heavy widgets that users may never view.
|
|
95
|
+
- Treat `client:only` as a last-resort exception. It requires an SSR-impossible browser-only dependency or API and a named reason.
|
|
96
|
+
- Do not use framework islands for ordinary links, breadcrumbs, tag lists, card lists, static tables of contents, prose callouts, pagination, or static search links.
|
|
97
|
+
- When adding a hydration directive, report the reason and the expected client bundle or island-count impact when verifiable.
|
|
98
|
+
|
|
99
|
+
## Routing And Rendering Policy
|
|
100
|
+
|
|
101
|
+
- In static output, every dynamic route must have `getStaticPaths`.
|
|
102
|
+
- In on-demand or SSR dynamic routes, do not use `getStaticPaths`; read `Astro.params`, perform the request-time lookup, and handle missing entries with an explicit 404 or redirect path.
|
|
103
|
+
- `getStaticPaths` params must match bracket parameter names exactly and must be strings.
|
|
104
|
+
- Custom slugs containing `/` require a rest route such as a catch-all route. Do not force slash-containing slugs into a single named parameter route.
|
|
105
|
+
- Treat changes under `src/pages` as public URL changes, including endpoint names and extension-bearing endpoint paths.
|
|
106
|
+
- Check route priority when adding static routes, named parameters, rest parameters, catch-all routes, and endpoints that could claim the same URL.
|
|
107
|
+
- Remember that endpoints can take precedence over pages at the same path. Do not assume a catch-all page receives paths claimed by a more specific endpoint or page.
|
|
108
|
+
- Do not assume adding an adapter makes every page SSR. Keep static output as the default unless the project explicitly chooses server output or route-level on-demand rendering.
|
|
109
|
+
- Do not switch the whole project to server output for one page unless the deployment and route contract require it.
|
|
110
|
+
- Do not assume SSR dynamic routes appear in sitemap output automatically.
|
|
111
|
+
|
|
112
|
+
## Content SEO Feed Policy
|
|
113
|
+
|
|
114
|
+
- Every frontmatter field used by routes, SEO, RSS, sitemap, pagination, filtering, or canonical URLs must be declared in the content collection schema.
|
|
115
|
+
- Treat changing a content filename, collection id, or frontmatter slug as a public URL change. Existing public content needs a redirect or explicit canonical decision.
|
|
116
|
+
- Draft filtering must be consistent across index pages, detail route generation, tag pages, author pages, pagination, RSS, sitemap customization, and custom page lists.
|
|
117
|
+
- Filter drafts before sorting and paginating content.
|
|
118
|
+
- Build canonical URLs from Astro URL primitives such as `Astro.site`, `Astro.url`, or page URL values. Do not hand-concatenate `site`, `base`, paths, and slashes.
|
|
119
|
+
- Allow frontmatter canonical overrides only for explicit external originals, syndication, or documented canonical exceptions.
|
|
120
|
+
- RSS item links must match actual generated public route paths and the project's trailing-slash policy.
|
|
121
|
+
- Do not use page-glob RSS helpers to bypass content schema validation when the project already has content collections.
|
|
122
|
+
- Keep full-content RSS behind sanitizer and absolute URL handling for internal links, images, and MDX/HTML output. Prefer excerpt feeds when that boundary is absent.
|
|
123
|
+
- Sitemap output must contain public canonical URLs only and must exclude drafts, private routes, noindex routes, and unrelated on-demand paths.
|
|
124
|
+
- If sitemap custom pages are used, check them against canonical, draft, trailing-slash, base, and locale policy.
|
|
125
|
+
|
|
126
|
+
## Review Rejection Criteria
|
|
127
|
+
|
|
128
|
+
Reject or revise a change when:
|
|
129
|
+
|
|
130
|
+
- A framework island is added without proving framework state or lifecycle is required.
|
|
131
|
+
- `client:load` is used for content-heavy, below-the-fold, static, or non-urgent UI.
|
|
132
|
+
- `client:only` is used because SSR broke, instead of isolating the browser-only dependency.
|
|
133
|
+
- Static output dynamic routes lack `getStaticPaths`.
|
|
134
|
+
- On-demand or SSR dynamic routes use `getStaticPaths`.
|
|
135
|
+
- Route params do not match bracket names or are not strings.
|
|
136
|
+
- A content slug with `/` is mapped through a non-rest route.
|
|
137
|
+
- Draft filtering differs between lists, detail pages, RSS, sitemap, or pagination.
|
|
138
|
+
- Canonical URLs are built by ad hoc string concatenation.
|
|
139
|
+
- RSS or sitemap includes drafts, stale paths, wrong trailing slash paths, or paths that the route ledger cannot produce.
|
|
140
|
+
- A schema-used frontmatter field is read without being declared in the content schema.
|
|
141
|
+
- Runtime request data is placed into build-time content collections.
|
|
142
|
+
|
|
143
|
+
<!-- mustflow-section: postconditions -->
|
|
144
|
+
## Postconditions
|
|
145
|
+
|
|
146
|
+
- Build-time and runtime data are separated.
|
|
147
|
+
- Client JavaScript is limited to needed islands.
|
|
148
|
+
- Route, endpoint, canonical URL, RSS, sitemap, draft, and content schema impact is known.
|
|
149
|
+
- SSR or adapter changes are verified or reported.
|
|
150
|
+
|
|
151
|
+
<!-- mustflow-section: verification -->
|
|
152
|
+
## Verification
|
|
153
|
+
|
|
154
|
+
Use configured oneshot command intents when available:
|
|
155
|
+
|
|
156
|
+
- `lint`
|
|
157
|
+
- `build`
|
|
158
|
+
- `test_related`
|
|
159
|
+
- `test`
|
|
160
|
+
- `docs_validate_fast`
|
|
161
|
+
- `mustflow_check`
|
|
162
|
+
|
|
163
|
+
Report missing framework validation, route preview, content schema, RSS, sitemap, canonical, or client bundle verification intents when relevant.
|
|
164
|
+
|
|
165
|
+
When verifiable, report counts for added hydration directives, added island risk, generated public content pages, excluded drafts, RSS items, sitemap URLs, and duplicate canonical URLs.
|
|
166
|
+
|
|
167
|
+
<!-- mustflow-section: failure-handling -->
|
|
168
|
+
## Failure Handling
|
|
169
|
+
|
|
170
|
+
- If an island is added only to work around static markup, revisit the markup and content boundary first.
|
|
171
|
+
- If SSR is requested without adapter evidence, stop and report the deployment contract gap.
|
|
172
|
+
- If content schema drift appears, fix schema and sample content before adding more pages.
|
|
173
|
+
- If draft, canonical, RSS, sitemap, or pagination drift appears, fix the shared content and route contract before adding new entries.
|
|
174
|
+
- If a route collision appears, resolve the route ledger before changing unrelated rendering code.
|
|
175
|
+
|
|
176
|
+
<!-- mustflow-section: output-format -->
|
|
177
|
+
## Output Format
|
|
178
|
+
|
|
179
|
+
- Boundary checked
|
|
180
|
+
- Build/runtime, route, endpoint, content, hydration, canonical, RSS, sitemap, and draft notes
|
|
181
|
+
- Files changed
|
|
182
|
+
- Command intents run
|
|
183
|
+
- Skipped checks and reasons
|
|
184
|
+
- Remaining Astro risk
|
|
@@ -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
|