@maind-dev/cli 0.97.3 → 0.99.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -106,23 +106,60 @@ The CLI never posts the comment itself — your workflow posts the file via
106
106
 
107
107
  ### Detector findings (with `--gate`)
108
108
 
109
- With `--gate`, the CLI also runs the nine repo-health detectors from
109
+ With `--gate`, the CLI also runs the ten repo-health detectors from
110
110
  `@maind/code-index` on this machine — number collisions in counter-style
111
111
  namespaces (`ADR-263-*.md` twice), spec drift (a registry vs. the artefact it
112
112
  declares), dead theme classes (a Tailwind v4 utility pointing at a token that
113
113
  does not exist), table ACL (Supabase default grants never revoked), duplicate
114
114
  changelog headings, unparsable workflow YAML, release claims (a changelog
115
- version npm never published), prose added to agent docs and a work-object
115
+ version npm never published), prose added to agent docs, a work-object
116
116
  branch without documentation (no Markdown file naming the key, no
117
- `Doc-Decision:` trailer) — and sends them to
117
+ `Doc-Decision:` trailer) and mockup labels (a product mockup showing text the
118
+ product no longer renders) — and sends them to
118
119
  `review_verdict` as a third finding class next to convention findings and risk
119
120
  flags (ADR-324).
120
121
 
121
122
  Only a **commitment** leaves the machine: `detector_id`, `detector_version`,
122
123
  `rule_id`, `level`, `baseline`, an `evidence_hash` (sha256 over the normalised
123
- evidence) and a count. Paths, tokens, class names, table names and numbers
124
- stay local — they appear in the report (`.maind/review.md`) but never in the
125
- manifest, the PR comment or the wire.
124
+ evidence) and a count. Paths, tokens, class names, table names, labels and
125
+ numbers stay local — they appear in the report (`.maind/review.md`) but never
126
+ in the manifest, the PR comment or the wire.
127
+
128
+ #### Mockup labels
129
+
130
+ A demo, product tour or screenshot rebuilt in code shows the product's labels
131
+ "verbatim" — until the product renames one. Pin each label to the file that
132
+ renders it, and the mockup-label detector checks every pin in both directions:
133
+ the product source still contains the label (`mockup.label_not_in_source`,
134
+ blocks), and some mockup still shows it (`mockup.pin_unused`, warns — a dead
135
+ pin reads as coverage that does not exist). A pinned source that moved is
136
+ `mockup.source_missing`, an unreadable pins file `mockup.pins_unreadable`.
137
+ Comments are ignored on both sides and whitespace is collapsed, so JSX text
138
+ broken across lines still matches.
139
+
140
+ Declare the sets in `.maind/mockup-labels.json` at the repository root:
141
+
142
+ ```json
143
+ {
144
+ "sets": [
145
+ {
146
+ "id": "site-tour",
147
+ "reason": "The website tour recreates the dashboard navigation verbatim.",
148
+ "pins_file": "apps/website/src/tour/labels.json",
149
+ "source_root": "apps",
150
+ "mockups": ["apps/website/src/tour/", "apps/website/src/DemoFrame.tsx"]
151
+ }
152
+ ]
153
+ }
154
+ ```
155
+
156
+ `pins_file` holds `{"pins": [{"label": "Agent sessions", "source":
157
+ "dashboard/src/nav.ts"}]}` (or a bare array); small sets may inline them as
158
+ `pins` instead. `source` resolves against `source_root`; `mockups` are path
159
+ prefixes (a directory with a trailing `/`, or a file), and tests never count
160
+ as a mockup. Without the file the detector abstains — it cannot know which of
161
+ your mockups claim to be verbatim. It checks the labels you pinned; a label
162
+ nobody pinned, and how the mockup looks, stay unchecked.
126
163
 
127
164
  Block-eligible is only a finding this branch **introduces** (`level: open`,
128
165
  `baseline: introduced`). Objective detectors block by default; table ACL,