mustflow 2.112.4 → 2.112.8

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.
@@ -2,11 +2,11 @@
2
2
  mustflow_doc: skill.module-boundary-review
3
3
  locale: en
4
4
  canonical: true
5
- revision: 2
5
+ revision: 3
6
6
  lifecycle: mustflow-owned
7
7
  authority: procedure
8
8
  name: module-boundary-review
9
- description: Apply this skill when code is created, changed, reviewed, or reported and module separation, cohesion, coupling, data ownership, rule ownership, failure ownership, import direction, circular dependency, DTO leakage, shared/common/utils growth, mock-heavy tests, repeated policy conditions, enum interpretation, repository business logic, anemic domain, domain-to-I/O leakage, transaction boundary mismatch, event naming, public API bloat, caller sequencing, premature reuse, co-change history, bug/fix distance, config ownership, log responsibility, exception translation, cache invalidation ownership, repeated authorization checks, frontend/backend policy leakage, time policy, batch or worker bypass, or temporary-code accumulation can make a change spread beyond its real owner.
9
+ description: Apply this skill when code is created, changed, reviewed, or reported and module separation, cohesion, coupling, change axes, stability direction, data ownership, rule ownership, failure ownership, import direction, circular dependency, DTO leakage, shared/common/utils growth, mock-heavy tests, repeated policy conditions, enum interpretation, repository business logic, anemic domain, domain-to-I/O leakage, transaction boundary mismatch, event naming, public API bloat, caller sequencing, premature reuse, co-change history, bug/fix distance, config ownership, log responsibility, exception translation, cache invalidation ownership, repeated authorization checks, frontend/backend policy leakage, time policy, batch or worker bypass, shallow modules, or temporary-code accumulation can make a change spread beyond its real owner.
10
10
  metadata:
11
11
  mustflow_schema: "1"
12
12
  mustflow_kind: procedure
@@ -46,6 +46,12 @@ who must change, who owns the data, who owns the failure, and who should not nee
46
46
  files repeatedly change together.
47
47
  - A review claims that layering, clean architecture, DDD, modular monolith, feature folders,
48
48
  repositories, services, shared utilities, events, DTOs, or frontend/backend separation is clean.
49
+ - A design starts from feature folders, technical layers, or CRUD nouns and may be missing the real
50
+ split criterion: who changes the code, when, why, and independently of which other owners.
51
+ - A module depends on a more volatile detail such as a provider SDK, UI route flow, database query
52
+ shape, external response, framework object, config dialect, or generated transport model.
53
+ - A change creates many thin files whose public APIs are wider than the hidden implementation, or
54
+ whose abstractions only forward calls, wrap switches, or rename CRUD.
49
55
  - The suspected issue is not a large service split yet, but a local module boundary that leaks
50
56
  business rules, data shape, failure handling, sequencing, or ownership to neighbors.
51
57
 
@@ -70,12 +76,21 @@ who must change, who owns the data, who owns the failure, and who should not nee
70
76
 
71
77
  - Change reason: the policy, feature, bug, data shape, failure path, or operational behavior that
72
78
  caused the edit.
79
+ - Change-axis ledger: likely independent changes over the next useful planning horizon, including
80
+ policy, external provider, data model, UI flow, permission, pricing, billing, deployment, and
81
+ operational changes, plus who or what would cause each change.
73
82
  - Changed-file spread: folders, modules, layers, packages, tests, generated files, templates, and
74
83
  docs touched by the same reason.
75
84
  - Co-change evidence when available: recent commits, PRs, repeated paired files, or local diff
76
85
  history showing files that usually move together.
77
86
  - Module graph evidence: imports, exports, public APIs, call sites, dependency direction, cycles,
78
87
  shared helpers, DTO flow, and configuration reads.
88
+ - Stability evidence: which modules many callers rely on, which modules change because external
89
+ details move, and whether dependencies point toward the more stable policy owner rather than the
90
+ more volatile implementation detail.
91
+ - Change-simulation evidence: expected files touched for at least three concrete next changes, such
92
+ as changing a payment provider, adding a pricing rule, changing admin UI flow, changing invoice
93
+ format, changing permissions, or adding a worker path.
79
94
  - Configured guardrail evidence when available: `code/module-boundary` results for
80
95
  `.mustflow/config/module-boundaries.toml` layer deny rules, public entrypoints, feature imports,
81
96
  shared budgets, and import cycles.
@@ -121,15 +136,30 @@ who must change, who owns the data, who owns the failure, and who should not nee
121
136
  - Count how many modules, folders, layers, tests, docs, and templates changed for that one reason.
122
137
  - If one policy edit forces controller, service, repository, mapper, utility, constants, worker,
123
138
  and UI edits together, treat the module boundary as suspect.
139
+ - Before accepting a new split, list the independent change axes first. Do not start with
140
+ `controllers`, `services`, `repositories`, `utils`, or CRUD nouns unless the repository already
141
+ proves those are the real change units.
124
142
  2. Group by reason to change.
125
143
  - Files with different names but the same change reason are one module candidate.
126
144
  - `UserService`, `UserValidator`, `UserMapper`, `UserPolicy`, and `UserHelper` changing together is
127
145
  evidence of sliced roles, not necessarily separated modules.
146
+ - Write each candidate module as "this module changes when ...". If that sentence names more than
147
+ one independent owner, split the candidate or report the boundary risk.
148
+ - Prefer volatility names and business capabilities, such as pricing policy, payment provider,
149
+ subscription lifecycle, invoice rendering, fraud check, fulfillment handoff, or entitlement
150
+ decision, over role-sliced layer names when those better predict future edits.
128
151
  3. Check import direction.
