# configuration/strings/catalog.strings.ts

> 34 lines of code and 12 definitions.

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

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

## Definitions

- `commandFailed` (lexical_declaration, line 1, exported)
- `productLine` (lexical_declaration, line 5, exported)
- `stepLine` (lexical_declaration, line 9, exported)
- `unknownProducer` (lexical_declaration, line 13, exported)
- `duplicateProducer` (lexical_declaration, line 17, exported)
- `duplicateStep` (lexical_declaration, line 21, exported)
- `duplicateGiver` (lexical_declaration, line 25, exported)
- `missingNeed` (lexical_declaration, line 29, exported)
- `stuckSteps` (lexical_declaration, line 33, exported)
- `undeclaredConcept` (lexical_declaration, line 37, exported)
- `unknownCanonRef` (lexical_declaration, line 41, exported)
- `REGENERATED` (lexical_declaration, line 45, exported)

## Contained in

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

## Used by

- [core/adapters/invocation.adapter.ts](https://banes-lab.com/source/quality/core/adapters/invocation.adapter.ts.md)
- [core/coordinators/catalog.coordinator.ts](https://banes-lab.com/source/quality/core/coordinators/catalog.coordinator.ts.md)
- [core/pipelines/catalog.pipeline.ts](https://banes-lab.com/source/quality/core/pipelines/catalog.pipeline.ts.md)
- [core/registries/producer.registry.ts](https://banes-lab.com/source/quality/core/registries/producer.registry.ts.md)
- [core/registries/step.registry.ts](https://banes-lab.com/source/quality/core/registries/step.registry.ts.md)
- [core/steps/concept.step.ts](https://banes-lab.com/source/quality/core/steps/concept.step.ts.md)

## Linked from

- [core/adapters](https://banes-lab.com/anatomy/quality/folder-quality-core-adapters.md)
- [core/coordinators](https://banes-lab.com/anatomy/quality/folder-quality-core-coordinators.md)
- [core/pipelines](https://banes-lab.com/anatomy/quality/folder-quality-core-pipelines.md)
- [core/registries](https://banes-lab.com/anatomy/quality/folder-quality-core-registries.md)
- [core/steps](https://banes-lab.com/anatomy/quality/folder-quality-core-steps.md)

## Source

```typescript
export const commandFailed = function commandFailed(command: string, stderr: string): string {
    return `The catalog command "${command}" failed. Install the tool it runs, or leave its producer out of the refresh.\n${stderr}`;
};

export const productLine = function productLine(source: string, summary: string): string {
    return `\n▸ ${source}\n${summary}\n`;
};

export const stepLine = function stepLine(name: string, milliseconds: number): string {
    return `  ✓ ${name} (${String(Math.round(milliseconds))} ms)\n`;
};

export const unknownProducer = function unknownProducer(name: string, known: string): string {
    return `No catalog producer is named "${name}". Name one of ${known}.`;
};

export const duplicateProducer = function duplicateProducer(name: string): string {
    return `Two catalog producers register the name "${name}". Give each producer file its own name.`;
};

export const duplicateStep = function duplicateStep(name: string): string {
    return `Two catalog steps register the name "${name}". Give each step file its own name.`;
};

export const duplicateGiver = function duplicateGiver(key: string, first: string, second: string): string {
    return `The catalog steps "${first}" and "${second}" both give "${key}". Let exactly one step give it.`;
};

export const missingNeed = function missingNeed(step: string, key: string): string {
    return `The catalog step "${step}" needs "${key}", which no step gives. Add the step that gives it, or drop the need.`;
};

export const stuckSteps = function stuckSteps(names: readonly string[]): string {
    return `The catalog steps ${names.join(", ")} wait on each other in a cycle. Break the cycle between their needs and gives.`;
};

export const undeclaredConcept = function undeclaredConcept(tool: string, ruleId: string, concept: string): string {
    return `Rule ${tool}:${ruleId} declares unknown concept "${concept}". Add it to the concept data, or fix the rule's canonical list.`;
};

export const unknownCanonRef = function unknownCanonRef(ref: string, concept: string): string {
    return `canon-refs: ${ref} names "${concept}", which is no quality concept\n`;
};

export const REGENERATED = "\n✓ quality-rule catalog regenerated\n";
```
