@clossys/writer 0.3.8 → 0.4.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 +103 -4
- package/dist/addressability.d.ts +11 -1
- package/dist/addressability.d.ts.map +1 -1
- package/dist/addressability.js +169 -3
- package/dist/addressability.js.map +1 -1
- package/dist/approved-copy-coverage-rate-cli.d.ts +10 -0
- package/dist/approved-copy-coverage-rate-cli.d.ts.map +1 -0
- package/dist/approved-copy-coverage-rate-cli.js +59 -0
- package/dist/approved-copy-coverage-rate-cli.js.map +1 -0
- package/dist/approved-copy-coverage-rate.d.ts +23 -0
- package/dist/approved-copy-coverage-rate.d.ts.map +1 -0
- package/dist/approved-copy-coverage-rate.js +153 -0
- package/dist/approved-copy-coverage-rate.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +216 -9
- package/dist/cli.js.map +1 -1
- package/dist/fold-wallpaper-gate.d.ts +7 -0
- package/dist/fold-wallpaper-gate.d.ts.map +1 -0
- package/dist/fold-wallpaper-gate.js +29 -0
- package/dist/fold-wallpaper-gate.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/live-copy-gate.d.ts +16 -0
- package/dist/live-copy-gate.d.ts.map +1 -0
- package/dist/live-copy-gate.js +135 -0
- package/dist/live-copy-gate.js.map +1 -0
- package/dist/render-registry-parity.d.ts +20 -0
- package/dist/render-registry-parity.d.ts.map +1 -0
- package/dist/render-registry-parity.js +45 -0
- package/dist/render-registry-parity.js.map +1 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +22 -0
- package/dist/schema.js.map +1 -1
- package/dist/treatment-word-budget.d.ts +31 -0
- package/dist/treatment-word-budget.d.ts.map +1 -0
- package/dist/treatment-word-budget.js +80 -0
- package/dist/treatment-word-budget.js.map +1 -0
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/fit-signals.json +11 -0
- package/package.json +202 -6
- package/skill/SKILL.md +49 -0
- package/src/addressability.ts +186 -4
- package/src/approved-copy-coverage-rate-cli.ts +55 -0
- package/src/approved-copy-coverage-rate.ts +201 -0
- package/src/cli.ts +228 -9
- package/src/fold-wallpaper-gate.ts +29 -0
- package/src/index.ts +16 -0
- package/src/live-copy-gate.ts +150 -0
- package/src/render-registry-parity.ts +65 -0
- package/src/schema.ts +24 -0
- package/src/treatment-word-budget.ts +100 -0
- package/src/types.ts +11 -0
- package/CHANGELOG.md +0 -307
package/README.md
CHANGED
|
@@ -16,6 +16,45 @@ template; each consumer supplies its own language and facts.
|
|
|
16
16
|
npm install @clossys/writer
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
+
This package is published to the public npm registry, `https://registry.npmjs.org`.
|
|
20
|
+
Installing it needs no authentication: no npm token, no `.npmrc` registry
|
|
21
|
+
override, and no GitHub credential of any kind.
|
|
22
|
+
|
|
23
|
+
## Approved copy coverage rate
|
|
24
|
+
|
|
25
|
+
Independent consumer evidence shows the position's owned metric meets its
|
|
26
|
+
setpoint over the declared review cadence. The owned metric is `approved
|
|
27
|
+
copy coverage rate`, computed by `assessApprovedCopyCoverageRate()`. An
|
|
28
|
+
empty evaluated set is `indeterminate`, never a perfect rate of 1.
|
|
29
|
+
`checkCopyRecord` and `checkCopyTraceability` remain the gates they are;
|
|
30
|
+
neither is this rate. This package does not measure consumer evidence and
|
|
31
|
+
does not close the loop. A green run of this package's tests is not a close.
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
import { assessApprovedCopyCoverageRate } from "@clossys/writer";
|
|
35
|
+
|
|
36
|
+
const report = assessApprovedCopyCoverageRate(input);
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
writer-rate-check assessment.json
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The command prints JSON and exits `0` for satisfied, `1` for violated, and
|
|
44
|
+
`2` for indeterminate, unreadable, or invalid input.
|
|
45
|
+
|
|
46
|
+
This package declares that command as its first-day assessment surface in
|
|
47
|
+
its own manifest:
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
"foundry": { "assessment": { "bin": "writer-rate-check", "invocation": "single-json-input" } }
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Onboarding discovers that declaration from the installed manifest and never
|
|
54
|
+
infers a surface. `writer-check` remains the multi-mode CLI and is not the
|
|
55
|
+
assessment surface. Writer is not a required first-day role; Advisor
|
|
56
|
+
remains the only required first-day assessment.
|
|
57
|
+
|
|
19
58
|
## Public entry points
|
|
20
59
|
|
|
21
60
|
- `@clossys/writer` exposes both voice and copy-record APIs.
|
|
@@ -97,6 +136,20 @@ unknown ID, locale mismatch, draft/retired entry, missing placeholder value,
|
|
|
97
136
|
or unexpected value. Locale fallback belongs to a consumer-owned registry
|
|
98
137
|
selector, rather than an implicit package policy.
|
|
99
138
|
|
|
139
|
+
The default `writer-check` command also runs two registry-only gates against
|
|
140
|
+
the same `CopyRegistry` file a surface renders from:
|
|
141
|
+
|
|
142
|
+
- **Render-store parity** (`checkRenderRegistryParity`): `record-file` must be
|
|
143
|
+
a `CopyRegistry` — the store `createCopyResolver` reads at render, not a plain
|
|
144
|
+
`CopyRecord` or a second in-memory-only store. `--render-registry <file>` may
|
|
145
|
+
name the path the surface passes to `createCopyResolver`; after realpath it
|
|
146
|
+
must be the same file as `record-file`.
|
|
147
|
+
- **Treatment word budgets** (`checkTreatmentWordBudgets`, `countCopyWords`,
|
|
148
|
+
`DEFAULT_TREATMENT_WORD_BUDGETS`): registry entries may declare `treatment`
|
|
149
|
+
and optional `maxWords`. Approved copy that exceeds the budget fails the
|
|
150
|
+
gate (built-in defaults for `display-heading`, `eyebrow`, and `button` when
|
|
151
|
+
`maxWords` is omitted).
|
|
152
|
+
|
|
100
153
|
## Where this package sits on i18n
|
|
101
154
|
|
|
102
155
|
"i18n" is two different things, and this package deliberately does only one
|
|
@@ -452,7 +505,7 @@ const result = checkAddressability(scan);
|
|
|
452
505
|
// result.verdict: "satisfied" | "violated" | "indeterminate"
|
|
453
506
|
```
|
|
454
507
|
|
|
455
|
-
|
|
508
|
+
Four positions are classified:
|
|
456
509
|
|
|
457
510
|
1. **Markup text nodes** (`<span>Hello</span>`'s `Hello`) — always a
|
|
458
511
|
violation when it carries real prose.
|
|
@@ -467,9 +520,16 @@ Three positions are classified:
|
|
|
467
520
|
can override a default, so the component's own source does not lock
|
|
468
521
|
the sentence in the way a hardcoded JSX attribute does, and flagging
|
|
469
522
|
one would invert the verdict on an already-addressable construct.
|
|
470
|
-
3. **
|
|
471
|
-
|
|
472
|
-
|
|
523
|
+
3. **Copy-bearing object-literal values** — chrome config bags
|
|
524
|
+
(`{ label: "Request access", href: "/join" }`, `items[].label`, nav
|
|
525
|
+
link tables) are Writer surfaces. A literal on keys such as `label`,
|
|
526
|
+
`title`, `cta`, `caption`, `heading`, `kicker`, `body`, `description`,
|
|
527
|
+
or `aria-label` is a violation with file and key path. Allowlisted keys
|
|
528
|
+
(`href`, `to`, `path`, `icon`, …) and route-shaped values (`/pricing`)
|
|
529
|
+
are not copy — a `SiteHeader` labels array is not an escape hatch.
|
|
530
|
+
4. **Everything else** — a template literal (in any position, including
|
|
531
|
+
one of the four attributes above), or a prop that is none of the four —
|
|
532
|
+
this gate cannot confidently tell
|
|
473
533
|
whether it is resolved-through-an-id or genuinely non-user-facing, so it
|
|
474
534
|
is reported as `unchecked` (indeterminate), never silently treated as
|
|
475
535
|
clean — UNLESS the string is itself shaped like a CSS/Tailwind utility
|
|
@@ -512,6 +572,31 @@ since the two gates' natural test fixtures are structurally incompatible (a
|
|
|
512
572
|
literal traceability needs to prove a registry match is exactly a literal
|
|
513
573
|
addressability cannot confirm is safe).
|
|
514
574
|
|
|
575
|
+
Options:
|
|
576
|
+
|
|
577
|
+
- `--extensions <ext>` (repeatable, and each occurrence may be a
|
|
578
|
+
comma-separated list) — file extensions to scan, each including the
|
|
579
|
+
leading dot (for example `.mjs`, or `.mjs,.cjs` in one flag). Values
|
|
580
|
+
union across both repeats and comma-separated entries. When omitted, the
|
|
581
|
+
default is `.ts`, `.tsx`, `.js`, and `.jsx`. When any `--extensions` flag
|
|
582
|
+
is present, that default set is replaced. Every value must include the
|
|
583
|
+
leading dot, and a flag that resolves to zero extensions (a bare comma,
|
|
584
|
+
or an empty string) is a usage error (exit `2`) — it never falls back to
|
|
585
|
+
the default set, which would be a vacuous pass on an explicit-but-empty
|
|
586
|
+
request.
|
|
587
|
+
- `--chrome <file>` (repeatable) — persistent chrome (site header, footer,
|
|
588
|
+
skip link, nav labels) shell or layout file to scan in addition to
|
|
589
|
+
`scan-dir`. Paths are relative to `scan-dir` unless absolute. Each file
|
|
590
|
+
must exist.
|
|
591
|
+
- `--require-chrome` — refuse to run (exit `2`) when no `--chrome` file was
|
|
592
|
+
declared. Use when the surface mounts persistent chrome outside `scan-dir`.
|
|
593
|
+
|
|
594
|
+
This supplier repository does not ship a copy-registry subject for
|
|
595
|
+
addressability to run against. The `writer-check` CLI strings in this tree
|
|
596
|
+
are inline operator messaging on purpose, not product UI copy. Consumers
|
|
597
|
+
run addressability on their own product UI source trees, not on this
|
|
598
|
+
package's own CLI sources.
|
|
599
|
+
|
|
515
600
|
## The passage layer — the missing middle between an entry and a document
|
|
516
601
|
|
|
517
602
|
`@example/copy` (now `writer`) has terms (a glossary) and entries
|
|
@@ -613,12 +698,22 @@ The root entry point exports the copy registry and traceability surface:
|
|
|
613
698
|
`PathExclusionFindingRule`, and `PathExclusionValidation`.
|
|
614
699
|
- Traceability: `checkCopyTraceability`, `CopyGateFinding`,
|
|
615
700
|
`CopyGateIgnored`, `CopyGateResult`, and `CopyGateRule`.
|
|
701
|
+
- Charter close metric: `assessApprovedCopyCoverageRate`,
|
|
702
|
+
`ApprovedCopyCoverageRateAssessment`, `ApprovedCopyCoverageRateFinding`,
|
|
703
|
+
and `ApprovedCopyCoverageRateState`. Not `checkCopyRecord` or
|
|
704
|
+
`checkCopyTraceability`.
|
|
616
705
|
- Addressability (see above): `scanAddressabilitySources`,
|
|
617
706
|
`extractAddressabilityCandidates`, `checkAddressability`,
|
|
618
707
|
`AddressabilityGateResult`, `AddressabilityPosition`,
|
|
619
708
|
`AddressabilityScanOptions`, `AddressabilityScanResult`,
|
|
620
709
|
`AddressabilityUncheckedItem`, `AddressabilityVerdict`, and
|
|
621
710
|
`AddressabilityViolation`.
|
|
711
|
+
- Render-store parity (see above): `checkRenderRegistryParity`,
|
|
712
|
+
`RenderRegistryParityReason`, and `RenderRegistryParityResult`.
|
|
713
|
+
- Treatment word budgets (see above): `checkTreatmentWordBudgets`,
|
|
714
|
+
`countCopyWords`, `DEFAULT_TREATMENT_WORD_BUDGETS`,
|
|
715
|
+
`TreatmentWordBudgetFinding`, `TreatmentWordBudgetResult`, and
|
|
716
|
+
`TreatmentWordBudgetRule`.
|
|
622
717
|
- Locale-coverage governance: `checkLocaleCoverage`, `LocaleCoverageFinding`,
|
|
623
718
|
`LocaleCoverageReport`, `LocaleCoverageSkip`, and
|
|
624
719
|
`LocaleCoverageSkipReason` — see "Where this package sits on i18n" above.
|
|
@@ -637,3 +732,7 @@ root and from `@clossys/writer/voice`, including the rule-vocabulary
|
|
|
637
732
|
additions: `PatternRule`, `VoicePattern`, `VoiceSeverity`, `VOICE_SEVERITIES`,
|
|
638
733
|
`VoiceChannel`, `isCiBlockingSeverity`, `checkPatternSafety`,
|
|
639
734
|
`PatternSafetyIssue`, and `PatternSafetyResult`.
|
|
735
|
+
|
|
736
|
+
## Changelog
|
|
737
|
+
|
|
738
|
+
Release notes for every version are in the [changelog](https://github.com/clossys/foundry/blob/main/docs/changelogs/writer.md), kept in the public repository rather than in the installed package.
|
package/dist/addressability.d.ts
CHANGED
|
@@ -167,14 +167,24 @@ export interface AddressabilityScanOptions {
|
|
|
167
167
|
skipDirs?: string[];
|
|
168
168
|
/** Same mechanism `scan.ts`'s `ScanOptions.pathExclusions` uses — see `path-exclusions.ts`. */
|
|
169
169
|
pathExclusions?: PathExclusion[];
|
|
170
|
+
/**
|
|
171
|
+
* Consumer-declared persistent chrome (site header, footer, skip link, nav
|
|
172
|
+
* labels) — shell or layout files scanned in addition to the directory walk.
|
|
173
|
+
* Paths are relative to `root` unless absolute. Each file must exist.
|
|
174
|
+
*/
|
|
175
|
+
chromeFiles?: string[];
|
|
170
176
|
}
|
|
171
|
-
export type AddressabilityPosition = "markup-text" | "user-facing-attribute";
|
|
177
|
+
export type AddressabilityPosition = "markup-text" | "user-facing-attribute" | "object-literal-copy";
|
|
172
178
|
export interface AddressabilityViolation {
|
|
173
179
|
file: string;
|
|
174
180
|
line: number;
|
|
175
181
|
position: AddressabilityPosition;
|
|
176
182
|
/** Set only for `"user-facing-attribute"` — which of the four this literal was the value of. */
|
|
177
183
|
attribute?: "aria-label" | "placeholder" | "alt" | "title";
|
|
184
|
+
/** Set only for `"object-literal-copy"` — the property key this literal was the value of. */
|
|
185
|
+
objectKey?: string;
|
|
186
|
+
/** Set only for `"object-literal-copy"` — dotted/bracket path when nested under `items`/`nav`/`links`. */
|
|
187
|
+
keyPath?: string;
|
|
178
188
|
/** The literal's own raw source text, for a human auditing the finding. */
|
|
179
189
|
raw: string;
|
|
180
190
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addressability.d.ts","sourceRoot":"","sources":["../src/addressability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6JG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAE1B,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC3D,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAI9F,MAAM,WAAW,yBAAyB;IACxC,sGAAsG;IACtG,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,+FAA+F;IAC/F,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"addressability.d.ts","sourceRoot":"","sources":["../src/addressability.ts"],"names":[],"mappings":"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"}
|
package/dist/addressability.js
CHANGED
|
@@ -156,8 +156,8 @@
|
|
|
156
156
|
* - `"satisfied"` — at least one component scanned, every string
|
|
157
157
|
* position classified, and no inline user-facing prose found.
|
|
158
158
|
*/
|
|
159
|
-
import { readdirSync, readFileSync, statSync } from "node:fs";
|
|
160
|
-
import { extname, join, relative, sep } from "node:path";
|
|
159
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
160
|
+
import { extname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
161
161
|
import { extractCopyCandidates } from "./scan.js";
|
|
162
162
|
import { matchesPathExclusion, validatePathExclusions, } from "./path-exclusions.js";
|
|
163
163
|
const DEFAULT_EXTENSIONS = [".ts", ".tsx", ".js", ".jsx"];
|
|
@@ -251,6 +251,11 @@ export function scanAddressabilitySources(root, options = {}) {
|
|
|
251
251
|
}
|
|
252
252
|
}
|
|
253
253
|
walk(root);
|
|
254
|
+
if (options.chromeFiles !== undefined) {
|
|
255
|
+
for (const chromePath of options.chromeFiles) {
|
|
256
|
+
scanAddressabilityChromeFile(root, chromePath, extensions, result);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
254
259
|
for (const exclusion of pathExclusionValidation.valid) {
|
|
255
260
|
if ((matchCounts.get(exclusion) ?? 0) === 0) {
|
|
256
261
|
result.pathExclusionFindings.push({
|
|
@@ -263,6 +268,47 @@ export function scanAddressabilitySources(root, options = {}) {
|
|
|
263
268
|
}
|
|
264
269
|
return result;
|
|
265
270
|
}
|
|
271
|
+
function scanAddressabilityChromeFile(root, chromePath, extensions, result) {
|
|
272
|
+
const full = isAbsolute(chromePath) ? resolve(chromePath) : resolve(root, chromePath);
|
|
273
|
+
if (!existsSync(full)) {
|
|
274
|
+
throw new Error(`scanAddressabilitySources: chrome file "${chromePath}" does not exist (resolved "${full}")`);
|
|
275
|
+
}
|
|
276
|
+
let stat;
|
|
277
|
+
try {
|
|
278
|
+
stat = statSync(full);
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
throw new Error(`scanAddressabilitySources: cannot read chrome file "${chromePath}": ${error instanceof Error ? error.message : String(error)}`);
|
|
282
|
+
}
|
|
283
|
+
if (!stat.isFile()) {
|
|
284
|
+
throw new Error(`scanAddressabilitySources: chrome path "${chromePath}" is not a file`);
|
|
285
|
+
}
|
|
286
|
+
const relPath = relative(root, full).split(sep).join("/");
|
|
287
|
+
const displayPath = relPath.length > 0 && !relPath.startsWith("..") ? relPath : chromePath;
|
|
288
|
+
const entryName = full.slice(full.lastIndexOf(sep) + 1);
|
|
289
|
+
if (!extensions.has(extname(entryName).toLowerCase())) {
|
|
290
|
+
throw new Error(`scanAddressabilitySources: chrome file "${chromePath}" has extension ${extname(entryName)} which is not in the scan extension set`);
|
|
291
|
+
}
|
|
292
|
+
if (SKIP_FILE_RE.test(entryName)) {
|
|
293
|
+
result.skippedByDesign.push({ file: displayPath, reason: "test-or-check-file" });
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
let content;
|
|
297
|
+
try {
|
|
298
|
+
content = readFileSync(full, "utf8");
|
|
299
|
+
}
|
|
300
|
+
catch (error) {
|
|
301
|
+
throw new Error(`scanAddressabilitySources: cannot read chrome file "${full}": ${error instanceof Error ? error.message : String(error)}`);
|
|
302
|
+
}
|
|
303
|
+
const extracted = extractAddressabilityCandidates(content, displayPath);
|
|
304
|
+
if (extracted.parseFailure) {
|
|
305
|
+
result.parseFailures.push({ file: displayPath, detail: extracted.parseFailure });
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
result.filesScanned++;
|
|
309
|
+
result.violations.push(...extracted.violations);
|
|
310
|
+
result.unchecked.push(...extracted.unchecked);
|
|
311
|
+
}
|
|
266
312
|
// ------------------------------------------------------------- extraction
|
|
267
313
|
/** `ariaLabel` -> `arialabel`, `aria-label` -> `arialabel` — the identical case/hyphen-insensitive normalization `scan.ts`'s own `normalizeIdentifier` performs (not exported, so reimplemented locally — a one-line heuristic, not worth a cross-file dependency). */
|
|
268
314
|
function normalizeAttrName(name) {
|
|
@@ -342,6 +388,85 @@ const DESTRUCTURING_OR_PARAMETER_DEFAULT_RE = /[{(,]\s*(?:(?:"[^"]*"|'[^']*'|[A-
|
|
|
342
388
|
* `DESTRUCTURING_OR_PARAMETER_DEFAULT_RE`'s own doc comment for exactly
|
|
343
389
|
* what is and is not matched.
|
|
344
390
|
*/
|
|
391
|
+
/** Copy-bearing object-literal property keys (issue #1063) — normalized like `normalizeAttrName`. */
|
|
392
|
+
const COPY_BEARING_OBJECT_KEYS = new Set([
|
|
393
|
+
"label",
|
|
394
|
+
"title",
|
|
395
|
+
"cta",
|
|
396
|
+
"caption",
|
|
397
|
+
"heading",
|
|
398
|
+
"kicker",
|
|
399
|
+
"body",
|
|
400
|
+
"description",
|
|
401
|
+
"arialabel",
|
|
402
|
+
"text",
|
|
403
|
+
]);
|
|
404
|
+
/** Non-copy object-literal keys — route targets, icons, tokens; not Writer surfaces. */
|
|
405
|
+
const ALLOWLISTED_OBJECT_LITERAL_KEYS = new Set([
|
|
406
|
+
"href",
|
|
407
|
+
"to",
|
|
408
|
+
"path",
|
|
409
|
+
"pathname",
|
|
410
|
+
"icon",
|
|
411
|
+
"iconname",
|
|
412
|
+
"slug",
|
|
413
|
+
"token",
|
|
414
|
+
"variant",
|
|
415
|
+
"size",
|
|
416
|
+
]);
|
|
417
|
+
const OBJECT_LITERAL_CONTAINER_KEYS = ["items", "nav", "links"];
|
|
418
|
+
const OBJECT_LITERAL_PROP_NAME_RE = /(?:"([^"]+)"|'([^']+)'|([A-Za-z_$][A-Za-z0-9_$-]*))\s*:\s*$/;
|
|
419
|
+
function literalStartIndex(content, line, raw) {
|
|
420
|
+
const lines = content.split("\n");
|
|
421
|
+
const lineText = lines[line - 1];
|
|
422
|
+
if (lineText === undefined)
|
|
423
|
+
return undefined;
|
|
424
|
+
const col = lineText.indexOf(raw);
|
|
425
|
+
if (col === -1)
|
|
426
|
+
return undefined;
|
|
427
|
+
let start = 0;
|
|
428
|
+
for (let i = 0; i < line - 1; i++)
|
|
429
|
+
start += lines[i].length + 1;
|
|
430
|
+
return start + col;
|
|
431
|
+
}
|
|
432
|
+
function objectLiteralPropertyName(content, start) {
|
|
433
|
+
const from = Math.max(0, start - 120);
|
|
434
|
+
const before = content.slice(from, start);
|
|
435
|
+
const match = OBJECT_LITERAL_PROP_NAME_RE.exec(before);
|
|
436
|
+
if (!match)
|
|
437
|
+
return undefined;
|
|
438
|
+
return match[1] ?? match[2] ?? match[3];
|
|
439
|
+
}
|
|
440
|
+
function objectLiteralKeyPath(content, start, propName) {
|
|
441
|
+
const from = Math.max(0, start - 500);
|
|
442
|
+
const slice = content.slice(from, start);
|
|
443
|
+
for (const container of OBJECT_LITERAL_CONTAINER_KEYS) {
|
|
444
|
+
const re = new RegExp(`\\b${container}\\s*:\\s*\\[`, "g");
|
|
445
|
+
let lastIndex = -1;
|
|
446
|
+
let m;
|
|
447
|
+
while ((m = re.exec(slice)) !== null)
|
|
448
|
+
lastIndex = m.index;
|
|
449
|
+
if (lastIndex !== -1)
|
|
450
|
+
return `${container}[].${propName}`;
|
|
451
|
+
}
|
|
452
|
+
return propName;
|
|
453
|
+
}
|
|
454
|
+
/** Route/icon-shaped literal values that are never copy, regardless of key. */
|
|
455
|
+
function looksLikeAllowlistedConstantValue(raw) {
|
|
456
|
+
const quote = raw[0];
|
|
457
|
+
if (quote !== '"' && quote !== "'")
|
|
458
|
+
return false;
|
|
459
|
+
const text = raw.slice(1, -1).trim();
|
|
460
|
+
if (text.length === 0)
|
|
461
|
+
return false;
|
|
462
|
+
if (/^\/[^\s]*$/.test(text))
|
|
463
|
+
return true;
|
|
464
|
+
if (/^#[\w-]+$/.test(text))
|
|
465
|
+
return true;
|
|
466
|
+
if (/^https?:\/\//.test(text))
|
|
467
|
+
return true;
|
|
468
|
+
return false;
|
|
469
|
+
}
|
|
345
470
|
function isDestructuringOrParameterDefault(lines, line, raw) {
|
|
346
471
|
const lineText = lines[line - 1];
|
|
347
472
|
if (lineText === undefined)
|
|
@@ -503,7 +628,46 @@ export function extractAddressabilityCandidates(content, filePath) {
|
|
|
503
628
|
continue; // a default value the consumer can override, not a JSX attribute at all — see isDestructuringOrParameterDefault
|
|
504
629
|
violations.push({ file: c.file, line: c.line, position: "user-facing-attribute", attribute, raw: c.raw });
|
|
505
630
|
}
|
|
506
|
-
// ---- position
|
|
631
|
+
// ---- position 3a: copy-bearing object-literal property values (issue
|
|
632
|
+
// #1063) — chrome config bags (`{ label: "...", href: "/join" }`) are
|
|
633
|
+
// Writer surfaces; allowlisted keys and route/icon-shaped values are not.
|
|
634
|
+
const objectLiteralClaimed = new Set();
|
|
635
|
+
for (const c of candidates) {
|
|
636
|
+
if (c.kind !== "string")
|
|
637
|
+
continue;
|
|
638
|
+
if (claimed.has(`${c.line}::${c.raw}`))
|
|
639
|
+
continue;
|
|
640
|
+
if (looksLikeUtilityClassList(c.raw))
|
|
641
|
+
continue;
|
|
642
|
+
const start = literalStartIndex(content, c.line, c.raw);
|
|
643
|
+
if (start === undefined)
|
|
644
|
+
continue;
|
|
645
|
+
const propName = objectLiteralPropertyName(content, start);
|
|
646
|
+
if (propName === undefined)
|
|
647
|
+
continue;
|
|
648
|
+
const normalizedProp = normalizeAttrName(propName);
|
|
649
|
+
if (ALLOWLISTED_OBJECT_LITERAL_KEYS.has(normalizedProp) || looksLikeAllowlistedConstantValue(c.raw)) {
|
|
650
|
+
objectLiteralClaimed.add(`${c.line}::${c.raw}`);
|
|
651
|
+
continue;
|
|
652
|
+
}
|
|
653
|
+
if (!COPY_BEARING_OBJECT_KEYS.has(normalizedProp))
|
|
654
|
+
continue;
|
|
655
|
+
if (isDestructuringOrParameterDefault(lines, c.line, c.raw))
|
|
656
|
+
continue;
|
|
657
|
+
if (!hasProse(c.raw))
|
|
658
|
+
continue;
|
|
659
|
+
const keyPath = objectLiteralKeyPath(content, start, propName);
|
|
660
|
+
objectLiteralClaimed.add(`${c.line}::${c.raw}`);
|
|
661
|
+
violations.push({
|
|
662
|
+
file: c.file,
|
|
663
|
+
line: c.line,
|
|
664
|
+
position: "object-literal-copy",
|
|
665
|
+
objectKey: propName,
|
|
666
|
+
keyPath,
|
|
667
|
+
raw: c.raw,
|
|
668
|
+
});
|
|
669
|
+
}
|
|
670
|
+
// ---- position 3b: everything else scan.ts kept as a real candidate —
|
|
507
671
|
// never silently treated as clean, never treated as a violation either
|
|
508
672
|
// — except a plain string shaped like a utility class LIST, which is
|
|
509
673
|
// definitively not prose (see looksLikeUtilityClassList).
|
|
@@ -512,6 +676,8 @@ export function extractAddressabilityCandidates(content, filePath) {
|
|
|
512
676
|
continue; // already position 1
|
|
513
677
|
if (c.kind === "string" && claimed.has(`${c.line}::${c.raw}`))
|
|
514
678
|
continue; // already position 2
|
|
679
|
+
if (c.kind === "string" && objectLiteralClaimed.has(`${c.line}::${c.raw}`))
|
|
680
|
+
continue;
|
|
515
681
|
if (c.kind === "string" && looksLikeUtilityClassList(c.raw))
|
|
516
682
|
continue; // a class-name list, not prose
|
|
517
683
|
unchecked.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addressability.js","sourceRoot":"","sources":["../src/addressability.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"addressability.js","sourceRoot":"","sources":["../src/addressability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export declare class WriterRateCliInputError extends Error {
|
|
3
|
+
}
|
|
4
|
+
/** Reads caller-owned assessment evidence without treating it as validated. */
|
|
5
|
+
export declare function readWriterAssessmentJson(path: string): unknown;
|
|
6
|
+
/** Testable CLI dispatcher. Invalid arguments throw; the executable maps them to exit 2. */
|
|
7
|
+
export declare function main(argv: readonly string[]): number;
|
|
8
|
+
/** Resolves an npm/POSIX bin symlink before deciding whether this module is the entrypoint. */
|
|
9
|
+
export declare function isDirectInvocation(moduleUrl: string, argvPath: string | undefined): boolean;
|
|
10
|
+
//# sourceMappingURL=approved-copy-coverage-rate-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approved-copy-coverage-rate-cli.d.ts","sourceRoot":"","sources":["../src/approved-copy-coverage-rate-cli.ts"],"names":[],"mappings":";AAQA,qBAAa,uBAAwB,SAAQ,KAAK;CAAG;AAErD,+EAA+E;AAC/E,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAU9D;AAED,4FAA4F;AAC5F,wBAAgB,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CASpD;AAWD,+FAA+F;AAC/F,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAO3F"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { existsSync, readFileSync, realpathSync, statSync } from "node:fs";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { assessApprovedCopyCoverageRate } from "./approved-copy-coverage-rate.js";
|
|
6
|
+
const USAGE = `Usage: writer-rate-check <assessment.json>\n\nAssess approved copy coverage rate from consumer-supplied independent observations.\nExit codes: 0 = satisfied, 1 = violated, 2 = indeterminate or unreadable.\nwriter-check remains the multi-mode CLI and is not this assessment.`;
|
|
7
|
+
export class WriterRateCliInputError extends Error {
|
|
8
|
+
}
|
|
9
|
+
/** Reads caller-owned assessment evidence without treating it as validated. */
|
|
10
|
+
export function readWriterAssessmentJson(path) {
|
|
11
|
+
const resolved = resolve(path);
|
|
12
|
+
if (!existsSync(resolved))
|
|
13
|
+
throw new WriterRateCliInputError(`assessment file "${path}" does not exist`);
|
|
14
|
+
try {
|
|
15
|
+
if (!statSync(resolved).isFile())
|
|
16
|
+
throw new WriterRateCliInputError(`assessment file "${path}" is not a file`);
|
|
17
|
+
return JSON.parse(readFileSync(resolved, "utf8"));
|
|
18
|
+
}
|
|
19
|
+
catch (cause) {
|
|
20
|
+
if (cause instanceof WriterRateCliInputError)
|
|
21
|
+
throw cause;
|
|
22
|
+
throw new WriterRateCliInputError(`assessment file "${path}" is unreadable JSON: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Testable CLI dispatcher. Invalid arguments throw; the executable maps them to exit 2. */
|
|
26
|
+
export function main(argv) {
|
|
27
|
+
if (argv.length === 1 && (argv[0] === "--help" || argv[0] === "-h")) {
|
|
28
|
+
console.log(USAGE);
|
|
29
|
+
return 0;
|
|
30
|
+
}
|
|
31
|
+
if (argv.length !== 1)
|
|
32
|
+
throw new WriterRateCliInputError("exactly one assessment.json file is required");
|
|
33
|
+
const report = assessApprovedCopyCoverageRate(readWriterAssessmentJson(argv[0]));
|
|
34
|
+
console.log(JSON.stringify(report, null, 2));
|
|
35
|
+
return report.state === "satisfied" ? 0 : report.state === "violated" ? 1 : 2;
|
|
36
|
+
}
|
|
37
|
+
function run() {
|
|
38
|
+
try {
|
|
39
|
+
process.exitCode = main(process.argv.slice(2));
|
|
40
|
+
}
|
|
41
|
+
catch (cause) {
|
|
42
|
+
console.error(`writer-rate-check: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
43
|
+
process.exitCode = 2;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Resolves an npm/POSIX bin symlink before deciding whether this module is the entrypoint. */
|
|
47
|
+
export function isDirectInvocation(moduleUrl, argvPath) {
|
|
48
|
+
if (argvPath === undefined)
|
|
49
|
+
return false;
|
|
50
|
+
try {
|
|
51
|
+
return realpathSync(fileURLToPath(moduleUrl)) === realpathSync(resolve(argvPath));
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (isDirectInvocation(import.meta.url, process.argv[1]))
|
|
58
|
+
run();
|
|
59
|
+
//# sourceMappingURL=approved-copy-coverage-rate-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approved-copy-coverage-rate-cli.js","sourceRoot":"","sources":["../src/approved-copy-coverage-rate-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type ApprovedCopyCoverageRateState = "satisfied" | "violated" | "indeterminate";
|
|
2
|
+
export interface ApprovedCopyCoverageRateFinding {
|
|
3
|
+
readonly rule: string;
|
|
4
|
+
readonly severity: "error";
|
|
5
|
+
readonly message: string;
|
|
6
|
+
readonly path?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ApprovedCopyCoverageRateAssessment {
|
|
9
|
+
readonly metric: "approved copy coverage rate";
|
|
10
|
+
readonly state: ApprovedCopyCoverageRateState;
|
|
11
|
+
readonly rate: number | null;
|
|
12
|
+
readonly evaluatedCopy: number;
|
|
13
|
+
readonly approvedCoveredCopy: number;
|
|
14
|
+
readonly findings: readonly ApprovedCopyCoverageRateFinding[];
|
|
15
|
+
readonly proposedPositions: readonly unknown[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Computes `approved copy coverage rate`: shipped audience-facing copy
|
|
19
|
+
* resolved from approved traceable registry entries / all shipped
|
|
20
|
+
* audience-facing copy evaluated.
|
|
21
|
+
*/
|
|
22
|
+
export declare function assessApprovedCopyCoverageRate(input: unknown): ApprovedCopyCoverageRateAssessment;
|
|
23
|
+
//# sourceMappingURL=approved-copy-coverage-rate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approved-copy-coverage-rate.d.ts","sourceRoot":"","sources":["../src/approved-copy-coverage-rate.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,6BAA6B,GAAG,WAAW,GAAG,UAAU,GAAG,eAAe,CAAC;AAEvF,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,6BAA6B,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,+BAA+B,EAAE,CAAC;IAC9D,QAAQ,CAAC,iBAAiB,EAAE,SAAS,OAAO,EAAE,CAAC;CAChD;AAyDD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,kCAAkC,CA4GjG"}
|