129
152
  - Infrastructure or low-level modules should not know high-level business use case names unless
130
153
  the repository intentionally uses that inversion.
131
154
  - Treat lower layers importing policy names such as plan, checkout, approval, permission, or
132
155
  subscription as evidence that the policy leaked downward.
156
+ - Check stability direction. Code that many callers depend on should not import volatile details
157
+ such as Stripe, Toss, Prisma, SQLAlchemy, React Router, FastAPI request objects, provider DTOs,
158
+ raw SQL builders, generated clients, or `process.env` unless the repository explicitly makes
159
+ that layer an edge adapter.
160
+ - Prefer interfaces or ports owned by the using side when the abstraction protects stable policy
161
+ code from an unstable provider, database, queue, cache, filesystem, network, framework, or UI
162
+ detail.
133
163
  4. Treat cycles as boundary failure until proven harmless.
134
164
  - If A imports B and B imports A, identify the missing concept, ownership decision, event, port, or
135
165
  data-flow direction.
@@ -188,6 +218,11 @@ who must change, who owns the data, who owns the failure, and who should not nee
188
218
  - Too many exported functions can mean internals are on display.
189
219
  - If callers must call `create`, then `apply`, then `reserve`, then `mark`, the module has handed
190
220
  out an assembly manual instead of owning the sequence.
221
+ - A good module should have a small door and a deeper inside. If most files only expose one-line
222
+ forwarding methods, wrapper services, or renamed CRUD calls, treat the split as shallow module
223
+ theater until a real hidden decision or variation point is named.
224
+ - A public API wider than the behavior it hides is usually not a boundary; it is implementation
225
+ leakage with extra navigation.
191
226
  16. Check reuse claims.
192
227
  - "Used in many places" is not enough reason to extract a common helper.
193
228
  - Reuse is safe only when the callers change for the same reason. Similar code from different
@@ -197,20 +232,27 @@ who must change, who owns the data, who owns the failure, and who should not nee
197
232
  names.
198
233
  - If a file repeatedly receives temporary exceptions in the same direction, name the missing
199
234
  concept instead of adding another branch.
200
- 18. Compare bug location with fix location.
235
+ 18. Run change simulations.
236
+ - Pick at least three plausible next changes from the change-axis ledger.
237
+ - For each scenario, list which modules should change and which modules must stay ignorant.
238
+ - If changing a provider, UI flow, invoice format, permission rule, or pricing rule repeatedly
239
+ crosses the same unrelated modules, treat that as hidden coupling.
240
+ - If a module would break because a different module's test changed, identify whether the
241
+ boundary couples futures that should be independent.
242
+ 19. Compare bug location with fix location.
201
243
  - If the symptom appears in one module but the fix belongs in an unrelated utility, policy, or
202
244
  mapper, the responsibility line may be bent.
203
- 19. Check config, time, and logging responsibility.
245
+ 20. Check config, time, and logging responsibility.
204
246
  - Raw `process.env`, feature flag, remote config, clock, timezone, locale, and date parsing should
205
247
  usually be read at the edge and injected as explicit values.
206
248
  - Logs that mention another module's job, such as payment code logging welcome-email failure, are
207
249
  strong ownership evidence.
208
- 20. Translate exceptions at boundaries.
250
+ 21. Translate exceptions at boundaries.
209
251
  - Database, provider, filesystem, framework, and payment errors should not leak through every
210
252
  layer unchanged.
211
253
  - Convert external failure dialect into the receiving module's language while preserving safe
212
254
  diagnostic causes.
213
- 21. Check cache invalidation, authorization, frontend policy, and alternate entrypoints.
255
+ 22. Check cache invalidation, authorization, frontend policy, and alternate entrypoints.
214
256
  - Cache invalidation belongs near the data owner, not scattered across random callers.
215
257
  - Authorization checks repeated in controllers should move to one use-case entry, policy, or
216
258
  capability boundary.
@@ -218,7 +260,14 @@ who must change, who owns the data, who owns the failure, and who should not nee
218
260
  backend policy from internal statuses.
219
261
  - Batch, cron, worker, and admin tools should use the same use case or policy owner as online
220
262
  requests instead of bypassing validations, events, logs, and permissions.
221
- 22. Decide the smallest response.
263
+ 23. Attack the design before accepting it.
264
+ - Name the three modules or abstractions most likely to rot first.
265
+ - For each, name the change request that would break it, the owner that would cause the change,
266
+ and whether the blast stays inside one module.
267
+ - Remove or redesign shallow wrappers, central managers, enum-switch strategies, provider-shaped
268
+ "neutral" ports, configuration-driven logic hiding, event-bus call hiding, and CRUD stamp
269
+ modules when they fail the attack.
270
+ 24. Decide the smallest response.
222
271
  - If evidence is strong and the edit is in scope, make the smallest boundary fix.
223
272
  - If the fix would be broad, report the module boundary risk and the first safe split point.
224
273
  - If evidence is weak, leave the structure alone and report the missing co-change or ownership
@@ -229,9 +278,15 @@ who must change, who owns the data, who owns the failure, and who should not nee
229
278
 
230
279
  - The changed reason, changed-file spread, co-change evidence, data owner, policy owner, failure
231
280
  owner, and public module surface are explicit or reported as missing.
