# configuration/strings/quality.strings.ts

> 51 lines of code and 15 definitions.

Tree: GovLab Quality
Language: typescript
Layer: product
Canonical: https://banes-lab.com/anatomy/quality#file-quality-configuration-strings-quality-strings-ts
Source text: https://banes-lab.com/source/quality/configuration/strings/quality.strings.ts.txt

Listed in [configuration/strings](https://banes-lab.com/api/source/quality/configuration/strings.md), after [configuration/strings/plugin.strings.ts](https://banes-lab.com/source/quality/configuration/strings/plugin.strings.ts.md) and before [configuration/strings/rule.strings.ts](https://banes-lab.com/source/quality/configuration/strings/rule.strings.ts.md).

## Definitions

- `duplicateConcern` (lexical_declaration, line 1, exported)
- `unknownResolvedConcern` (lexical_declaration, line 7, exported)
- `concernsShape` (lexical_declaration, line 11, exported)
- `unknownSetting` (lexical_declaration, line 15, exported)
- `channelMismatch` (lexical_declaration, line 19, exported)
- `unknownSurface` (lexical_declaration, line 38, exported)
- `fixedSurfaceOwner` (lexical_declaration, line 42, exported)
- `surfaceWithoutRow` (lexical_declaration, line 51, exported)
- `ownersInvalid` (lexical_declaration, line 55, exported)
- `configInvalid` (lexical_declaration, line 59, exported)
- `unknownConcept` (lexical_declaration, line 63, exported)
- `EMPTY_CONCERN_ID` (lexical_declaration, line 5, exported)
- `ownerContention` (lexical_declaration, line 23, exported)
- `fixedOwnerValue` (lexical_declaration, line 27, exported)
- `FIXED_OWNER_FALLBACK` (lexical_declaration, line 36, exported)

## Contained in

- [configuration/strings](https://banes-lab.com/anatomy/quality/folder-quality-configuration-strings.md)

## Used by

- [core/factories/quality.factory.ts](https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md)
- [core/loaders/concern.loader.ts](https://banes-lab.com/source/quality/core/loaders/concern.loader.ts.md)
- [core/loaders/config.loader.ts](https://banes-lab.com/source/quality/core/loaders/config.loader.ts.md)
- [core/resolvers/plan.resolver.ts](https://banes-lab.com/source/quality/core/resolvers/plan.resolver.ts.md)
- [core/validators/concern.validator.ts](https://banes-lab.com/source/quality/core/validators/concern.validator.ts.md)
- [core/validators/surface.validator.ts](https://banes-lab.com/source/quality/core/validators/surface.validator.ts.md)

## Linked from

- [core/factories](https://banes-lab.com/anatomy/quality/folder-quality-core-factories.md)
- [core/loaders](https://banes-lab.com/anatomy/quality/folder-quality-core-loaders.md)
- [core/resolvers](https://banes-lab.com/anatomy/quality/folder-quality-core-resolvers.md)
- [core/validators](https://banes-lab.com/anatomy/quality/folder-quality-core-validators.md)

## Source

```typescript
export const duplicateConcern = function duplicateConcern(id: string): string {
    return `quality-relations: duplicate concern id "${id}"; the later record wins`;
};

export const EMPTY_CONCERN_ID = "quality-relations: skipped a concern with an empty id";

export const unknownResolvedConcern = function unknownResolvedConcern(id: string): string {
    return `quality-relations: resolve() got unknown concern id "${id}"`;
};

export const concernsShape = function concernsShape(kind: string): string {
    return `quality.concerns: expected an object of concept → value, got ${kind}`;
};

export const unknownSetting = function unknownSetting(id: string): string {
    return `No canonical setting is named "${id}".`;
};

export const channelMismatch = function channelMismatch(id: string, kind: string, channel: string): string {
    return `"${id}" is a ${kind} setting, and it was given in the ${channel} channel.`;
};

export const ownerContention = function ownerContention(surface: string, lang: string, tools: string): string {
    return `The tools ${tools} each claim "${surface}" in ${lang}, and no owner is declared for it.`;
};

export const fixedOwnerValue = function fixedOwnerValue(
    owner: string,
    imposed: string,
    lang: string,
    setting: string,
): string {
    return `${owner} is fixed to ${imposed} for ${lang}, so it cannot apply ${setting}.`;
};

export const FIXED_OWNER_FALLBACK = "the tool";

export const unknownSurface = function unknownSurface(surface: string): string {
    return `No ownership surface is named "${surface}".`;
};

export const fixedSurfaceOwner = function fixedSurfaceOwner(
    surface: string,
    lang: string,
    owner: string,
    tool: string,
): string {
    return `${surface} has the fixed owner ${owner} for ${lang}, so ${tool} cannot own it.`;
};

export const surfaceWithoutRow = function surfaceWithoutRow(tool: string, surface: string, lang: string): string {
    return `"${tool}" has no mapping row for the surface "${surface}" in ${lang}, so it cannot own that surface.`;
};

export const ownersInvalid = function ownersInvalid(detail: string): string {
    return `govlab.config: quality.owners names owners the catalog refuses. Correct each entry below.\n${detail}`;
};

export const configInvalid = function configInvalid(file: string, errors: string): string {
    return `${file} is not a valid govlab config. Correct each field named here: ${errors}.`;
};

export const unknownConcept = function unknownConcept(key: string, count: number): string {
    return `quality.concerns: unknown concept "${key}", which is not one of the ${String(count)} canonical concepts`;
};
```