281
+ - The relevant change axes and stability direction are explicit, or reported as missing evidence.
282
+ - At least three change simulations were checked when designing or accepting a new module boundary,
283
+ unless the task is only auditing an existing small local diff.
232
284
  - Import direction, cycles, DTO spread, shared helper ownership, repository policy leakage, domain
233
285
  I/O leakage, transaction mismatch, event naming, caller sequencing, duplicated policy, and alternate
234
286
  entrypoints are fixed or reported where relevant.
287
+ - Shallow module signals such as role-sliced CRUD layers, one-line wrappers, provider-shaped ports,
288
+ ownerless managers, event-bus call hiding, config-hidden logic, and public API bloat are removed,
289
+ justified, or reported.
235
290
  - Any new abstraction hides a named responsibility and reduces caller knowledge, change spread, or
236
291
  test mock cost.
237
292
  - Behavior, public contracts, permissions, data ownership, and failure semantics remain intact or
@@ -276,11 +331,13 @@ design is clean.
276
331
  ## Output Format
277
332
 
278
333
  - Module boundary reviewed
279
- - Change reason and changed-file spread
334
+ - Change reason, change axes, stability direction, and changed-file spread
280
335
  - Co-change, import direction, cycle, DTO, shared helper, public API, caller sequencing, and test mock
281
336
  evidence
282
337
  - Data owner, policy owner, failure owner, cache invalidation owner, config/time owner, and
283
338
  authorization owner where relevant
339
+ - Change simulations and most-likely-to-rot modules
340
+ - Shallow module signals found, fixed, justified, or deferred
284
341
  - Boundary fixes made or recommended
285
342
  - Evidence level: current diff, local source evidence, history evidence, configured-test evidence,
286
343
  missing, or not applicable
@@ -0,0 +1,183 @@
1
+ ---
2
+ mustflow_doc: skill.readme-evidence-gate
3
+ locale: en
4
+ canonical: true
5
+ revision: 4
6
+ lifecycle: mustflow-owned
7
+ authority: procedure
8
+ name: readme-evidence-gate
9
+ description: Apply this skill when README content is generated, reviewed, or audited for unsupported claims, README-as-investment-deck overclaim, unshipped roadmap-as-current wording, fake or internal-demo usage examples, subjective maintenance-debt wording such as TODO later, temporary, for now, probably, internal team reasons, ask Slack or a person, sample may differ, or see code, and drift-prone executable README contracts such as install, setup, run, dev server, test, build, Docker, environment, API, CLI output, package-manager guidance, support matrices, badges, roadmap, architecture, file-tree explanations, license, trademark, copyright, credit, attribution, or security-exposure surfaces such as real-looking fake keys, internal URLs, production paths, API keys in query strings, screenshots, and pasteable production commands.
10
+ metadata:
11
+ mustflow_schema: "1"
12
+ mustflow_kind: procedure
13
+ pack_id: mustflow.core
14
+ skill_id: mustflow.core.readme-evidence-gate
15
+ command_intents:
16
+ - docs_validate_fast
17
+ - test_related
18
+ - test_release
19
+ - mustflow_check
20
+ ---
21
+
22
+ # README Evidence Gate
23
+
24
+ <!-- mustflow-section: purpose -->
25
+ ## Purpose
26
+
27
+ Prevent README prose from becoming a contract for features, setup paths, APIs, safety claims, or future work that the repository does not actually support.
28
+
29
+ <!-- mustflow-section: use-when -->
30
+ ## Use When
31
+
32
+ - README text is generated from code, issue notes, AI output, review feedback, or a rough project summary.
33
+ - A README draft lists features, quick-start steps, install or run commands, environment variables, public APIs, supported platforms, architecture, license, roadmap, security, performance, or scalability claims.
34
+ - A README review needs to find hallucinated claims, fake commands, invented environment variables, unsupported examples, or marketing words that outrun the code.
35
+ - A README uses production-ready, enterprise-grade, one-line integration, platform, system, engine, support, badge, or roadmap language that may describe aspiration instead of shipped behavior.
36
+ - README examples may call desired APIs instead of current public APIs, hide internal demo prerequisites, or omit normal failure paths such as auth failure, timeout, empty data, permission denied, rate limit, pagination, or idempotency.
37
+ - README, `.env.example`, examples, screenshots, or contribution templates may expose real-looking fake keys, API keys in URL query strings, internal domains, private IPs, admin URLs, production paths, bucket names, customer identifiers, or pasteable production commands.
38
+ - A README contains TODO, later, temporary, for now, probably, usually, team-reason, legacy, not organized yet, ask Slack or person, production differs, sample may differ, or see code wording that describes a person's work state instead of the current user contract.
39
+ - README code blocks, command examples, CLI output snippets, import examples, environment examples, install instructions, test commands, build output paths, server startup instructions, or runtime support statements need to be checked as pasteable contracts.
40
+ - README license, trademark, copyright, attribution, credit, third-party asset, AI-generated content, or open-source status claims need to be checked against repository-owned rights and notice evidence.
41
+ - `readme-authoring` is active and the README contains more than a small link-only or typo-only change.
42
+
43
+ <!-- mustflow-section: do-not-use-when -->
44
+ ## Do Not Use When
45
+
46
+ - The task only fixes spelling, broken anchors, or formatting and does not add or preserve factual claims.
47
+ - The task edits a non-README documentation page whose owning skill has a stricter claim-evidence procedure.
48
+ - The user explicitly asks for speculative marketing copy, a pitch, or roadmap ideation outside repository truth.
49
+ - The repository evidence is unavailable and the task can be completed by reporting the missing evidence without editing the README.
50
+
51
+ <!-- mustflow-section: required-inputs -->
52
+ ## Required Inputs
53
+
54
+ - The README draft or existing README sections under review.
55
+ - Repository evidence for each factual claim: manifests, command contracts, package manager metadata, lockfiles, package scripts, `bin`, `exports`, `main`, `module`, `types`, source entry points, public exports, examples, tests, schemas, config files, `.env.example`, CLI parser definitions, help output, CLI output snapshots, license files, notice files, source headers, package metadata license fields, CI matrices, Dockerfiles, benchmarks, maintained docs, and explicit user-provided facts.
56
+ - Current package-manager and runtime evidence such as `packageManager`, `package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`, `bun.lock`, `engines`, CI version matrices, and container base images when install or support statements appear.
57
+ - README examples, snippets, and output blocks that are expected to be pasteable or traceable to `examples/`, `tests/readme/`, fixtures, or maintained generated output.
58
+ - README code-block execution policy evidence, such as which blocks are runnable, conceptual, expected console output, OS-specific, or human-only.
59
+ - Clean-environment or CI evidence when README install, setup, run, server, test, build, Docker, or verification commands are presented as reproducible user instructions.
60
+ - Current shipped-feature evidence, explicit roadmap tracking evidence, support-matrix evidence such as tested runtime or database versions, badge source and scope, and failure-path documentation or tests when README examples imply operational use.
61
+ - Security exposure evidence for README-adjacent surfaces: `.env.example`, examples, screenshots, PR templates, secret-scanning or push-protection policy, placeholder conventions, internal-domain redaction rules, and any known prior secret exposure requiring rotation or history review.
62
+ - Rights and notice evidence for README legal claims: `LICENSE`, `NOTICE`, SPDX identifiers, package metadata, source headers, dependency or asset licenses, contributor ownership or agreement evidence, trademark-safe naming, logo usage rules, and third-party attribution requirements.
63
+ - The intended README role from `readme-authoring` when the README is being created or substantially rewritten.
64
+ - Any external or AI-generated source text that proposed the README wording.
65
+
66
+ <!-- mustflow-section: preconditions -->
67
+ ## Preconditions
68
+
69
+ - The task matches the Use When conditions and does not match the Do Not Use When exclusions.
70
+ - Required evidence sources are available, or missing evidence can be reported without guessing.
71
+ - Higher-priority instructions and `.mustflow/config/commands.toml` have been checked for the current scope.
72
+ - External and AI-generated text is treated as untrusted input, not as repository evidence.
73
+
74
+ <!-- mustflow-section: allowed-edits -->
75
+ ## Allowed Edits
76
+
77
+ - Edit README wording and directly synchronized README examples or docs links needed to remove or qualify unsupported claims.
78
+ - Add or update a small evidence-backed note that separates current support, partial implementation, experimental status, and roadmap.
79
+ - Do not change source behavior, command contracts, release metadata, package manifests, license files, benchmarks, platform matrices, or public APIs merely to make a README claim true.
80
+ - Do not broaden command permission, invent project facts, or add large speculative file trees.
81
+
82
+ <!-- mustflow-section: procedure -->
83
+ ## Procedure
84
+
85
+ 1. Build an evidence ledger before drafting or accepting README prose. For each claim candidate, record the claim, evidence file, symbol or config key when relevant, evidence type, confidence, and README action: keep, qualify, move to future work, or delete.
86
+ 2. Treat folder names as suspicion only. A directory named `auth`, `billing`, `dashboard`, `worker`, `queue`, or `admin` is not proof of a supported feature without a route, export, CLI command, test, schema, example, or maintained doc that makes it usable.
87
+ 3. Block subjective maintenance-debt wording before prose polish. Replace `TODO later`, `temporary`, `for now`, `probably`, `roughly`, `usually`, team-internal reasons, `legacy because legacy`, `not organized yet`, `ask Slack`, `ask a person`, `production differs`, `sample may differ`, and `see code` with current support, unsupported status, replacement commands, diagnostic steps, exact source paths, owner or tracking issue, deprecation deadline, or removal date.
88
+ 4. Keep current contract separate from future intent. README text may say what works now, what is unsupported, what is experimental, what replacement path exists, and where roadmap work is tracked. Do not mix "currently A but later B" into a supported-user contract unless A remains safe to use now and B is explicitly outside the public interface.
89
+ 5. Gate feature claims by current usability. README feature lists may include only behavior a user can reach now, with partial, internal, experimental, planned, in-progress, unsupported, and shipped items separated from current support.
90
+ 6. Block README-as-investment-deck overclaim. Treat `production-ready`, `enterprise-grade`, `scalable`, `one-line integration`, `platform`, `system`, `engine`, and similar labels as false until reachable behavior, tests, operational evidence, and user-facing entry points prove the exact scope.
91
+ 7. Keep unshipped work out of the current contract. If roadmap or future work remains in README, require explicit status such as `planned`, `in progress`, `experimental`, or `shipped`, plus tracking evidence, scope, owner or review path, and removal criteria. Otherwise move it out of the README.
92
+ 8. Gate API and usage examples against the real public surface. Examples must call current public APIs, CLI entry points, or maintained examples, not hoped-for methods or copied competitor README concepts such as plugin, adapter, middleware, or provider support that this repository does not expose.
93
+ 9. Surface hidden internal demo prerequisites. If an example depends on account rights, region, model access, proxy settings, sample databases, migrations, workers, Redis, Postgres, queues, admin tokens, or internal fixtures, state the prerequisite or remove the example from the general quick start.
94
+ 10. Define support as tested support. Replace broad support claims with tested ranges such as `tested with PostgreSQL 15 and 16` when evidence exists; do not treat "worked once locally" as supported platform, database, provider, browser, OS, or runtime coverage.
95
+ 11. Treat badges and numbers as scoped signals, not stability proof. Build badges, coverage, download counts, stars, benchmarks, and adoption numbers need a source, scope, and date when used; they cannot substitute for feature, readiness, security, or support evidence.
96
+ 12. Require failure-path evidence for operational examples. When README examples imply normal production use, point to or include behavior for auth failure, timeout, empty data, permission denied, rate limit, pagination, and idempotency when those conditions are relevant to the documented API or workflow.
97
+ 13. Keep experimental features visually and procedurally separate. Do not promote experimental features in the primary install flow, first quick start, main screenshot, or top feature list unless the README makes the experimental boundary impossible to miss.
98
+ 14. Gate package-manager and install guidance by declared sources. Match install commands to lockfiles and package metadata such as `packageManager`, `package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`, and `bun.lock`; do not default to npm, yarn, pnpm, Bun, Docker, or global CLI installation because it is common in the ecosystem.
99
+ 15. Prefer reproducible install wording when the repository evidence supports it. For example, lockfile-backed Node README instructions should favor `npm ci` over a mutating `npm install` path when npm lockfile evidence exists, and Python dependency instructions should include `python -m pip check` after requirements installation when that is part of the maintained setup contract.
100
+ 16. Gate commands by declared or maintained sources. Installation, quick-start, development, test, build, Docker, deployment, and verification commands must come from package scripts, command contracts, Makefiles, Docker or Compose files, language manifests, maintained docs, or explicit user instructions. Distinguish development server commands from production build and start commands.
101
+ 17. Statically map README commands to real entry points before prose polish. A package script reference such as `npm run dev` must exist in package metadata, a language-framework command such as `python manage.py runserver` must have the named entry file, a Compose service must exist in Compose config, and a container example must identify a real image or build path instead of nonsense placeholders such as `docker run .`.
102
+ 18. Separate install, setup, run, server-readiness, test, and build claims. Do not let one successful command imply the rest of the README workflow works. When the README presents server startup as runnable, require a readiness signal such as a health endpoint, expected port, expected page response, or documented manual boundary.
103
+ 19. Label README code blocks by execution status when the repository uses or adopts such a convention. Keep runnable shell blocks such as `bash verify` separate from expected console output, conceptual snippets, `bash no-run`, destructive or human-only commands, and OS-specific examples so automated extraction cannot run placeholder text.
104
+ 20. Check OS and shell boundaries for pasteable instructions. A README that claims Windows, macOS, Linux, Bash, cmd, or PowerShell support must not mix incompatible environment-variable syntax, path syntax, line continuations, or prompt markers without labeling the target shell.
105
+ 21. Gate CLI names and options by executable surfaces. README CLI names must match `bin` or documented entry points, and options, aliases, defaults, required flags, help text, output examples, stdout/stderr shape, and exit semantics must match CLI parser code, `--help`, fixtures, snapshots, or maintained output tests.
106
+ 22. Gate environment variables by code or config. Document only variables found in source lookups, config schemas, runtime manifests, `.env.example`, or maintained configuration docs. If README and `.env.example` disagree, fix the README only when the code evidence supports it, otherwise report the conflict.
107
+ 23. Gate API examples by public surface. Library examples must start from public exports, documented CLI entry points, generated API references, or tested examples. Match import paths against `exports`, `main`, `module`, `types`, source entry points, and declaration output. Do not document internal helpers, guessed import paths, guessed argument order, or sync/async behavior without source evidence.
108
+ 24. Treat README code blocks as pasteable contracts. Prefer examples under `examples/`, `tests/readme/`, fixtures, generated output snapshots, or CI-exercised README examples when feasible; otherwise qualify conceptual snippets so they cannot be mistaken for runnable setup, API, CLI, or deployment instructions.
109
+ 25. Gate README security exposure as if the README is public distribution, even for private repositories. README, `.env.example`, examples, screenshots, and package artifacts can leak through package publication, Docker images, wikis, customer handoffs, and LLM/code scans.
110
+ 26. Use placeholder-shaped secrets only. Do not include real credentials or real-looking fake keys such as `sk_live_...`, `AKIA...`, or `ghp_...`; use placeholders such as `replace-with-your-api-key` and avoid real domains, project IDs, regions, account names, bucket names, tenant IDs, or customer names.
111
+ 27. Keep secrets out of URLs and pasteable production commands. Ban API keys in URL query strings; prefer `Authorization` header examples. Do not include pasteable production commands such as production `kubectl`, destructive pod, real backup bucket, production migration, or production deploy commands in README.
112
+ 28. Redact internal and production topology. Replace internal URLs, private IPs, admin URLs, staging or production domains, production filesystem paths, deployment user paths, private-key paths, cluster names, database names, and bucket names with `example.com`, `example.test`, or `localhost` placeholders.
113
+ 29. Check screenshots and images as README content. Do not accept screenshots that show tokens, auth headers, account IDs, internal URLs, private IPs, dashboards, logs, incident IDs, customer names, tenant IDs, or production identifiers.
114
+ 30. Treat historical secret exposure as an incident, not a prose fix. If README, docs, examples, or screenshots ever contained a real secret, report the need for revocation, rotation, history scanning, and log review; deleting the current line is not sufficient.
115
+ 31. Gate test, build, and runtime support claims against real surfaces. Test commands must match the configured runner and script options; build output paths must match the configured build result; supported versions must match `engines`, CI matrices, runtime APIs, and Dockerfiles rather than hope or convention.
116
+ 32. Gate README legal claims as repository contracts, not slogans. Do not say `open source`, `MIT`, `Apache`, `GPL`, `commercial use allowed`, `no attribution required`, `official`, `certified`, `partner`, or similar rights/status language unless `LICENSE`, `NOTICE`, SPDX identifiers, package metadata, source headers, third-party notices, asset attributions, contributor rights, and trademark-safe wording agree.
117
+ 33. Use exact SPDX identifiers when a README names a software license. Keep `Apache-2.0`, `MIT`, `GPL-3.0-only`, `GPL-3.0-or-later`, and similar identifiers aligned across README, license files, package metadata, source headers, and notice surfaces.
118
+ 34. Preserve license conditions instead of collapsing them into permission slogans. If the README says commercial use is allowed, also preserve required notice, attribution, source-availability, copyleft, patent, NOTICE, or network-use obligations when they apply.
119
+ 35. Keep code, docs, assets, and trademarks separate. Creative Commons may fit docs, art, or media but is usually not the right software-code license; open-source code rights do not grant trademark or logo rights; and third-party asset credits should identify title, author, source, license, and modification status when the license requires it.
120
+ 36. Treat AI-generated provenance claims as weak evidence. A README cannot waive attribution, copyright, license, asset, snippet, or trademark obligations merely by saying content was AI-generated.
121
+ 37. Gate security, privacy, production-readiness, encryption, authorization, role-based access, secret handling, performance, scalability, benchmark, lightweight, platform-support, compatibility, and license claims with explicit evidence. Prefer deletion or narrow wording when evidence is missing.
122
+ 38. Gate architecture explanations by executable structure. Do not describe queues, workers, microservices, databases, caches, frontends, backends, deployment topology, or failure domains unless those surfaces exist in current code, config, infra files, tests, or maintained architecture docs.
123
+ 39. Keep file-tree explanations short and entry-point oriented. Include only paths a README reader needs to start, configure, verify, or contribute; do not describe broad folders from their names.
124
+ 40. Run a reverse audit after the draft: scan every README sentence for unsupported nouns, verbs, adjectives, numbers, commands, env vars, imports, platforms, code blocks, output snippets, screenshots, rights claims, internal-state wording, and future-tense promises. Remove or qualify anything missing ledger evidence.
125
+ 41. Treat high-risk adjectives as blocked until proven: `production-ready`, `secure`, `encrypted`, `scalable`, `enterprise-grade`, `robust`, `battle-tested`, `fully featured`, `seamless`, `10x`, `lightweight`, and similar marketing claims.
126
+ 42. Activate narrower skills before accepting claims that belong to another contract surface:
127
+ - command examples, help text, JSON output, or exit semantics: `command-intent-mapping-gate`, `cli-option-contract-review`, or `cli-output-contract-review`;
128
+ - external tool versions, provider behavior, package-manager guidance, or current compatibility: `source-freshness-check` or `version-freshness-check`;
129
+ - security, privacy, secrets, permission, retention, or disclosure claims: `security-privacy-review`;
130
+ - license, provenance, copied content, or third-party asset claims: `provenance-license-gate`;
131
+ - package contents, release readiness, install behavior, or template output: `release-publish-change` or `template-install-surface-sync`.
132
+ 43. When README changes are reviewed through pull requests or release gates, prefer reproducibility evidence over prose approval. Installation logs, server readiness logs, test logs, build logs, or packaged README example artifacts should back the claim when configured checks exist; otherwise report the missing evidence instead of treating a sentence review as proof.
133
+
134
+ <!-- mustflow-section: postconditions -->
135
+ ## Postconditions
136
+
137
+ - Each README factual claim is backed by repository evidence, explicitly qualified, or removed.
138
+ - Subjective TODO, temporary, internal-reason, ask-person, sample-may-differ, and see-code wording is removed or converted into current support, unsupported status, replacement path, diagnostic step, exact source path, owner or tracking evidence, deadline, or tracking issue.
139
+ - Current support, partial implementation, experimental work, and roadmap are not mixed.
140
+ - Unshipped roadmap items, internal demo prerequisites, fake desired APIs, overbroad support claims, unsupported badges, copied competitor concepts, and experimental promotion are separated, qualified, removed, or reported.
141
+ - Unsupported commands, environment variables, API examples, security, performance, platform, license, trademark, copyright, attribution, architecture, and file-tree claims are absent or reported.
142
+ - README security exposure is removed or reported: real-looking fake keys, URL-query secrets, internal URLs, private IPs, production paths, pasteable production commands, sensitive identifiers, unsafe screenshots, and missing secret rotation or history-scan follow-up after known exposure.
143
+ - README code blocks, command examples, CLI output snippets, import examples, environment examples, test commands, build output paths, server readiness claims, OS-specific shell examples, and runtime support statements are pasteable, tested, explicitly conceptual, or reported as unverified.
144
+ - README legal and credit claims agree with license, notice, SPDX, package metadata, source-header, dependency, asset, contributor, and trademark evidence, or are removed or reported.
145
+ - Any evidence gap, conflict, or deferred verification is named in the final report.
146
+
147
+ <!-- mustflow-section: verification -->
148
+ ## Verification
149
+
150
+ Use configured oneshot command intents when available:
151
+
152
+ - `docs_validate_fast`
153
+ - `mustflow_check`
154
+
155
+ Use `test_related` when README examples, command snippets, public API usage, or generated examples are changed and the configured related tests cover them.
156
+ Use `test_release` when package installation, package contents, release metadata, template install output, or README examples in packaged artifacts are affected.
157
+
158
+ <!-- mustflow-section: failure-handling -->
159
+ ## Failure Handling
160
+
161
+ - If a README claim lacks evidence, remove it or qualify it instead of searching for weaker hints.
162
+ - If evidence conflicts across code, tests, docs, and manifests, keep the README conservative and report the conflict.
163
+ - If the user asks to keep a claim that cannot be proven, mark it as unverified or future work only when that wording is honest.
164
+ - If verification fails, fix the first README-related broken link, stale command, unsupported example, or template drift before adding new prose.
165
+ - If this gate would require changing code to match README prose, stop and report that the README claim outruns the implementation.
166
+
167
+ <!-- mustflow-section: output-format -->
168
+ ## Output Format
169
+
170
+ - README sections gated
171
+ - Evidence ledger summary
172
+ - Claims kept, qualified, moved, or removed
173
+ - Subjective maintenance-debt phrases removed or converted
174
+ - README overclaim, roadmap, support, badge, fake-example, internal-demo, experimental, and failure-path checks performed
175
+ - Pasteable README contract checks performed
176
+ - README security exposure checks performed
177
+ - README executable-command, clean-environment, code-block-label, OS-shell, server-readiness, and env-key consistency checks performed
178
+ - README license, SPDX, NOTICE, trademark, contributor-rights, third-party credit, and AI-provenance checks performed
179
+ - Unsupported commands, environment variables, APIs, security, performance, platform, license, roadmap, architecture, or file-tree claims found
180
+ - Related skills activated or deferred
181
+ - Command intents run
182
+ - Skipped command intents and reasons
183
+ - Remaining README evidence risk
@@ -198,6 +198,12 @@ route_type = "adjunct"
198
198
  priority = 76
199
199
  applies_to_reasons = ["unknown_change", "code_change", "behavior_change", "test_change", "public_api_change", "performance_change"]
200
200
 
201
+ [routes."abstraction-boundary-review"]
202
+ category = "general_code"
203
+ route_type = "adjunct"
204
+ priority = 77
205
+ applies_to_reasons = ["unknown_change", "code_change", "behavior_change", "test_change", "public_api_change", "performance_change", "data_change"]
206
+
201
207
  [routes."module-boundary-review"]
202
208
  category = "general_code"
203
209
  route_type = "adjunct"
@@ -1194,6 +1200,12 @@ route_type = "primary"
1194
1200
  priority = 50
1195
1201
  applies_to_reasons = ["docs_change"]
1196
1202
 
1203
+ [routes."readme-evidence-gate"]
1204
+ category = "docs_release"
1205
+ route_type = "adjunct"
1206
+ priority = 72
1207
+ applies_to_reasons = ["docs_change", "copy_change", "public_api_change", "package_metadata_change", "security_change", "performance_change", "release_risk", "unknown_change"]
1208
+
1197
1209
  [routes."release-notes-authoring"]
1198
1210
  category = "docs_release"
1199
1211
  route_type = "primary"
@@ -2,7 +2,7 @@
2
2
  mustflow_doc: agents.root
3
3
  locale: en
4
4
  canonical: true
5
- revision: 19
5
+ revision: 20
6
6
  lifecycle: user-editable
7
7
  authority: binding
8
8
  ---
@@ -115,6 +115,10 @@ mustflow-managed details are under `.mustflow/`.
115
115
  Follow the stricter rule.
116
116
  - When navigating to a nested repository, reread that repository's `AGENTS.md` and
117
117
  `.mustflow/config/*.toml` before editing.
118
+ - In repository farms, prefer each child repository's own command contract for repository-owned
119
+ commands. If the parent root intentionally orchestrates children, split parent-owned commands
120
+ into repo-named fragments under `.mustflow/config/commands/`; use
121
+ `mf workspace command-fragments` for read-only guidance.
118
122
  - Do not edit outside the selected child repository unless explicitly requested.
119
123
 
120
124
  ## Host-Specific Instruction Compatibility
@@ -2,7 +2,7 @@
2
2
  mustflow_doc: agents.root
3
3
  locale: ko
4
4
  canonical: false
5
- revision: 26
5
+ revision: 27
6
6
  lifecycle: user-editable
7
7
  authority: binding
8
8
  ---
@@ -72,6 +72,7 @@ mustflow가 관리하는 세부 문서와 설정은 `.mustflow/` 폴더 아래
72
72
  - 작업 방식, 코드 스타일, 테스트 방식, 명령 실행 규칙이 충돌할 경우 하위 저장소의 `AGENTS.md`와 `.mustflow/config/commands.toml`을 우선합니다.
73
73
  - 보안, 비밀 정보, 개인정보, 파괴적 명령, 수정 가능 경로 등 안전 규칙은 누적 적용하며 더 엄격한 규칙을 따릅니다.
74
74
  - 상위 작업 공간에서 하위 저장소로 진입한 경우, 하위 저장소의 `AGENTS.md`와 `.mustflow/config/*.toml`을 다시 읽은 뒤 작업합니다.
75
+ - repository farm에서는 각 하위 저장소가 소유한 명령은 해당 저장소의 command contract를 우선합니다. 상위 루트가 하위 저장소를 의도적으로 orchestration해야 한다면 상위 소유 명령을 `.mustflow/config/commands/` 아래 repo 이름별 fragment로 나누고, `mf workspace command-fragments`로 읽기 전용 안내를 확인합니다.
75
76
  - 명시적 요청 없이 선택한 하위 저장소 밖의 파일은 수정하지 않습니다.
76
77
 
77
78
  ## 호스트별 지침 호환성
@@ -1,6 +1,6 @@
1
1
  id = "default"
2
2
  name = "default"
3
- version = "2.112.4"
3
+ version = "2.112.8"
4
4
  description = "Minimal workflow for LLM agents to read, edit, and verify their work in a repository."
5
5
  common_root = "common"
6
6
  locales_root = "locales"
@@ -27,6 +27,7 @@ creates = [
27
27
  ".mustflow/skills/code-review/SKILL.md",
28
28
  ".mustflow/skills/ai-generated-code-hardening/SKILL.md",
29
29
  ".mustflow/skills/quality-gaming-guard/SKILL.md",
30
+ ".mustflow/skills/abstraction-boundary-review/SKILL.md",
30
31
  ".mustflow/skills/module-boundary-review/SKILL.md",
31
32
  ".mustflow/skills/change-blast-radius-review/SKILL.md",
32
33
  ".mustflow/skills/business-rule-leakage-review/SKILL.md",
@@ -198,6 +199,7 @@ creates = [
198
199
  ".mustflow/skills/cross-agent-session-reference/SKILL.md",
199
200
  ".mustflow/skills/structure-discovery-gate/SKILL.md",
200
201
  ".mustflow/skills/readme-authoring/SKILL.md",
202
+ ".mustflow/skills/readme-evidence-gate/SKILL.md",
201
203
  ".mustflow/skills/requirement-regression-guard/SKILL.md",
202
204
  ".mustflow/skills/repro-first-debug/SKILL.md",
203
205
  ".mustflow/skills/source-anchor-authoring/SKILL.md",
@@ -234,6 +236,7 @@ after_install = [
234
236
  "Read AGENTS.md for repository-specific working rules.",
235
237
  "Run mf doctor to inspect the current state before editing.",
236
238
  "Generate REPO_MAP.md with mf map when a repository map is needed.",
239
+ "For repo farms under projects/, run mf workspace command-fragments --projects-dir projects --json before putting many child-repository commands in one parent command file.",
237
240
  "Review the default Bun-backed test intents in .mustflow/config/commands.toml and replace them with narrower project commands when useful.",
238
241
  "Add your lint and build commands to .mustflow/config/commands.toml.",
239
242
  "Review repository-specific language and style defaults in .mustflow/config/preferences.toml.",
@@ -261,6 +264,7 @@ minimal = [
261
264
  "code-review",
262
265
  "ai-generated-code-hardening",
263
266
  "quality-gaming-guard",
267
+ "abstraction-boundary-review",
264
268
  "module-boundary-review",
265
269
  "change-blast-radius-review",
266
270
  "business-rule-leakage-review",
@@ -430,6 +434,7 @@ patterns = [
430
434
  "code-review",
431
435
  "ai-generated-code-hardening",
432
436
  "quality-gaming-guard",
437
+ "abstraction-boundary-review",
433
438
  "module-boundary-review",
434
439
  "change-blast-radius-review",
435
440
  "business-rule-leakage-review",
@@ -610,6 +615,7 @@ oss = [
610
615
  "code-review",
611
616
  "ai-generated-code-hardening",
612
617
  "quality-gaming-guard",
618
+ "abstraction-boundary-review",
613
619
  "module-boundary-review",
614
620
  "change-blast-radius-review",
615
621
  "business-rule-leakage-review",
@@ -766,6 +772,7 @@ oss = [
766
772
  "pure-core-imperative-shell",
767
773
  "proactive-risk-surfacing",
768
774
  "readme-authoring",
775
+ "readme-evidence-gate",
769
776
  "release-notes-authoring",
770
777
  "release-publish-change",
771
778
  "repo-improvement-loop",
@@ -808,6 +815,7 @@ team = [
808
815
  "code-review",
809
816
  "ai-generated-code-hardening",
810
817
  "quality-gaming-guard",
818
+ "abstraction-boundary-review",
811
819
  "module-boundary-review",
812
820
  "change-blast-radius-review",
813
821
  "business-rule-leakage-review",
@@ -991,6 +999,7 @@ product = [
991
999
  "code-review",
992
1000
  "ai-generated-code-hardening",
993
1001
  "quality-gaming-guard",
1002
+ "abstraction-boundary-review",
994
1003
  "module-boundary-review",
995
1004
  "change-blast-radius-review",
996
1005
  "business-rule-leakage-review",
@@ -1180,6 +1189,7 @@ library = [
1180
1189
  "code-review",
1181
1190
  "ai-generated-code-hardening",
1182
1191
  "quality-gaming-guard",
1192
+ "abstraction-boundary-review",
1183
1193
  "module-boundary-review",
1184
1194
  "change-blast-radius-review",
1185
1195
  "business-rule-leakage-review",
@@ -1335,6 +1345,7 @@ library = [
1335
1345
  "pure-core-imperative-shell",
1336
1346
  "proactive-risk-surfacing",
1337
1347
  "readme-authoring",
1348
+ "readme-evidence-gate",
1338
1349
  "release-notes-authoring",
1339
1350
  "release-publish-change",
1340
1351
  "result-option",